PCSE 合格対策
S1 アクセスの構成 🎯 Deep Dive 出題 ~25%

Identity & Access Management
公式ドキュメント深掘り

Cloud Identity・サービスアカウント・Workload/Workforce Identity Federation・IAM Allow/Deny・Conditions・Access Context Manager・PAM・組織ポリシーを、公式ベースの技術詳細と本番運用のリスク・落とし穴まで踏み込んで解説します。

このページの目次

  1. 1. Identity の 4 系統
  2. 2. Cloud Identity / GCDS / SSO
  3. 3. サービスアカウント詳細
  4. 4. Workload Identity Federation
  5. 5. Workforce Identity Federation
  6. 6. Impersonation の仕組み
  7. 7. Allow ポリシー & 評価
  8. 8. Deny ポリシー
  9. 9. IAM Conditions (CEL)
  10. 10. Access Context Manager
  11. 11. Policy Intelligence 3 兄弟
  12. 12. Privileged Access Manager
  13. 13. リソース階層と継承
  14. 14. 組織ポリシー詳細
  15. 15. リスク・落とし穴総まとめ
  16. 16. 設計チェックリスト

1. Identity の 4 系統

GCP の Identity は 「誰が・どこから」 で 4 系統に整理されます。試験では 4 系統を即時に使い分けられる必要があります。

対象は誰か × どこから来るか 人間 (Human) マシン (Machine) 内部 外部 / 連携 Cloud Identity ユーザー 社内の人間。GCP Console / gcloud Workforce Identity Federation 取引先・委託の人間(外部 IdP 経由・ライセンス不要) サービスアカウント GCP 内ワークロード(VM / Pod / Run) Workload Identity Federation AWS / Azure / GitHub Actions / OIDC ワークロード 原則: SA 鍵を発行しない → 4 系統で完結させる
図 1: Identity を「人間 vs マシン × 内部 vs 外部」で分割したマトリクス。SA 鍵に頼らない設計の出発点。
✅ ベストプラクティス

2. Cloud Identity / GCDS / SSO

人間ユーザーをどう調達するかの基盤レイヤ。試験では GCDS = 同期SSO = 認証委譲 の役割分離を問う設問が頻出。

Cloud Identity 無料版 / 有料版あり
Google が提供する IDaaS。Workspace を契約しない組織でも GCP の人間ユーザー / グループ / デバイスを管理できる。GCP の Organization はドメインに紐付いて自動生成される。Free 版でも SSO / MFA 必須化 / グループ管理は可能。
Google Cloud Directory Sync (GCDS) 一方向同期
オンプレ AD / LDAP のユーザー・グループを Cloud Identity に 一方向で 同期するエージェント。GCDS は同期のみ、認証は別途 SSO で IdP に委譲する。Cron 起動の Windows/Linux サービスとして動作し、LDIF 差分計算で変更分だけを反映。
SSO (SAML 2.0) 認証委譲
Google を SP(Service Provider)、外部 IdP(AD FS / Okta / Ping / Azure AD)を IdP として認証フローを委譲。Cloud Identity 側でも MFA の追加要件を強制できる(IdP の MFA に加えて)。
SAML 2.0 SSO(SP-initiated)の流れ ユーザー ブラウザ Google (SP) accounts.google.com 外部 IdP AD FS / Okta / 他 ① ログイン要求 ② AuthnRequest ③ SAML Response (アサーション) ④ セッション Cookie ユーザーの認証は IdP が担当 / Google は委譲されたアサーションを検証 ⚠️ アサーションの signing certificate を IdP が定期的にローテーションする想定で運用 ⚠️ Super Admin は通常 SSO の影響範囲外(緊急時のロックアウト防止)に設計
図 2: SAML 2.0 SP-initiated フロー。Super Admin は SSO 適用範囲外にする運用が公式推奨。
⚠️ リスク:SSO 設定ミスでロックアウト

Super Admin の運用ガイドライン(公式推奨)

3. サービスアカウント詳細

マシン用 ID。試験で最頻出のテーマであり、「鍵を発行しない」 設計を判断できるかが核。

