02_応用

Section 3: セキュリティとコンプライアンス — 🔧 応用編

対象: 実務 3-5 年・GCP 経験あり / 設計判断・トレードオフ・規制対応の設計パターン を体系化したい人。 目標: 試験で問われる「正しいセキュリティ選択」を高精度で出せるようになる。


1. IAM 設計の応用

IAM 設計の 4 つの原則

原則 内容
最小権限(Least Privilege) 必要最小限の権限のみ付与
職務分離(Separation of Duties) 1 人で全工程を完結できない設計
グループベース付与 個人ではなくグループに付与(メンバー変動に強い)
継続的レビュー Policy Analyzer / Recommender で定期見直し

グループベース IAM の実装パターン

組織構造
  ├── Google Group: gcp-admins@example.com    → roles/owner(Project レベル)
  ├── Google Group: gcp-developers@example.com → roles/editor(dev Folder)
  ├── Google Group: gcp-data-scientists@example.com → roles/bigquery.user(特定 dataset)
  ├── Google Group: gcp-finance@example.com    → roles/billing.viewer
  └── Google Group: gcp-auditors@example.com   → roles/logging.viewer + roles/iam.securityReviewer

人事異動で個人を group に追加/削除するだけで権限が変わる。試験頻出の正解パターン。

Conditional IAM(条件付き IAM)

権限付与に 条件式(CEL: Common Expression Language) を追加できる。

例 1: 時刻制限(営業時間のみ)
  request.time.getHours("Asia/Tokyo") >= 9 &&
  request.time.getHours("Asia/Tokyo") < 18

例 2: リソース名による制限
  resource.name.startsWith("projects/prod-")

例 3: タイトル/タグによる制限
  resource.matchTag("env", "production")

例 4: IP 範囲制限
  inIpRange(origin.ip, "10.0.0.0/8")

IAM Deny Policy(拒否ポリシー、新機能)

通常の IAM は許可ベース(許可がなければアクセス不可)ですが、明示的に拒否 することも可能。

Allow ロールを継承していても、Deny Policy がある場合は拒否される
   ↓
組織レベルで「全員に projects.delete を deny」など強制

Deny は Allow より優先。Org Policy と組合せて統制を強化。

IAM のロール選定(最頻出)

場面 推奨ロール(事前定義)
開発者が dev でアプリ作成 roles/editor (プロジェクト単位)
監査担当が全 Project の IAM を確認 roles/iam.securityReviewer
監視担当がログ閲覧 roles/logging.viewer + roles/monitoring.viewer
課金確認 roles/billing.viewer
Bucket 内オブジェクトのみ読込 roles/storage.objectViewer
BigQuery でクエリ実行 roles/bigquery.jobUser + roles/bigquery.dataViewer
Cloud SQL の DB 接続 roles/cloudsql.client
Secret 取得 roles/secretmanager.secretAccessor
KMS 鍵で暗号化/復号 roles/cloudkms.cryptoKeyEncrypterDecrypter

2. リソース階層の設計パターン

パターン A: 環境別 Folder(一般的)

Organization (example.com)
  ├── Folder: production
  │   ├── Project: prod-app-001
  │   ├── Project: prod-db-001
  │   └── Project: prod-network-001
  ├── Folder: staging
  │   └── Project: staging-app-001
  └── Folder: development
      └── Project: dev-app-001

利点:環境ごとの Org Policy(例:prod でのみ Confidential VM 強制)

パターン B: 部門別 Folder(大企業向け)

Organization
  ├── Folder: department-A
  │   ├── Folder: prod / dev / qa
  ├── Folder: department-B
  └── Folder: shared-services(共通インフラ)

利点:部門ごとの請求分離、独立した管理権限

パターン C: 規制対応の隔離 Folder

Organization
  ├── Folder: regulated-hipaa(Assured Workloads)
  ├── Folder: regulated-pci(Assured Workloads)
  └── Folder: general

利点:規制対応プロジェクトをロックダウン、誤って他環境と混ざらない


3. Organization Policy の設計

組織全体に 強制可能な制約 を設定。Folder/Project へ強制継承

よく使う Org Policy 制約(必須暗記)

