Google Cloud ハンズオン教科書|2026-08 版
第 13 章 試験ガイド 3.1 試験ガイド 2.1

セキュリティ設計 — 鍵・境界・ゼロトラスト

CMEK・VPC Service Controls・IAP。多層防御をアーキテクトの道具にする

この章で学ぶこと

試験ガイド対応: セクション 3.1(セキュリティを考慮した設計)、2.1(ネットワーク トポロジの構成)

ここまでの章で、権限は 第 2 章の IAM、ネットワークは 第 3 章と 第 12 章で設計してきました。この章はそれらを「多層防御(defense in depth)」として束ねます。守る対象は 3 つに整理できます。鍵(保存データの暗号化とシークレット)、境界(組織ポリシーと VPC Service Controls によるガードレール)、そしてゼロトラスト(IAP・Cloud Armor によるアクセス経路の防御)です。PCA 試験のセクション 3.1 は配点約 18% のドメインの中核で、「この要件ならどの層のどの道具か」を選ばせる問題が繰り返し出ます。

鍵 — 保存データの暗号化と Cloud KMS・Secret Manager

既定の暗号化 — 何もしなくても全データは暗号化されている

Google Cloud では、保存されるすべての顧客データが既定で AES-256 により暗号化されます。追加設定も追加費用も不要です。仕組みを知っておくと CMEK の理解が速くなります。データはストレージ層でチャンクに分割され、チャンクごとに別のデータ暗号鍵(DEK)で暗号化されます。DEK 自体は鍵暗号鍵(KEK)でラップ(暗号化)されて保存されます。この 2 段構えをエンベロープ暗号化と呼びます。既定では KEK は Google 内部の鍵管理システム Keystore に保管され、定期的に自動ローテーションされます。暗号処理には FIPS 140-2 検証済みモジュール(BoringCrypto)が使われます。

つまりアーキテクトが選ぶのは「暗号化するかどうか」ではなく、KEK を誰が管理するかです。選択肢は 3 段階あります。

3 方式の違いは KEK(鍵暗号鍵)を誰が管理するかだけ Google 既定 KEK は Keystore に保存 Google が運用・設定不要 CMEK(Cloud KMS) 顧客が鍵を作成・管理 ローテーション・無効化・監査 CSEK(顧客が持参) リクエストごとに鍵を送る Google はハッシュのみ保持 ラップ(Google 運用) ラップ(顧客が制御) ラップ(都度提供) DEK(データ暗号鍵) チャンクごとに固有 AES-256 で暗号化 チャンク A チャンク B チャンク C チャンクごとに別の DEK。既定でもすべての保存データが AES-256 で暗号化される
図 13-1 エンベロープ暗号化と 3 方式の位置づけ。データを直接暗号化する DEK の仕組みは共通で、DEK をラップする KEK の管理者だけが方式によって入れ替わる。

CMEK — 鍵のライフサイクルを自分の手に

CMEK(customer-managed encryption keys、顧客管理の暗号鍵)は、KEK を Cloud KMS 上の自分の鍵に置き換える方式です。鍵の作成・保存場所・保護レベル・ローテーション・アクセス制御・無効化・破棄をすべて顧客が制御でき、鍵の利用が監査ログに残ります。Cloud Storage・BigQuery・Compute Engine をはじめ多数のサービスが CMEK に対応しています(対応サービスは公式ドキュメントの CMEK integrations 一覧で確認できます)。

仕組みの要点はサービスエージェントです。Cloud Storage や BigQuery などの CMEK 対応サービスは、プロジェクトごとの特別なサービスアカウント(サービスエージェント)を介して Cloud KMS に暗号化・復号を依頼します。このため、鍵に対して roles/cloudkms.cryptoKeyEncrypterDecrypter を付与する相手はエンドユーザーではなくサービスエージェントです。逆に言えば、鍵を無効化・破棄すればサービスは復号できなくなり、データへのアクセスを鍵側から一括遮断できます(クリプトシュレッディング)。これが「退役するデータの確実な無効化」や「有事の緊急遮断」という設計要件への答えになります。