SA の3つの利用形態

  1. Attached SA:GCE / Cloud Run / Functions / GKE Pod に紐づける(既定推奨)
  2. Impersonated SA:別のプリンシパルが SA トークンを発行して借りる
  3. Federated SA:Workload/Workforce Identity Federation で外部から借りる

これ以外の SA 鍵による直接認証 は使わない方針が公式推奨。

SA メールアドレスの種類

  • ユーザー作成 SA: NAME@PROJECT.iam.gserviceaccount.com
  • Compute 既定 SA: PROJECT_NUMBER-compute@developer.gserviceaccount.com
  • App Engine 既定 SA: PROJECT_ID@appspot.gserviceaccount.com
  • Google マネージド SA: service-PROJECT_NUMBER@SERVICE.iam.gserviceaccount.com(Cloud KMS / Cloud Build 等が暗黙的に使う)

既定 SA の罠

⚠️ 既定 SA は強すぎる
gcloud 既定 SA の自動 IAM 付与を組織で無効化
gcloud resource-manager org-policies enable-enforce \
    iam.automaticIamGrantsForDefaultServiceAccounts \
    --organization=ORG_ID

SA 鍵に対する組織レベルの規律

gcloud SA 鍵作成を組織レベルで Deny
gcloud resource-manager org-policies enable-enforce \
    iam.disableServiceAccountKeyCreation \
    --organization=ORG_ID

# 例外プロジェクトを許可(フォルダ単位での上書き)
gcloud resource-manager org-policies set-policy /tmp/exception.yaml \
    --folder=EXCEPTION_FOLDER_ID
✅ SA 鍵をどうしても使う場合の規律

4. Workload Identity Federation 詳細

外部マシンが SA 鍵なし で GCP API を呼ぶ仕組み。OIDC / SAML 2.0 / AWS Signature の 3 形式に対応。

Workload Identity Federation の信頼チェーン 外部 IdP GitHub Actions / AWS / Azure OIDC・SAML・AWS Sig Workload Identity Pool 条件 (CEL) で許可するクレームを定義 例: attribute.repository == "org/repo" Pool Provider Attribute Mapping サービスアカウント 最小権限 IAM ロール workloadIdentityUser 付与 GCP API BigQuery / Storage ① OIDC ② STS ③ Bearer 鍵なし。外部 IdP のクレームが許可条件を満たせば、SA を 1 時間借りる短期トークンが発行される。 クレームには `sub` / `aud` / `repository` 等を使い、CEL で「組織 / リポジトリ / ブランチ」を絞り込むのが鉄則。
図 3: Workload Identity Federation の信頼チェーン。Pool / Provider / Attribute Mapping / Workload Identity User の 4 要素を理解する。

