Cloud Identity・サービスアカウント・認証・認可(IAM)・リソース階層の 上流設計。出題比重 25% の最重要セクション。
概念とサービスの役割を理解することがゴール。設計判断は「🔧 応用」タブで扱います。
Cloud Identity は Google の IDaaS。ユーザー / グループ / デバイス管理を提供。GCP の組織はドメインに紐付いて自動作成される。
外部 IdP の 人間ユーザー を Cloud Identity アカウントなしで GCP に連携。取引先・委託メンバー・監査人向け。
GCP の 非人間用 ID。`
GCE / Cloud Run 作成時に自動付与。既定で Editor ロール を持つ過大権限の危険源。本番では専用 SA に置き換える。
鍵漏洩リスク大。組織ポリシー iam.disableServiceAccountKeyCreation で 鍵作成自体を禁止 可能。
外部ワークロード(AWS / Azure / GitHub Actions / K8s)から SA 鍵なし で GCP API を呼ぶ。
roles/iam.serviceAccountTokenCreator = SA トークン発行(impersonate に必須)roles/iam.serviceAccountUser = SA をリソースに割り当てる権限パスワード強度・履歴・有効期限、セッション再認証間隔を Cloud Identity / Workspace 管理コンソールで設定。
| 方式 | 強度 | コメント |
|---|---|---|
| SMS / 音声 | 低 | SIM スワップに弱い。非推奨 |
| Authenticator (TOTP) | 中 | 一般的 |
| Google プロンプト | 中 | スマホへのプッシュ |
| セキュリティキー (FIDO) | 高 | フィッシング耐性、特権必須 |
CEL 式での条件付き付与。時間・リソース・Access Level を条件に。
expression: 'request.time.getHours("Asia/Tokyo") >= 9
&& request.time.getHours("Asia/Tokyo") <= 18
&& resource.name.startsWith("projects/_/buckets/secure")'
Allow より強い「絶対禁止」を表現。組織レベルで「全社員に対し X を禁止」のような広域防御に使う。
Access Level(IP / デバイス / 時間など)の定義。IAM Condition や VPC SC で参照。
| ツール | 役割 |
|---|---|
| IAM Recommender | 余剰権限の特定(90 日基準) |
| Policy Troubleshooter | 「なぜ deny/allow か」の診断 |
| Policy Analyzer | 「誰が何にアクセスできるか」の網羅検索 |
特権を一時的に昇格(JIT アクセス)。申請 → 承認 → 自動付与 → 期限で自動剥奪。特権の常時保有を排除。
| 制約 | 目的 |
|---|---|
gcp.resourceLocations | 特定リージョンのみ許可 |
iam.disableServiceAccountKeyCreation | SA 鍵作成禁止 |
iam.allowedPolicyMemberDomains | 自社ドメイン以外への IAM 付与禁止 |
compute.vmExternalIpAccess | 外部 IP 禁止 |
compute.requireOsLogin | OS Login 強制 |
設計判断・トレードオフ・試験のひっかけに焦点。
| ワークロード | 推奨される認証方式 |
|---|---|
| GCE VM | アタッチド SA(メタデータサーバ) |
| GKE Pod | Workload Identity for GKE |
| Cloud Run / Functions | アタッチド SA(実行時 ID) |
| GitHub Actions / GitLab CI | Workload Identity Federation(OIDC) |
| AWS / Azure 上のワークロード | Workload Identity Federation(外部 IdP) |
| パターン | 条件式 |
|---|---|
| 特定バケットのみ | resource.name == "projects/_/buckets/finance" |
| 日本国内 IP のみ | request.auth.claims.access_levels.contains("japan_only") |
| 業務時間内のみ | request.time.getHours("Asia/Tokyo") >= 9 && <= 18 |
| 期限付き付与 | request.time < timestamp("2026-12-31T23:59:59Z") |
| 特定タグの付いたリソースのみ | resource.matchTag("env", "prod") |
Deny が 1 つでもヒットしたらアクセス拒否。Allow は加算式。
| 状況 | 使うツール |
|---|---|
| 90 日アクセスのない権限を棚卸し | IAM Recommender |
| 「なぜ Bob は X バケットにアクセスできない?」 | Policy Troubleshooter |
| 「誰が `pubsub.publish` を持っているか組織全体で知りたい」 | Policy Analyzer |
setIamPolicy / deleteRole を組織レベル Deny ポリシー試験直前の総ざらい。
| 種別 | 用途 |
|---|---|
| Cloud Identity ユーザー | 自社の人間 |
| Workforce Identity Federation | 取引先・委託の人間。外部 IdP 経由 |
| サービスアカウント | マシン。GCP 内のサービス用 |
| Workload Identity Federation | マシン。外部ワークロードから GCP API |
| ロール | 何ができるか |
|---|---|
serviceAccountUser | SA をリソースに 割り当てる |
serviceAccountTokenCreator | SA の トークン発行(impersonate) |
serviceAccountKeyAdmin | SA 鍵管理(誰にも与えない方針) |
workloadIdentityUser | Workload Identity でこの SA を借用 |
roles/iam.serviceAccountTokenCreator(User ではない)。iam.allowedPolicyMemberDomains。serviceAccountUser ≠ serviceAccountTokenCreator。impersonate には Token Creator