アプリ / ユーザー オブジェクト操作 Cloud Storage バケット(既定鍵 = CMEK) サービスエージェント Google 管理の SA Cloud KMS 鍵 handson-key 無効化で復号不可 読み書き 暗号化 / 復号を依頼 サービスエージェントに roles/cloudkms.cryptoKeyEncrypterDecrypter の付与が必要 (gcloud storage service-agent --authorize-cmek が権限付与を自動化する)
図 13-2 CMEK の鍵利用フロー。鍵を使うのはエンドユーザーではなくサービスエージェントで、鍵への IAM がそのままデータアクセスの元栓になる。

CSEK — 鍵を持ち込む最終手段

CSEK(customer-supplied encryption keys、顧客提供の暗号鍵)は、Base64 エンコードした生の AES-256 鍵をリクエストのたびに自分で送り込む方式です。Google は鍵を保存せず、検証用の暗号学的ハッシュだけを保持します。鍵が Google 側に残らない代わりに制約が多く、Cloud Storage ではコンソールから CSEK オブジェクトを操作できず、バケット既定鍵にも設定できません。鍵をなくせばデータは復元不能です。対応サービスもごく一部で、Compute Engine のディスク向け CSEK はすでに非推奨となり CMEK への移行が案内されています(2026-08 時点)。実務でも試験でも、まず CMEK(外部に鍵を置きたいなら後述の Cloud EKM)を検討するのが筋です。

観点Google 既定CMEK(Cloud KMS)CSEK
KEK の管理者Google顧客(Cloud KMS 上)顧客(リクエスト毎に提供)
鍵の保管場所Google 内部の KeystoreCloud KMS(EKM なら外部)顧客の手元のみ
ローテーションGoogle が自動実施顧客が制御(対称鍵は自動化可)顧客が手動
鍵利用の監査ログなしあり—(鍵は都度送信)
追加費用なし鍵バージョン単位で課金なし(運用コスト大)
選ぶ場面特段の要件がない既定解鍵管理の証明・緊急遮断が要件鍵を一切預けられない例外時

Cloud KMS の構造とローテーション

Cloud KMS の資源はロケーション → キーリング → 鍵 → 鍵バージョンの階層です。キーリングと鍵はいったん作ると削除できません(破棄できるのは鍵バージョンだけで、名前は永久に残ります)。CMEK 用途では、鍵は保護対象リソースと同じロケーションに作るのが原則です。保護レベルは 3 系統あります(2026-08 時点)。

対称鍵には自動ローテーションを設定できます(--rotation-period)。ローテーションすると新しい鍵バージョンがプライマリになり、以後の暗号化に使われますが、既存データは再暗号化されません。古いバージョンは古いデータの復号のために有効なまま残ります。非対称鍵は公開鍵の配り直しが必要なため自動ローテーション非対応です。なお、CMEK 対応リソースの作成時に鍵・キーリング・権限付与まで自動生成する Cloud KMS Autokey も使えます。

Secret Manager — 「値そのもの」を守る

データベースのパスワードや API キーのようなシークレット(秘匿値)を環境変数やリポジトリにばらまかず一元管理するのが Secret Manager です。Cloud KMS との違いは明快で、KMS は鍵素材を決して外に出さず暗号処理だけを引き受けるのに対し、Secret Manager は値そのものを保存し、権限のある呼び出しに返すサービスです。

本番コードでの参照は latest ではなくバージョン番号を固定するのが公式の推奨です。料金はアクティブなバージョン数とアクセス回数に応じた従量制で、月あたりバージョン 6 個・アクセス 10,000 回までの無料枠があります(2026-08 時点)。

試験の視点: 暗号化の設問は「要件の動詞」で方式が決まります。「鍵のローテーションと破棄を自社で管理・証明したい」→ CMEK。「鍵素材を Google のインフラに置けない」→ Cloud EKM(または CSEK だが、運用負荷と対応サービスの狭さから正解になりにくい)。「特に要件がない」→ 既定の暗号化のままにして余計なコストと運用を増やさない、が Google 推奨の考え方です。

