GCPのセキュリティサービスは、サービス名から覚えるよりも、要件から逆引きできる方が実務でも試験でも使いやすいです。
「社内ユーザーだけ通したい」「APIキーを保管したい」「保存時暗号化の鍵を顧客管理したい」「外部IPを禁止したい」といった要件から、どのサービスを選ぶかを整理します。
まず逆引き表
| やりたいこと | 使うサービス | 見るポイント |
|---|---|---|
| DDoS / WAF / rate limitでWebアプリを守りたい | Cloud Armor | Load Balancer前段の入口防御 |
| 社内ユーザーだけWebアプリに通したい | IAP | ユーザーIDベースのアプリ入口制御 |
| GCPリソースの操作権限を制御したい | IAM | 誰が何をできるか |
| アプリにGCPリソース操作権限を持たせたい | Service Account + IAM | アプリの実行主体と最小権限 |
| APIキーやDBパスワードを保管したい | Secret Manager | アプリが読む秘密値 |
| 保存時暗号化の鍵を顧客管理したい | Cloud KMS / CMEK | Cloud KMS鍵を対象サービスに指定 |
| 機密データを検出・マスキングしたい | Sensitive Data Protection | PII検出、分類、マスク |
| GCS / BigQuery のデータ持ち出しを抑止したい | VPC Service Controls | service perimeter |
| 外部IP付きVMを禁止したい | Organization Policy | 組織・フォルダ・プロジェクト単位の制約 |
| 設定不備や脅威を可視化したい | Security Command Center | セキュリティ検知・統合管理 |
| 監査ログを追いたい | Cloud Audit Logs / Cloud Logging | 誰が何をしたか |
Webアプリの外部入口を守りたい
- 要件: Internetから来る攻撃、DDoS、WAF、bot、rate limitを扱いたい
- 選択: Cloud Armor
Cloud Armorは、Load Balancerの前段でHTTP(S)リクエストに対してセキュリティポリシーを適用します。
flowchart LR user["Internet user"] armor["Cloud Armor"] policy["Security policy<br/>WAF rules / rate limit / IP allow/deny"] lb["External Application Load Balancer"] backend["Backend<br/>Cloud Run / GKE / VM"] user --> armor --> lb --> backend armor -. "applies" .-> policy
アプリに入ってよいユーザーを判定するIAPや、GCPリソース操作権限を制御するIAMとは役割が違います。
社内ユーザーだけWebアプリに入れたい
- 要件: 社員や特定グループだけ管理画面にアクセスさせたい。VPNなしでユーザー単位に制御したい
- 選択: IAP
IAPは、アプリの前段でユーザー認証・認可を行う門番です。
flowchart LR user["User"] idp["IdP / Google identity"] iap["IAP"] app["Web app"] user -->|"login"| idp user -->|"access app"| iap iap -->|"allowed user only"| app
IAPそのものはIdPではありません。Google Workspace、Cloud Identity、外部IdPなどで認証されたユーザーを、アプリ入口で通すかどうかを制御します。
IAPとIdPの関係は『IAPとSSO・IdP・SAML・OIDC・IAMの関係』で扱います。
GCPリソースの操作権限を制御したい
- 要件: 誰がCloud Storageを読めるか、誰がBigQueryを見られるか、誰がCloud Runにデプロイできるかを制御したい
- 選択: IAM
IAMはGCPリソース操作権限を制御します。
人間ユーザーは、IAMで許可されたGCPリソース操作だけできます。アプリはService Accountとして動き、IAMで許可されたGCPリソース操作だけできます。
アプリの権限は、Service Accountに必要最小限のIAMロールを付ける形で設計します。
APIキーやDBパスワードを保管したい
- 要件: APIキー、DBパスワード、Webhook secret、証明書を安全に保管したい
- 選択: Secret Manager
Secret Managerは、アプリが実行時に読む秘密値を置くサービスです。
Cloud RunがSecret ManagerからDB_PASSWORDを読み、その値を使ってCloud SQLへ接続するような使い方です。
.env に入れがちな秘密値を、IAM・監査・バージョン管理つきで扱うサービスと考えると分かりやすいです。
保存時暗号化の鍵を顧客管理したい
- 要件: Cloud SQL / GCS / BigQuery の保存時暗号化に使う鍵を自分で管理したい。鍵をローテーション、無効化、監査したい
- 選択: Cloud KMS / CMEK
CMEKは、GCPサービスの保存時暗号化にCloud KMS上の顧客管理鍵を使う方式です。
Cloud SQL / GCS / BigQuery のCMEK設定でCloud KMS鍵を指定します。
Secret Managerはアプリが読む秘密値、Cloud KMS / CMEKは暗号鍵と保存時暗号化の領域です。詳しくは『Secret Manager・Cloud KMS・CMEKの違い』で扱っています。
データ持ち出しを抑止したい
- 要件: GCSやBigQueryなどのデータを境界外に持ち出されにくくしたい
- 選択: VPC Service Controls
VPC Service Controlsは、Google Cloudサービスに対してservice perimeterを作り、境界外へのデータ流出リスクを下げる仕組みです。
VPC-SCはprivate接続ではなく、Google API系サービスのデータ境界を作るための仕組みです。
Private Service Connectはprivate接続、VPC Service Controlsはデータ持ち出し境界です。名前は似ていませんが、どちらも「閉じる」雰囲気があるため混ざりやすいです。
組織全体で禁止ルールを強制したい
- 要件: 外部IP付きVMを作らせたくない。特定リージョン以外を使わせたくない。特定サービスの利用を制限したい
- 選択: Organization Policy
Organization Policyは、組織・フォルダ・プロジェクト単位でガードレールを設定します。
IAMが「誰に何を許可するか」なら、Organization Policyは「組織として何を禁止・制限するか」です。
設定不備や脅威を見つけたい
- 要件: 危険な設定、脆弱性、脅威、リスクを可視化したい
- 選択: Security Command Center
Security Command Centerは、GCP上のセキュリティ状態を集約して見るためのサービスです。
アプリの正常性監視というより、クラウド環境のセキュリティリスクを見つける領域です。
まとめ
- 外部攻撃、WAFルール、rate limitはCloud Armorで扱う
- 社内ユーザーだけWebアプリに通すならIAP
- GCPリソース操作権限はIAM
- アプリの実行権限はService Account + IAM
- APIキーやDBパスワードはSecret Manager
- 保存時暗号化の顧客管理鍵はCloud KMS / CMEK
- データ持ち出し境界はVPC Service Controls
- 組織全体の禁止ルールはOrganization Policy
- 設定不備や脅威の可視化はSecurity Command Center