GitHub Actions 連携の典型手順

  1. Pool 作成 gcloud iam workload-identity-pools create で組織別の Workload Identity Pool を作成。
    --display-name--description に運用情報を残す。
  2. Provider 追加(OIDC) GitHub の OIDC issuer (https://token.actions.githubusercontent.com) を Provider として登録。必ず attribute-condition で repository などを絞る こと(無条件で許可しない)。
  3. SA 作成 + 最小権限 操作対象に応じた事前定義ロールを付与。Owner / Editor は厳禁。
  4. workloadIdentityUser バインド roles/iam.workloadIdentityUser を「特定 principal セット」に限定して付与。
    • 例: principalSet://iam.googleapis.com/.../subject/repo:OWNER/REPO:ref:refs/heads/main
  5. GitHub Actions YAML google-github-actions/auth@v2 で Pool / Provider / SA を指定。出力で access_token が短期発行される。
  6. 監査 sts.googleapis.com の Audit Log(Admin Activity)を必ず Sink に流す。
gcloud Pool / Provider / Binding 作成例
# 1. Pool 作成
gcloud iam workload-identity-pools create github-pool \
    --location=global \
    --display-name="GitHub Actions pool"

# 2. Provider (OIDC) 追加(attribute-condition で repo を絞る)
gcloud iam workload-identity-pools providers create-oidc github-provider \
    --workload-identity-pool=github-pool --location=global \
    --issuer-uri="https://token.actions.githubusercontent.com" \
    --attribute-mapping="google.subject=assertion.sub,attribute.repository=assertion.repository,attribute.ref=assertion.ref" \
    --attribute-condition="attribute.repository == 'my-org/my-repo'"

# 3. SA に workloadIdentityUser を main ブランチのみで許可
gcloud iam service-accounts add-iam-policy-binding \
    deploy-sa@PROJECT.iam.gserviceaccount.com \
    --role="roles/iam.workloadIdentityUser" \
    --member="principalSet://iam.googleapis.com/projects/NUM/locations/global/workloadIdentityPools/github-pool/attribute.repository/my-org/my-repo"
⚠️ Workload Identity Federation の落とし穴

5. Workforce Identity Federation

外部 IdP の 人間ユーザー を Cloud Identity アカウントを作らずに GCP に連携。Workload と混同しないこと。

Workforce Identity Federation

  • 対象:人間ユーザー
  • 入口:GCP Console / gcloud / API
  • 連携 IdP:OIDC / SAML 2.0 / Azure AD / Okta / Ping
  • 用途:取引先・委託・監査・M&A 時のアクセス付与
  • 付与方式:principalSet://... の人間プリンシパル
  • セッション:Cookie ベース、IdP 側ロックアウトが効く

Workload Identity Federation

  • 対象:マシン / ワークロード
  • 入口:GCP API のみ(短期トークン)
  • 連携 IdP:OIDC / SAML / AWS Sig
  • 用途:CI/CD・他クラウド・オンプレ K8s
  • 付与方式:principalSet://... のワークロードクレーム
  • セッション:1 時間有効な access_token を都度発行

Workforce Identity Federation の典型ユースケース

6. Impersonation の仕組み

ユーザーが SA として短期的に行動 する仕組み。試験で serviceAccountUser vs serviceAccountTokenCreator の使い分けは頻出。

ロール何ができるか典型シナリオ
roles/iam.serviceAccountUser SA を リソースに割り当てる(GCE VM / Cloud Run / Cloud Functions / GKE Pod の設定時) 運用者が VM 作成時に既定 SA 以外の SA を選ぶ
roles/iam.serviceAccountTokenCreator SA の access_token / id_token / signedBlob / signedJwt を発行(=impersonate) 開発者が一時的に本番 SA として gcloud / API 操作
roles/iam.serviceAccountKeyAdmin SA 鍵の作成・削除 原則として誰にも付与しないことが推奨
roles/iam.workloadIdentityUser Workload Identity Federation でこの SA を借用 WIF Pool の principalSet をこの SA に紐付ける
gcloud impersonation の実例
# Alice が prod-deploy@PROJECT.iam.gserviceaccount.com として gcloud を実行
gcloud compute instances list \
    --impersonate-service-account=prod-deploy@PROJECT.iam.gserviceaccount.com

# 監査ログには両方の identity が記録される:
#  authenticationInfo.principalEmail        = alice@example.com
#  authenticationInfo.serviceAccountDelegationInfo = prod-deploy@...
✅ Impersonation のベストプラクティス

7. Allow ポリシー & 評価

IAM ポリシーは 「Deny → Allow」 の順で評価され、Allow は 加算式(どこかで許可されていれば通る)。

IAM の評価順(リクエスト到着時) ① 組織〜リソースまでの Deny ポリシーを全レベルでチェック ↓ どこかで Deny がヒットすれば即拒否 ② 組織〜リソースまでの Allow ポリシーを加算 (union) ↓ Conditions も評価(true なら有効、false なら無視) ③ 要求された permission を含む binding が 1 つでもあれば許可 原則:「下位リソースで上位の Allow を取り消すことはできない」 広域の禁止は Deny ポリシー で表現する Conditions は Allow の binding に付与する(Deny にも別途付けられる)
図 4: IAM 評価順。Deny → Allow の 2 段階で、Deny がヒットすれば即拒否、Allow は加算式。
⚠️ Allow ポリシーで「取り消せない」罠

8. Deny ポリシー

Allow より 強制力が高い ポリシー。広域禁止・特権昇格防止・規制対応に必須。公式 Deny 概要

Deny ポリシーの構造

yaml Deny ポリシー例:監査ログ用 SA の権限を絶対に変更させない
denyRules:
- description: "Protect security-audit SA from privilege changes"
  deniedPrincipals:
  - "principalSet://goog/public:all"
  exceptionPrincipals:
  - "principalSet://iam.googleapis.com/.../break-glass-group"
  deniedPermissions:
  - "iam.googleapis.com/serviceAccounts.setIamPolicy"
  - "iam.googleapis.com/roles.delete"
  - "iam.googleapis.com/serviceAccounts.delete"
  denialCondition:
    expression: "resource.matchTag('123/audit-protected', 'true')"
    title: "Only protected SAs"

典型 Deny パターン

広域禁止

  • Cloud Storage の buckets.delete を組織全員に Deny
  • 監査ログ SA の setIamPolicy を Deny
  • 本番タグの付いた組織ポリシーの変更を Deny

特権昇格防止

  • iam.serviceAccounts.actAs を限定グループ以外には Deny
  • iam.roles.create / update をエンジニアグループに Deny し、Platform チームのみ許可
✅ Deny の活用指針

9. IAM Conditions(CEL)

CEL(Common Expression Language)で条件付き付与を表現。resource.type / request.time / request.auth / resource.matchTag() が中核。公式 Conditions 概要

使える属性カテゴリ

属性用途
resource.nameresource.name.startsWith("projects/_/buckets/finance")特定リソース限定
resource.typeresource.type == "storage.googleapis.com/Bucket"リソース種別フィルタ
resource.matchTag()resource.matchTag("123/env", "prod")タグベース制御
request.timerequest.time < timestamp("2026-12-31T23:59:59Z")期間限定付与
request.auth.claims'group_admin' in request.auth.claims.groups外部クレーム参照
request.auth.access_levels"accessPolicies/POLICY/accessLevels/japan_only" in request.auth.access_levelsAccess Context Manager との連携

Conditions 対応サービスの罠

⚠️ Conditions が効くサービスは限定的

典型 CEL パターン集

CEL よく使う条件式
# 業務時間内のみ(JST 09:00-18:00、月-金)
request.time.getHours("Asia/Tokyo") >= 9
&& request.time.getHours("Asia/Tokyo") <= 18
&& request.time.getDayOfWeek("Asia/Tokyo") >= 1
&& request.time.getDayOfWeek("Asia/Tokyo") <= 5

# 日本国内 + 企業端末のみ(Access Context Manager の Access Level を利用)
"accessPolicies/123/accessLevels/japan_corp_device" in request.auth.access_levels

# 期限付き付与(2026 年末まで)
request.time < timestamp("2026-12-31T23:59:59Z")

# prod タグの付いたリソース以外に対して
!resource.matchTag("123/env", "prod")

# 特定バケットの prefix のみ
resource.name.startsWith("projects/_/buckets/team-foo-")

10. Access Context Manager

誰が・どこから・どんな端末で」を束ねた Access Level を定義し、IAM Conditions / VPC SC から参照。BeyondCorp Enterprise の中核。公式 ACM ドキュメント

Basic Access Level

属性ベースの条件式(CEL ライク)。

  • device.encryption_status
  • device.os_type / os_version
  • device.is_corp_owned_device
  • origin.ip / origin.region_code
  • levels(他レベルとの AND/OR)

Custom Access Level (CEL)

CEL 式の自由記述。

device.encryption_status == "ENCRYPTED"
&& device.is_corp_owned_device
&& origin.region_code == "JP"
✅ ACM のベストプラクティス

11. Policy Intelligence 3 兄弟

IAM Recommender

過去 90 日 間に使われていない権限を検出し、より絞った推奨ロールを提示。

「過剰権限の自動棚卸し」用途。

Active Assist の一部。Cloud Asset Inventory と連動。

Policy Troubleshooter

X というプリンシパルが、Y というリソースに、Z という権限でアクセス可能か」を 解説付き で判定。

deny の原因を継承階層まで遡って表示。

Policy Analyzer

誰が・どのリソースに・どの権限を持っているか」の 網羅検索

Cloud Asset Inventory のクエリ機能で、組織横断の権限棚卸しに必須。

使い分けの判断軸

聞かれていること選ぶツール
「未使用権限を削減したい」IAM Recommender
「なぜ Bob は deny されたのか」Policy Troubleshooter
「組織内で pubsub.topics.publish を持つ全プリンシパル」Policy Analyzer
「外部メンバーへの付与の有無を可視化」Policy Analyzer + Recommender

12. Privileged Access Manager (PAM)

特権ロールを 常時保有させず、申請 → 承認 → 自動付与 → 期限自動剥奪する Just-In-Time アクセスの仕組み。公式 PAM 概要

PAM の Just-In-Time 昇格フロー 申請者 Entitlement に申請 Entitlement スコープ・期間・承認者を定義 承認者 単数 / 複数 / グループ Grant 期限付き IAM 付与 期限が来ると IAM Binding 自動削除 / Audit Log に完全な履歴 ⚠️ Owner 等の強力なロールは PAM 経由でのみ与え、常時保有させない ⚠️ Entitlement の承認者は申請者と異なる人にする(職務分掌)
図 5: PAM の Entitlement → Grant フロー。Audit Log には申請・承認・付与・剥奪のすべてが残る。

Entitlement 設計のポイント

13. リソース階層と継承

Organization → Folder → Project → Resource Organization (example.com) Folder: prod Folder: nonprod Folder: shared prod-app prod-data network-host logging IAM Allow / 組織ポリシー / Tag はすべて下位に継承(加算) Org Limit: 10,000 Folder / Project(プロジェクト数の物理上限あり) Folder ネスト:最大 10 階層
図 6: 階層モデル。継承は加算式で下位は強くなるのみ。広域禁止は Deny / 組織ポリシーで上から打つ。

14. 組織ポリシー詳細

事前定義された Constraint または Custom Constraint(CEL)を組織 / フォルダ / プロジェクトに適用する仕組み。IAM が「許可」、組織ポリシーは「禁止 / 制限」。公式 OPS 概要

頻出 Constraint と落とし穴

Constraint目的注意点
gcp.resourceLocationsリージョン / マルチリージョンの許可リスト新リージョン追加時は in:asia-locations 等の値グループの差分に注意
iam.disableServiceAccountKeyCreationSA 鍵作成禁止既存鍵には影響しない。鍵作成監視と組み合わせる
iam.allowedPolicyMemberDomains許可ドメイン以外への IAM 付与禁止allUsers / allAuthenticatedUsers も同時にブロックされる
compute.vmExternalIpAccess外部 IP 割り当て制限例外 VM はリスト or タグで明示。Cloud NAT 必須
compute.requireOsLoginOS Login 強制既存 SSH 鍵が無効化されるので段階展開
compute.requireShieldedVmShielded VM 強制非対応 OS イメージで作成失敗するので互換性確認
iam.automaticIamGrantsForDefaultServiceAccounts既定 SA への自動 Editor 付与を無効化新規プロジェクトのみ。既存プロジェクトの既定 SA は別途修正
gcp.restrictNonCmekServicesCMEK でないサービス利用を禁止サポートサービスのリスト指定が必要

Custom Organization Policy

yaml Cloud Storage バケットに `compliance` ラベルを必須化
name: "organizations/ORG_ID/customConstraints/custom.gcsRequiresComplianceLabel"
resourceTypes:
- storage.googleapis.com/Bucket
methodTypes:
- CREATE
- UPDATE
condition: "resource.labels.compliance != ''"
actionType: ALLOW
displayName: "GCS buckets must have compliance label"
description: "Buckets must declare a `compliance` label (pii / pci / public / internal)."
✅ 組織ポリシーの段階展開

15. リスク・落とし穴総まとめ

🚨 試験頻出のリスクトピック

16. 設計チェックリスト

📚 関連リソース