境界 — 組織ポリシーと VPC Service Controls

組織ポリシー — 「できない」を作るガードレール

IAM は「誰に何を許可するか」を決めますが、許可を持つ人の操作ミスや悪意までは防げません。組織ポリシーは、組織 / フォルダ / プロジェクトに継承される制約(constraint)で「誰であってもこの構成は作れない」を強制します(第 2 章の入口の深掘りです)。制約にはブール型とリスト型があり、セキュリティ設計で頻出の代表例は次のとおりです。

このほか、指定サービスに CMEK の利用を強制したり、鍵を置くプロジェクトを限定したりする CMEK 関連の制約群もあります。組織ポリシーは組織リソースが前提のため、学習用の個人プロジェクトでは適用の練習はできませんが、試験では「全プロジェクトに強制したい」というフレーズが出たら組織ポリシーを疑ってください。

VPC Service Controls — データ持ち出しを境界で防ぐ

IAM が正しくても防げない攻撃があります。盗まれた認証情報による組織外からのアクセス、内部者による gcloud storage cp での組織外バケットへのコピー、そして IAM の設定ミスです。VPC Service Controls(VPC SC)は、プロジェクトと Google 管理サービス(BigQuery、Cloud Storage など)の集合をサービス境界(service perimeter)で囲み、境界内の通信は自由にしたまま、境界をまたぐサービスアクセスを既定でブロックします。公式ドキュメントの整理では、IAM は「ID ベースのきめ細かいアクセス制御」、VPC SC は「コンテキストベースの境界セキュリティ(egress 制御を含む)」と役割が異なります。

サービス境界(perimeter) プロジェクト A VM・Cloud Run など プロジェクト B 分析チームの環境 保護対象のサービス BigQuery / Cloud Storage の API 境界内のリソースだけが到達できる 境界内は相互にアクセス可 盗まれた認証情報 IAM 認証は通ってしまう 組織外の端末から ✕ 拒否 組織外のバケット データの持ち出し先 ✕ 遮断 egress は既定で不可 例外は ingress / egress ルールで明示的に許可
図 13-3 サービス境界によるデータ流出(exfiltration)対策。有効な認証情報を持つ外部アクセスも、内部から組織外への持ち出しも「境界」で止まる。IAM ではどちらも防げない。

設計時に知っておくべき部品は 4 つです。① 境界外から特定条件のアクセスを許す ingress ルールと、境界内から外への持ち出しを許す egress ルール(境界同士をつなぐペリメータブリッジもありますが、現在は ingress / egress ルールが推奨)。② 許可条件を IP 範囲やデバイス属性で表現する Access Context Manager のアクセスレベル。③ 本適用の前に「ブロックせず記録だけする」ドライラン モード。既存システムに境界を後付けするときの必須手順です。④ ネットワーク側の合わせ技として、第 3 章で触れた restricted.googleapis.com(199.36.153.4/30)に DNS を向け、保護対象 API への経路をインターネット非経由に限定する構成。なお VPC SC はメタデータの移動までは完全に守れないため、メタデータの保護は IAM で行う、と公式ドキュメントも明記しています。

試験の視点: 「認証情報が漏れても BigQuery のデータを組織外に持ち出させたくない」ときの正解は VPC Service Controls です。IAM の強化・CMEK・Cloud Armor はこの要件には効きません(それぞれ守る層が違う)。逆に「特定ユーザーだけにテーブルを見せたい」なら IAM です。設問が守りたいのは誰の操作かデータの行き先かを見分けるのがコツです。

ゼロトラスト — IAP・Cloud Armor・Security Command Center

IAP — ネットワークの内側ではなく、人を検証する

「社内ネットワークにいるなら信用する」という境界型モデルを捨て、すべてのアクセスをユーザーの ID とコンテキストで毎回検証するのがゼロトラスト(Google の実装思想としては BeyondCorp)です。その中心となるプロダクトが IAP(Identity-Aware Proxy)で、HTTPS アプリケーションの前段に集中認可レイヤーを挟み、ネットワークレベルのファイアウォールではなくアプリケーションレベルのアクセス制御を実現します。

