0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GCP と AWS で比較する IAM とポリシー継承の仕組み

前回の記事(リソース階層編)で、GCP の Organization → Folder → Project → リソース が AWS の Organization → OU → Account → リソース とほぼ1対1で対応することを整理した。

この記事ではその続きとして、「誰が・何を・できるか」を決める IAM と、「組織として何を禁止するか」を上位から継承させるガードレール(GCP: Organization Policy / AWS: SCP) を、GCP と AWS で比較する。


全体像

権限まわりは大きく2層に分けて考えると整理しやすい。

役割 GCP AWS
① 許可を与える 「このユーザーはこの操作ができる」 IAM ポリシー(allow) IAM ポリシー(allow / deny)
② 上限を絞る 「組織としてここから先は誰にも許さない」 Organization Policy(組織ポリシー) SCP(Service Control Policy)

ポイントは 「② はあくまで上限(ガードレール)であって、権限を 付与 はしない」 こと。これは GCP も AWS も共通の考え方。

実効権限 = 「IAM で許可された操作」∩「ガードレールが許す範囲」


① IAM:許可の与え方

継承の方向は共通

どちらも 上位に付けた許可は下位へ継承される

ここに 大きな思想の差 がある。

観点 GCP AWS
IAM を付与できる階層 Organization / Folder / Project / リソース の各階層 原則 Account 内(IAM はアカウント単位で閉じる)
上位からの継承 上位階層の付与が下位へ自動継承 アカウントをまたいだ継承は無い(クロスアカウントは信頼関係で都度許可)
横断的な権限管理 階層に IAM を付ければ複数 Project へ一括適用しやすい アカウントをまたぐ権限は IAM Role の AssumeRole(信頼ポリシー)で実現

まとめると:

  • GCP は「階層に権限を継承させる」モデル。Folder に Role を付ければ配下の全 Project に効く。
  • AWS は「アカウントは独立。またぐときは Role を引き受ける(AssumeRole)」モデル。

用語の対応

概念 GCP AWS
誰に メンバー(user / group / service account プリンシパル(IAM user / group / role
何が許される Role(事前定義 / カスタム)に権限をまとめる Policy(管理ポリシー / インライン)に権限を記述
紐付け IAM ポリシー(バインディング) = リソース × メンバー × Role Policy を user / group / role にアタッチ
マシン用ID Service Account IAM Role(EC2 などにアタッチ)

GCP の「Role」は権限の束、AWS の「Role」は引き受け可能なID、と名前が同じでも指すものが違う点に注意。GCP で AWS の Role に近いのは Service Account


② ガードレール:Organization Policy と SCP

「IAM で許可されていても、組織として一律に禁止したい」を実現する仕組み。

共通点

  • 上位(Organization / Folder / OU)に設定 → 下位へ継承される
  • 権限を付与しない(あくまで「許可の上限」を絞るだけ)
  • ルートユーザー / 組織管理者であっても、原則として上限を超えられない

違い

観点 GCP: Organization Policy AWS: SCP
設定する場所 Organization / Folder / Project Organization / OU / Account(管理アカウントには効かない
何を制御するか 制約(Constraint) を有効化して設定。例:「特定リージョンのみ許可」「外部IP禁止」「公開バケット禁止」 IAM アクション単位で Allow / Deny を記述(JSON)。例:ec2:* を特定リージョン外で Deny
記法 事前定義された制約のオン/オフ+値(リスト/ブール) IAM とほぼ同じ JSON ポリシー言語
継承の挙動 下位で inheritFromParent や上書き可否を制御 OU 階層を下るほど AND で重なる(どこかで Deny されれば最終的に Deny)

よくあるユースケース

やりたいこと GCP AWS
使えるリージョンを限定 組織ポリシー gcp.resourceLocations SCP で aws:RequestedRegion 条件付き Deny
公開(パブリック)アクセスを禁止 storage.publicAccessPrevention SCP で s3:PutBucketPublicAccessBlock の解除を Deny
サービスアカウントキー作成を禁止 iam.disableServiceAccountKeyCreation SCP で iam:CreateAccessKey を Deny
特定サービスの利用を禁止 (組織ポリシー or VPC SC 等) SCP でサービスの名前空間ごと Deny

実効権限の判定フロー(まとめ)

最終的に「ある操作が通るか」は、両クラウドとも 「許可」と「上限」の両方を満たすか で決まる。

  • GCP:IAM は「allow のみ」。明示的な deny は別途「IAM Deny ポリシー」で表現。基本は「上位からの allow の継承」+「組織ポリシーの上限」。
  • AWS:IAM は「明示 Deny > 明示 Allow > 暗黙 Deny」の評価順。さらに SCP の上限がかかる。1つでも Deny があれば最終結果は Deny

まとめ:覚え方

  • 階層継承の主役が違う
    • GCP = IAM そのものが階層継承する(Folder に付けた Role が配下 Project に効く)
    • AWS = IAM はアカウント内で閉じる。階層継承するのは主に SCP(ガードレール) の方
  • ガードレールは両方とも「上限を絞るだけ・権限は与えない」
    • GCP: Organization Policy(制約のオン/オフ)
    • AWS: SCP(IAM 記法の Deny ベース)
  • 名前が同じでも中身が違うトラップ
    • GCP の「Role」= 権限の束 / AWS の「Role」= 引き受け可能なID
    • AWS の Role に近い GCP の概念は Service Account

関連記事:GCP のリソース階層を AWS と比較する(Organization / Folder / Project 編)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?