制約名 効果
constraints/iam.allowedPolicyMemberDomains 特定ドメインの ID のみ IAM 付与可(外部ユーザー禁止)
constraints/compute.requireOsLogin SSH キーではなく OS Login を強制
constraints/compute.vmExternalIpAccess VM の外部 IP 付与を制限/禁止
constraints/storage.uniformBucketLevelAccess GCS の Uniform IAM 強制(ACL 禁止)
constraints/sql.restrictPublicIp Cloud SQL のパブリック IP 禁止
constraints/gcp.resourceLocations リソース作成可能リージョンを制限(データ主権
constraints/iam.disableServiceAccountKeyCreation SA キー作成禁止
constraints/iam.disableServiceAccountCreation SA 作成禁止
constraints/serviceuser.services 有効化できる API を制限
constraints/compute.trustedImageProjects 信頼するイメージプロジェクトを制限
constraints/compute.disableNestedVirtualization ネステッド仮想化禁止
constraints/compute.vmCanIpForward IP 転送禁止
constraints/iam.workloadIdentityPoolProviders WIF プロバイダ制限

試験頻出パターン

シナリオ
「データを EU 圏外に出さない」 constraints/gcp.resourceLocations で EU リージョンのみ許可
「VM に外部 IP を付与させない」 constraints/compute.vmExternalIpAccess
「SA キーが漏洩する事故を防ぐ」 constraints/iam.disableServiceAccountKeyCreation + WIF 利用
「公開 GCS バケットを作らせない」 constraints/storage.publicAccessPrevention

4. 暗号化設計の選定(最頻出)

CMEK / EKM / HSM の判断フロー

鍵管理の要件は?
  顧客側で鍵を完全管理したい?
    YES ↓
       鍵を GCP 外部に置きたい?
         YES → Cloud EKM(外部 HSM 連携)
         NO ↓
            FIPS 140-2 Level 3 が必要?
              YES → Cloud HSM(または Cloud KMS with HSM backend)
              NO → Cloud KMS(CMEK、ソフトウェア鍵)
    
    NO → Google-managed encryption keys(デフォルト)

CMEK 対応サービスの整理(重要)

サービス CMEK CSEK EKM
Cloud Storage
Cloud SQL -
BigQuery -
Compute Engine (Persistent Disk)
GKE (etcd, Persistent Disk) -
Spanner - -
Pub/Sub - -
Secret Manager - -
Dataflow - -
Vertex AI - -

Cloud KMS 鍵ライフサイクル

[作成]
  ↓ 自動ローテーション設定(例: 90 日)
[使用中]
  ↓ ローテーション
[新バージョン](古いバージョンも併存)
  ↓ 古いバージョン無効化
[Disabled](破壊予約)
  ↓ 24 時間〜30 日の猶予
[Destroyed](破壊、復旧不可)

注意: 破壊後は復元不可 = 暗号化済みデータが復号不能になる。設計時に 破壊期間の猶予 を慎重に検討。

CMEK で得られる主な利点


5. 職務分離(Separation of Duties)

「1 人で全工程をできないようにする」設計。

典型的な職務分離パターン

役割 権限の範囲
Developer コード書く、PR 作成、dev デプロイ
DevOps Engineer 本番デプロイ、インフラ管理
Security Engineer IAM 設計、Org Policy
Network Engineer VPC、Interconnect 管理
Audit / Compliance ログ閲覧のみ、変更不可
Billing Admin 課金管理のみ
Cloud KMS Admin 鍵作成・管理(暗号化使用は別ロール)
Cloud KMS User 暗号化/復号のみ(鍵管理不可)

KMS の職務分離例

[KMS Admin]                [Application]
  権限: 鍵の作成・削除・     権限: 暗号化・復号のみ
       ローテーション
       
  ⇒ 互いに独立、相互の権限を持たない

これにより、アプリ管理者が誤って鍵を削除する事故 や、KMS 管理者がアプリデータを覗き見 することを防ぐ。


6. VPC Service Controls の応用

Perimeter の構造

[Service Perimeter]
  ├── Projects(複数 Project を 1 つの境界に包含)
  ├── Restricted Services(保護対象サービス)
  ├── VPC Accessible Services(境界内で使えるサービス)
  ├── Access Levels(境界外からの例外許可ルール)
  └── Ingress / Egress Rules(最新の細粒度ルール)

Ingress / Egress Rules(最新・推奨)

旧来の Access Level だけでは表現できない、細かい入出方向のルール を定義。

Egress Rules: 境界内から外へ
  例: 「BigQuery service account から 特定の Project への BQ クエリは許可」

Ingress Rules: 境界外から内へ
  例: 「特定の IP / SA から GCS bucket への read のみ許可」

Access Context Manager と組合せ

[Access Level]
  IP 範囲: 10.0.0.0/8
  デバイスポリシー: 暗号化 ON + 最新 OS
  地理: Japan
  時刻: 9:00 - 18:00 JST
  ↓
[VPC SC Perimeter にアクセス]

Dry-Run モード(必修)

本番化前に 影響をシミュレート できる。違反ログだけ記録、実際のブロックはしない。

試験頻出: 「VPC SC を導入したい、業務影響を確認したい」→ Dry-Run モード

試験パターン

シナリオ
「BigQuery データを境界外にコピーされないように」 VPC SC + Restricted Services に BigQuery
「特定の IP からのみ API アクセス許可」 Access Level(IP 範囲)+ VPC SC
「BYOD からは管理画面アクセス不可」 Access Context Manager(デバイスポリシー)+ IAP
「VPC SC 導入の影響評価」 Dry-Run モード

7. リモートアクセス手法の選定マトリクス

詳細選定表

要件 推奨 理由
内部 Web アプリ公開(Google ログイン) IAP for HTTP(S) VPN 不要、簡単
内部 VM に SSH(VPN なし) IAP TCP Forwarding コマンド: gcloud compute ssh --tunnel-through-iap
委託先 / 取引先のアクセス Workforce Identity Federation + IAP 外部 IdP 経由でアクセス
BYOD でアクセス(デバイス検証必須) Chrome Enterprise Premium デバイスポスチャ + コンテキスト
AWS Lambda → GCS Read Workload Identity Federation SA キー不要
GitHub Actions → GCP デプロイ Workload Identity Federation SA キー不要
Kubernetes Pod → GCP API Workload Identity for GKE SA キー不要
一時的に特権を借りる Service Account Impersonation 短期トークン
オンプレ ↔ GCP 全社接続 Cloud Interconnect or HA VPN 大規模 / 暗号化必要

Workload Identity for GKE と Workload Identity Federation の違い

観点 Workload Identity for GKE Workload Identity Federation
用途 GKE Pod → GCP API 外部ワークロード → GCP API
範囲 GKE 内部 AWS / Azure / GitHub Actions など
仕組み Kubernetes SA を GCP SA にマッピング OIDC/SAML 経由で短期トークン取得
キー 不要 不要

8. ソフトウェアサプライチェーン保護の応用

CI/CD パイプライン保護の全体像

[Cloud Source Repo / GitHub]
   ↓ Push
[Cloud Build]
   ├── Vulnerability Scanning(Artifact Analysis)
   ├── SBOM 生成(Software Bill of Materials)
   ├── 署名 attestation 生成(in-toto / Sigstore)
   └── SLSA Level 3 適合ビルド
   ↓
[Artifact Registry](イメージ保管 + 継続的スキャン)
   ↓
[Binary Authorization]
   ├── 署名検証(誰が作ったか)
   ├── 脆弱性スコア検証
   ├── プロビナンス検証(どう作られたか)
   └── 適合イメージのみデプロイ許可
   ↓
[GKE / Cloud Run]

Binary Authorization のポリシー設計

Project レベル: デフォルトポリシー(全て要署名)
  ↓
Cluster レベル: クラスタごとに上書き
  例: dev クラスタ → 緊急用に Break-Glass 許可
      prod クラスタ → 必ず特定の attestor が署名したもののみ

Break-Glass デプロイ(緊急時の例外)

緊急対応で署名なしのイメージをデプロイしたいケース。

[Binary Authorization Break-Glass]
  ↓ アノテーション付きでデプロイ
[ログに緊急デプロイ記録]
  ↓ 監査
[後で適切な署名で再デプロイ]

SLSA レベルの実装目安

レベル 実装要件
SLSA 1 Cloud Build + provenance 生成
SLSA 2 + GitHub 認証 + ホストビルド
SLSA 3 + 隔離ビルド環境 + 改竄不可 attestation
SLSA 4 + 2 人レビュー + 再現可能ビルド

試験頻出: 「コンテナイメージの信頼性を担保したい」→ Binary Authorization + SLSA


9. Secure AI(最新・必須)

LLM / AI セキュリティの 3 つの軸

入力(プロンプト)保護
   └── Model Armor
       ├── Prompt Injection 検出
       ├── Jailbreak 検出
       ├── 機密 / PII 検出
       └── 出力フィルタリング

データ保護
   └── Sensitive Data Protection(旧 Cloud DLP)
       ├── PII 検出(メール、SSN、クレカ、医療 ID)
       ├── マスキング / トークン化
       └── 構造化・非構造化データ両対応

モデル保護
   ├── Confidential VM(メモリ暗号化)
   ├── CMEK でモデル重み暗号化
   ├── VPC SC でモデルエクスポート防止
   └── IAM で推論アクセス制限

Model Armor の利用パターン

ユーザー入力 → Model Armor(Sanitization)→ Gemini / 自社 LLM
                ↓ blocked
              拒否レスポンス + 監査ログ

主要設定項目:

Sensitive Data Protection の検出パターン

データタイプ InfoType の例
個人識別 PERSON_NAME, EMAIL_ADDRESS, PHONE_NUMBER
米国 PII US_SOCIAL_SECURITY_NUMBER, US_DRIVERS_LICENSE_NUMBER
金融 CREDIT_CARD_NUMBER, IBAN_CODE
医療 US_HEALTHCARE_NPI, MEDICAL_RECORD_NUMBER
国別 ID JAPAN_INDIVIDUAL_NUMBER(マイナンバー)
認証情報 GCP_CREDENTIALS, AWS_CREDENTIALS, JSON_WEB_TOKEN

モデル盗難対策

[Vertex AI Model Registry]
   ↓
[CMEK で暗号化された Model]
   ↓
[VPC SC 内のみアクセス可能]
   ↓
[IAM で利用者限定]
   ↓
[Confidential VM 上で推論]

10. 規制対応の応用

HIPAA 対応(米国医療)

要件 実装
BAA(Business Associate Agreement)締結 Google Cloud と契約
対象サービス利用 HIPAA Eligible Services のみ
暗号化 CMEK 推奨
監査ログ Admin / Data Access 両方有効化
アクセス管理 IAM 最小権限 + VPC SC
物理セキュリティ Google 責任
隔離環境(オプション) Assured Workloads (HIPAA)

PCI DSS 対応(クレジットカード)

要件 実装
カード番号保護 Sensitive Data Protection でマスキング、トークン化
暗号化 TLS + CMEK
鍵管理 Cloud HSM または Cloud KMS
ネットワーク隔離 VPC + VPC SC + Hierarchical Firewall
監査ログ Cloud Audit Logs(全種類)
隔離環境 Assured Workloads (PCI DSS)
脆弱性管理 Container Analysis + Security Command Center

GDPR 対応(EU 個人データ)

要件 実装
データ主権 リージョン制限(EU リージョン)
Org Policy constraints/gcp.resourceLocations で EU 圏のみ
削除権(Right to be Forgotten) GCS Lifecycle + BigQuery DELETE
データ転送(EU 外) SCC(Standard Contractual Clauses)+ Audit
監査 Cloud Audit Logs + Access Transparency
データ処理記録 DPA(Data Processing Agreement)
サブプロセッサー透明性 Google Cloud Sub-processors リスト

SOC 2 対応

要件 実装
Google Cloud の SOC 2 レポート取得 Compliance Reports Manager
顧客側のコントロール証跡 IAM 設計、変更管理プロセス、Audit Logs
自社サービスを SOC 2 認証取得 上記 + 外部監査人とのオーディット

FedRAMP 対応(米国連邦政府)

要件 実装
隔離環境 Assured Workloads (FedRAMP High / Moderate)
US Person Support Sovereign Controls
暗号化 Cloud HSM (FIPS 140-2 Level 3)
監査 Access Transparency + Access Approval

11. 監査ログの設計

ログ保管設計

種類 保管先 保管期間(推奨)
Admin Activity Logging(400 日デフォルト 規制対応で BigQuery / GCS Archive にエクスポート
Data Access Logging(30 日デフォルト 必要なら長期保管へエクスポート(コスト注意)
System Event Logging(400 日) エクスポート任意
Policy Denied Logging(30 日) セキュリティ調査用

ログエクスポートの構成(Log Sink)

[Cloud Logging]
   ↓ Log Sink
   ├── BigQuery(分析・SQL クエリ)
   ├── Cloud Storage(長期保管、Archive クラス)
   ├── Pub/Sub(リアルタイム連携)
   └── 別 Project の Logging(集中管理)

監査ログのフィルタリング例

# 重要操作のフィルタ例(CEL)
protoPayload.methodName="SetIamPolicy"
protoPayload.methodName=~"google.iam.admin.v1.IAM.*"
severity>=ERROR
resource.type="gcs_bucket" AND
  protoPayload.methodName="storage.objects.delete"

Aggregated Sink(組織横断ログ集約)

Organization レベルで Sink を作成し、全 Project のログを 1 か所に集約

[Organization Logging]
   ↓ Aggregated Sink
[Centralized Project (audit-prod)]
   └── BigQuery dataset + GCS bucket
       ↓ アクセス
   [SIEM / Chronicle Security Operations]

12. Security Command Center(SCC)

GCP の セキュリティ統合ダッシュボード。脆弱性・設定不備・脅威を一元管理。

SCC の主要機能

機能 内容
Security Health Analytics 設定不備の自動検出(公開バケット、弱い IAM 等)
Event Threat Detection 脅威検出(マルウェア、不審アクセス)
Container Threat Detection GKE 内の脅威(暗号通貨マイナー等)
VM Threat Detection GCE VM 内の脅威
Web Security Scanner App Engine / GCE 上の Web アプリの脆弱性
Sensitive Data Protection 連携 データ内 PII 検出
Chronicle Security Operations 連携 SIEM / SOAR 統合

SCC のティア

ティア 含まれるもの
Standard Security Health Analytics(基本のみ)
Premium 全機能 + Threat Detection + 連携
Enterprise(最新) Chronicle + Mandiant 統合、フルマネージド SecOps

13. 設計判断のトレードオフ例

ケース 1: CMEK vs Cloud HSM vs EKM

要件: 「規制対応で顧客が鍵を完全に管理」

選択肢 コスト 運用負担 規制適合
A: CMEK (Cloud KMS) HIPAA OK、PCI DSS OK
B: Cloud HSM FIPS 140-2 Level 3 OK
C: Cloud EKM 最高 高(外部 HSM 運用) 鍵を完全外部保持要件

判断軸

ケース 2: IAP vs Chrome Enterprise Premium vs VPN

要件: 「リモートワーカーから内部 Web アプリへのアクセス」

選択肢 用途 デバイス制御
A: HA VPN 全 IP 範囲をトンネル経由 デバイス制御なし
B: IAP 個別アプリへの認証付きアクセス デバイス制御なし
C: Chrome Enterprise Premium IAP + デバイスポスチャ デバイス制御 + コンテキスト

判断軸

ケース 3: VPC SC vs IAM のみ

要件: 「規制データの境界保護」

選択肢 強度
A: IAM のみ IAM が漏洩したら全データ漏洩
B: IAM + VPC SC IAM 漏洩しても境界外には出ない

正解は常に B。VPC SC は IAM の補完(独立した境界)。

ケース 4: Sensitive Data Protection vs Confidential VM

要件: 「処理中の機密データを守る」

観点 Sensitive Data Protection Confidential VM
対象 データの 内容(PII 検出・マスキング) データの 処理場所(メモリ暗号化)
用途 データ前処理・匿名化 処理中の盗み見防止

両方併用 が理想(PII を匿名化したデータを Confidential VM で処理)。


14. 試験で問われる「定番のセキュリティ設計問題」

問題パターン 1: 「最も安全な構成は?」

判断軸

  1. 多層防御(複数レイヤー)になっているか
  2. 最小権限の原則
  3. 監査が可能か
  4. キー / 鍵が GCP 内で完結しているか or 顧客管理か

問題パターン 2: 「規制対応の構成は?」

判断軸

  1. 規制を特定(HIPAA / PCI DSS / GDPR / FedRAMP)
  2. データ主権要件(リージョン制限)
  3. 暗号化方式(CMEK / HSM)
  4. 監査ログ・Access Transparency
  5. Assured Workloads が使えるか

問題パターン 3: 「キー無しでアクセスしたい」

判断軸

  1. Service Account キーは使うべきではない
  2. 外部ワークロード → Workload Identity Federation
  3. GKE Pod → Workload Identity for GKE
  4. 内部 → Service Account Impersonation

問題パターン 4: 「ML / AI モデルを守りたい」

判断軸

  1. プロンプト保護 → Model Armor
  2. データ匿名化 → Sensitive Data Protection
  3. モデル盗難防止 → Confidential VM + CMEK + VPC SC

15. 章末まとめ

必ず覚える「サービス対応表」

要件 デフォルト解
階層的アクセス制御 Org → Folder → Project → Resource IAM
強制可能な統制 Organization Policy
鍵を顧客管理(ソフトウェア) Cloud KMS(CMEK)
FIPS 140-2 Level 3 Cloud HSM
鍵を GCP 外部保持 Cloud EKM
シークレット保管 Secret Manager
データ境界保護 VPC Service Controls
階層的ファイアウォール Hierarchical Firewall Policy
VPN なし内部 Web IAP for HTTP(S)
VPN なし SSH IAP TCP Forwarding
BYOD ゼロトラスト Chrome Enterprise Premium
SA キー無しで外部から Workload Identity Federation
一時的特権 Service Account Impersonation
サプライチェーン保護 Binary Authorization + SLSA + Artifact Registry
LLM プロンプト保護 Model Armor
PII マスキング Sensitive Data Protection(旧 Cloud DLP)
規制隔離環境 Assured Workloads
監査ログ集約 Cloud Audit Logs + Aggregated Sink
統合セキュリティ管理 Security Command Center

次のステップ