HTTPS リソースの保護では、App Engine・Cloud Run のほか、第 5 章のアプリケーション ロードバランサと組み合わせて Compute Engine / GKE のバックエンドを守れます。ユーザーは Google アカウント等でサインインし、IAP が IAM ロール(IAP-secured Web App User)を確認してから初めてアプリに到達します。注意点として、VM の配信ポートに直接届く経路が残っていると IAP を素通りできてしまうため、バックエンドへの直接アクセスをファイアウォールで塞ぎ、アプリ側でも署名付きヘッダーを検証するのが公式の推奨です。

もうひとつの顔が TCP 転送です。SSH / RDP などの TCP トラフィックを暗号化された HTTPS トンネルでラップし、外部 IP を持たない VM へ踏み台(bastion)サーバーなしで届けます。必要なのは、IAP の送信元レンジ 35.235.240.0/20 からの内向き通信を許可するファイアウォールルールと、利用者への roles/iap.tunnelResourceAccessor の付与だけです。接続は VM の nic0 の内部 IP に転送され、アイドル 1 時間で自動切断されます(大容量データ転送用の経路ではありません)。

管理者の端末 gcloud compute ssh --tunnel-through-iap IAP ① ユーザー認証 ② IAM ロール確認 VPC ネットワーク FW: tcp:22 を許可 src 35.235.240.0/20 VM(外部 IP なし) 内部 IP の :22 で待受 踏み台 VM は不要 HTTPS トンネル SSH を転送 roles/iap.tunnelResourceAccessor が必要 トンネルは HTTPS でラップされ、IAP の送信元レンジ 35.235.240.0/20 だけを FW で許可する
図 13-4 IAP TCP 転送による踏み台レス SSH。VM は外部 IP を持たず、ファイアウォールも IAP の送信元レンジしか開けないため、インターネットからの直接攻撃面が消える。

Cloud Armor — エッジで受け止める WAF と DDoS 防御

Google Cloud Armor は、DDoS 攻撃と、SQL インジェクション(SQLi)・クロスサイトスクリプティング(XSS)のようなアプリケーション攻撃から守るマネージドサービスです。L3 / L4 のボリューム型 DDoS 防御は、グローバル外部アプリケーション ロードバランサなどではティアに関係なく自動で常時有効になります。L7 ではセキュリティポリシーをバックエンドに適用し、OWASP Core Rule Set に基づく事前構成 WAF ルール(SQLi / XSS など)、IP やリクエスト属性によるカスタムルール、レート制限を組み合わせます。上位版の Cloud Armor Enterprise では、機械学習でトラフィックを分析して L7 DDoS を検出し防御ルールを提案する Adaptive Protection や、Google の脅威インテリジェンスに基づく制御が使えます。適用対象は外部アプリケーション LB のほか、リージョン内部アプリケーション LB、プロキシ / パススルー型のネットワーク LB にも広がっています(2026-08 時点)。

Security Command Center — 多層防御を監視する

ここまでの防御を「作って終わり」にしないためのリスク管理基盤が Security Command Center(SCC)です。公開バケットや過剰権限のような構成ミスを検出する Security Health Analytics、ログから不審な挙動(クリプトマイニング等)を見つける Event Threat Detection、Web アプリの脆弱性を診断する Web Security Scanner などの検出サービスが見つけた問題を、finding(検出結果)として一元的に集約します。Cloud Armor など他サービスからの findings も集まります。組織レベルとプロジェクトレベルの有効化があり、フル機能は組織レベルが前提です。ティアは Standard / Premium / Enterprise の 3 段階ですが、Enterprise ティアは 2027-05-21 に終了して Premium へ移行すると告知されています(2026-08 時点)。

インターネット リクエスト 組織ポリシー — 全リソースに継承されるガードレール Cloud Armor DDoS / WAF 外部 ALB L7 の入口 IAP 認証・認可 WAF 検査 認可へ VPC Service Controls のサービス境界 アプリケーション層 Cloud Run / GKE / VM サービスアカウントで動作 データ層 CMEK で暗号化した保存データ Secret Manager の認証情報 認可済みリクエストだけが到達 参照 Security Command Center 構成ミス・脅威を findings として検出 全体を監視
図 13-5 この章の道具を貫通順に並べた多層防御マップ。1 つの層が破られても次の層が止める構成にし、SCC がすべての層の構成ミスと脅威を監視する。

ハンズオン

前提は第 1 章の学習用プロジェクトと Cloud Shell です(ローカルの gcloud でも実行できます)。PROJECT_ID は自分のプロジェクト ID に読み替えてください(gcloud config get-value project で確認できます)。

ハンズオン 13-1|Cloud KMS の鍵で CMEK バケットを作る

自動ローテーション付きの鍵を作り、Cloud Storage バケットの既定鍵に設定します。所要 15 分。費用: ソフトウェア鍵はアクティブな鍵バージョンあたり月 $0.06(2026-08 時点)の日割りで、終了後にバージョンを破棄すれば 1 円未満です。

  1. Cloud KMS API を有効化し、キーリングと鍵を作ります。キーリング・鍵は削除できない資源なので、命名は慎重に(消せるのは鍵バージョンだけです)
gcloud services enable cloudkms.googleapis.com

gcloud kms keyrings create handson-kr --location=asia-northeast1

gcloud kms keys create handson-key \
  --keyring=handson-kr --location=asia-northeast1 \
  --purpose=encryption \
  --rotation-period=90d --next-rotation-time=2026-11-15T00:00:00
  1. Cloud Storage のサービスエージェントに鍵の利用権限(cryptoKeyEncrypterDecrypter)を与えます。専用コマンドがサービスエージェントの作成と権限付与をまとめて行います
gcloud storage service-agent --project=PROJECT_ID \
  --authorize-cmek=projects/PROJECT_ID/locations/asia-northeast1/keyRings/handson-kr/cryptoKeys/handson-key
  1. この鍵を既定鍵とするバケットを作り、オブジェクトを置いて設定を確認します(バケット名は全世界で一意にする必要があります)
gcloud storage buckets create gs://PROJECT_ID-cmek-handson \
  --location=asia-northeast1 \
  --default-encryption-key=projects/PROJECT_ID/locations/asia-northeast1/keyRings/handson-kr/cryptoKeys/handson-key

echo "sensitive data" > sample.txt
gcloud storage cp sample.txt gs://PROJECT_ID-cmek-handson/

gcloud storage buckets describe gs://PROJECT_ID-cmek-handson \
  --format="default(default_kms_key)"

最後のコマンドで default_kms_key に handson-key のリソース名が表示されれば、以後このバケットに書かれるオブジェクトはあなたの鍵で暗号化されます。

後片付け: バケットを消し、鍵バージョンを破棄します。破棄は既定で 30 日間の猶予付きで、期間内なら復元できます。破棄後のバージョンは課金されません。

gcloud storage rm --recursive gs://PROJECT_ID-cmek-handson

gcloud kms keys versions destroy 1 \
  --key=handson-key --keyring=handson-kr --location=asia-northeast1
ハンズオン 13-2|Secret Manager でシークレットを一元管理する

シークレットの作成・参照・ローテーション・権限付与を一巡します。所要 10 分。費用: アクティブなバージョン 6 個・アクセス 10,000 回/月までの無料枠内(2026-08 時点)で収まります。

  1. API を有効化し、シークレットを初期値付きで作成します。--data-file=- は標準入力から値を読む書き方です(echo 経由はシェル履歴に値が残るため学習用と割り切り、本番ではファイルや CI の秘匿変数を使ってください)
gcloud services enable secretmanager.googleapis.com

echo -n "db-pass-v1" | gcloud secrets create db-password \
  --replication-policy=automatic --data-file=-
  1. 値を読み出します。latest は学習では便利ですが、本番コードではバージョン番号の固定が公式推奨です
gcloud secrets versions access latest --secret=db-password
  1. パスワード変更を想定して新バージョンを追加し、バージョン指定で読み出します
echo -n "db-pass-v2" | gcloud secrets versions add db-password --data-file=-

gcloud secrets versions access 2 --secret=db-password
  1. アプリに読ませる場合は、実行サービスアカウントへ secretAccessor だけをシークレット単位で付与します(SA_EMAIL は第 2 章で作ったサービスアカウント等に読み替え。手元にない場合はこの手順は読むだけで構いません)
gcloud secrets add-iam-policy-binding db-password \
  --member="serviceAccount:SA_EMAIL" \
  --role="roles/secretmanager.secretAccessor"

後片付け: シークレットを全バージョンごと削除します(元に戻せません)。

gcloud secrets delete db-password --quiet
ハンズオン 13-3|IAP TCP 転送で外部 IP なしの VM に SSH する

外部 IP を持たない VM を作り、踏み台なしで SSH します。所要 15 分。費用: e2-micro 1 台を 30 分程度 — 数円です。

  1. 外部 IP なしの VM を作ります(--no-address)。default ネットワークを削除している場合は --network / --subnet で自分の VPC を指定してください
gcloud compute instances create iap-vm \
  --zone=asia-northeast1-b --machine-type=e2-micro --no-address
  1. IAP の送信元レンジ 35.235.240.0/20 から tcp:22 への内向き通信を許可するファイアウォールルールを作ります。インターネット全体(0.0.0.0/0)に開ける必要はもうありません
gcloud compute firewall-rules create allow-ssh-ingress-from-iap \
  --direction=INGRESS --action=allow --rules=tcp:22 \
  --source-ranges=35.235.240.0/20 --network=default
  1. プロジェクトのオーナーである自分はそのまま接続できます。チームメンバーに許可する場合は roles/iap.tunnelResourceAccessor をプロジェクトまたは VM 単位で付与します(読むだけで OK)
  2. IAP トンネル経由で SSH します
gcloud compute ssh iap-vm --zone=asia-northeast1-b --tunnel-through-iap

プロンプトが VM のものに変われば成功です。hostname で iap-vm と表示されることを確認し、exit で抜けます。この VM は外部 IP を持たないため、インターネット側から直接この VM に到達する経路はありません(外向きの通信も、第 3 章の Cloud NAT を用意しない限りインターネットへは出られません)。

後片付け:

gcloud compute instances delete iap-vm --zone=asia-northeast1-b --quiet

gcloud compute firewall-rules delete allow-ssh-ingress-from-iap --quiet

つまずきポイント

CMEK の鍵を破棄してデータが読めなくなる: 鍵バージョンを破棄すると、そのバージョンで暗号化されたデータは永久に復号できません。バケットやテーブルは残るのに中身だけ読めない、という壊れ方をします。破棄には既定 30 日の猶予(--destroy-scheduled-duration で変更でき、指定できるのは鍵の作成時のみ)があり期間内は復元できますが、期限を過ぎると不可逆です。無効化したまま長期間放置した場合も、一部サービスでは恒久的なデータ損失になり得ると公式に明記されています。破棄の前に必ず無効化 → 監査ログでの利用確認を挟んでください。
自動ローテーションで鍵バージョンの課金が積み上がる: KMS の課金はアクティブな鍵バージョン単位です。自動ローテーションのたびにバージョンが増え、古いバージョンも古いデータの復号のために生き続けるので、料金は単調に増えます。かといって古いバージョンを破棄すれば、それで暗号化されたままのデータを道連れにします。HSM(月 $1.00〜2.50/バージョン)や EKM(月 $3.00/バージョン)ではこの積み上がりが桁違いに効くため、ローテーション周期は保護レベルの単価とセットで設計してください(2026-08 時点)。
IAP の SSH がつながらない: まず疑うのはファイアウォールです。35.235.240.0/20 からの tcp:22 を許可するルールが対象ネットワークにあるか、VM に届くターゲット指定(タグ / サービスアカウント)になっているかを確認します。次が権限で、接続者に roles/iap.tunnelResourceAccessor が必要です。また、トンネルはアイドル 1 時間で切断される仕様なので、放置したセッションが切れるのは異常ではありません。
ドメイン制限共有で公開設定や連携が壊れる: iam.allowedPolicyMemberDomains を有効にすると allUsers / allAuthenticatedUsers への付与もブロックされるため、静的サイトの公開バケットや誰でも呼べる Cloud Run が作れなくなります。さらにサービスエージェントへの自動ロール付与を妨げて、BigQuery のログシンクのような機能が静かに壊れることもあります。全面適用の前にドライランで影響を観測し、公開が必要なプロジェクトには条件付きの例外を設計してください。

理解度チェック

Q1. Google 既定の暗号化だけでも全データは AES-256 で暗号化される。それでも CMEK を選ぶ理由は?

暗号化の強度ではなく鍵の統制が目的です。CMEK では鍵の作成・ローテーション・無効化・破棄・保管場所を顧客が管理し、鍵利用が監査ログに残ります。鍵を無効化すればデータアクセスを一括遮断でき、規制対応で「鍵のライフサイクル管理」を証明できます。既定の暗号化ではこれらは Google 任せで、顧客からは見えません。

Q2. Cloud KMS の対称鍵が自動ローテーションされたとき、旧バージョンで暗号化済みのデータはどうなる?

何も起きません。既存データは再暗号化されず、旧バージョンがその復号のために有効なまま残ります。新バージョンはプライマリとして以後の暗号化に使われるだけです。だからこそ旧バージョンを安易に破棄してはならず、アクティブなバージョン数に応じて課金が増えていきます。

Q3. Cloud KMS と Secret Manager はどう使い分ける?

KMS は暗号鍵の管理サービスで、鍵素材は外に取り出せず、暗号化・復号・署名といった処理を依頼する使い方をします。Secret Manager は API キーやパスワードのような秘匿値そのものを保存し、権限のある呼び出しに値を返します。「値を取り出して使う」なら Secret Manager、「データを暗号化する鍵を統制する」なら KMS です。

Q4.(試験形式)金融企業が BigQuery 上の顧客データについて、従業員の認証情報が盗まれた場合でも組織外への持ち出しを防ぎたい。最も適切な対策は?
A. カスタムロールで権限を最小化する B. VPC Service Controls のサービス境界で囲む C. CMEK で暗号化する D. Cloud Armor のセキュリティポリシーを適用する

B。盗まれた認証情報は IAM 上「正規のアクセス」なので、A の権限最小化では正規権限の範囲の持ち出しを防げません。C は保存データの鍵統制であり、認証済みアクセスには透過的に復号されます。D はロードバランサ配下の Web アプリを L7 攻撃から守る道具で、API 経由のデータ持ち出しとは層が違います。サービス境界は認証情報が有効でも、境界外からのアクセスと境界外へのデータ移動をブロックします。

Q5.(試験形式)外部 IP を持たない VM 群への管理 SSH アクセスを、踏み台サーバーを運用せずに Google アカウントと IAM で制御したい。最も適切な構成は?
A. 作業時だけ外部 IP を一時付与する B. 踏み台 VM を 1 台だけ公開して経由させる C. IAP TCP 転送 + 35.235.240.0/20 からの tcp:22 許可ルール D. Cloud NAT を構成して SSH を通す

C。IAP TCP 転送なら VM は外部 IP なしのまま、接続ごとにユーザー認証と iap.tunnelResourceAccessor の認可が行われます。A は攻撃面を都度作る運用でアンチパターン、B は「踏み台なし」の要件に反する上に踏み台自体が攻撃対象になります。D の Cloud NAT は内→外のアウトバウンド専用で、外からの SSH は通せません。

まとめと次章へ

参考リンク(公式ドキュメント):

次の第 14 章は、この章の道具を「規制要件への翻訳」に接続します。HIPAA・PCI DSS・GDPR といったコンプライアンス要件をアーキテクチャに落とし込み、Sensitive Data Protection による PII 検出や Cloud Audit Logs による証跡設計を扱います。本章の CMEK・VPC Service Controls はそこでも主役です。