48
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GCP の Cloud IAM に登場する基本概念まとめ + AWS IAM との対応

Last updated at Posted at 2020-06-14

AWS を使うことが多かった自分が GCP をさわったところ、Cloud IAM に登場する用語が AWS の IAM と違うことで非常に混乱しました。
そこで、過去に AWS の IAM1 や Kubernetes の RBAC2 についてまとめたのと同じように、GCP の Cloud IAM に登場する基本概念をまとめました。

※ 基本を理解するための記事なので、厳密ではない表現をしている箇所があります
※ Cloud IAM 初心者のため、間違いがあるかもしれません。見つけた方はご指摘ください

Cloud IAM に登場する基本概念の全体像

整理した概念の全体像は以下の通りです。

GCP_Cloud_IAM_概念モデル (10).png

AWS と比べながら順に説明していきます。

各概念の説明

メンバー

GCP_Cloud_IAM_概念モデル (3).png

GCP では IAM によって権限を付与できる対象を「メンバー」と言います。

「メンバー」には、

  • Google アカウント
  • サービスアカウント
  • Google グループ
  • Cloud Identity or G Suite Domain

の 4 つがあります。

AWS で IAM によって権限を付与できる対象には IAM User、IAM Group、IAM Role の 3 つがありますが、この 3 つをまとめたような概念が「メンバー」です。

なお、AWS の IAM Role は、ざっくり言うと GCP のサービスアカウントに相当します。

権限

GCP_Cloud_IAM_概念モデル (5).png

Cloud IAM における「権限」は、「どのサービスのどのリソースのどの API が許可されるか」を表します。
例えば、compute.instance.create のようにして、compute サービスの instance の作成 API の許可を表します。

AWS の IAM では権限を記述するときに「xxx という ID のインスタンス」といったレベルまで指定できますが、Cloud IAM の「権限」ではそこまで制御できません。インスタンス名などを指定して権限制御したい場合は、以下のいずれかの方法で実現します。

  • 「バインディング」の中で「条件」を指定する
  • 特定の GCE インスタンスなどのリソースの「ポリシー」として権限を付与する

これらの方法については後述します。

ロール

GCP_Cloud_IAM_概念モデル (7).png

「権限」をまとめたものを「ロール」と言います。
例えば、xxx という「ロール」には、「GCE インスタンスの作成」と「GCE インスタンスの削除」を許可するといったイメージです。

非常に紛らわしいのですが、Cloud IAM における「ロール」は AWS の IAM Policy に相当します。

Cloud IAM の「ロール」には「基本ロール」、「事前定義ロール」、「カスタムロール」の 3 種類があります。
これらの概要と、AWS における用語のまとめは以下の通りです。

GCP AWS 概要
基本ロール - GCP で従来から使用されているオーナー、編集者、閲覧者の 3 ロールのこと
事前定義ロール AWS 管理ポリシー GCP や AWS が提供する、既存のロール (またはポリシー)
カスタムロール カスタマー管理ポリシー GCP や AWS のユーザが独自に作成するロール (またはポリシー)

バインディング

GCP_Cloud_IAM_概念モデル (8).png

「メンバー」と「ロール」の紐付けを「バインディング」と言います。

AWS には「バインディング」に相当する用語はなかったと思いますが、強いて言えば、Terraform を使うと登場する IAM Role Policy Attachment のようなリソースが「バインディング」に相当します。

「バインディング」には「条件」を定義することができます。
公式ドキュメント によると、

条件の属性は、要求されたリソース(タイプや名前など)、または要求に関する詳細(ターゲットの Compute Engine や仮想マシン(VM)インスタンスのタイムスタンプ、発信元 IP アドレス、宛先 IP アドレスなど)に基づいています。これらの属性を使用した式の例を以下に示します。

ということで、AWS では IAM Policy の中で「xxx という ID のインスタンス」といったレベルまで指定するように、Cloud IAM では「バインディング」の「条件」の中でインスタンス名などを指定することができます。

また、AWS では IP アドレスによる制限なども IAM Policy の中に Condition として記述することになるという違いもあります。

ポリシー

GCP_Cloud_IAM_概念モデル (11).png

最後になりますが、「バインディング」をまとめたものを「ポリシー」と言います。
つまり、**「誰がどのロールを持つか」をまとめたものが「ポリシー」**です。
「ポリシー」を見ると、「誰がどのロールを持つか分かる」というイメージです。
AWS の IAM Policy とは全く違う概念です。非常に紛らわしいのでご注意ください

「ポリシー」は、リソース (プロジェクト・フォルダを含む) に対して設定できます。

例えば、プロジェクトレベルで「誰がどのロールを持つか」を設定したり、特定の GCE インスタンスに対して「誰がどのロールを持つか」を設定したりできます。
AWS における S3 のバケットポリシーが他のリソースに対しても存在するようなイメージです。

Cloud IAM と AWS IAM の対応まとめ

ここまでで基本概念を一通り説明したので、最後に Cloud IAM と AWS IAM の用語の対応をまとめます。

GCP AWS 概要
メンバー IAM User + IAM Group + IAM Role IAM で権限を付与できる対象
Google アカウント IAM User エンジニアなどのユーザ
サービスアカウント IAM Role 他のクラウドリソースにアクセスする擬似的なユーザ
ロール IAM Policy どのリソースに何をできるか
リソース Resource 仮想マシン、ストレージなど
verb Action どの API を叩くことができるか
バインディング なし (Terraform の IAM Role Policy Attachment など) 「誰が」「どのリソースに何をできるか」を紐づけたもの
ポリシー (S3 のバケットポリシー) 「誰が」「どのリソースに何をできるか」の紐付けをまとめたもの

おわりに

この記事では Cloud IAM の基本概念を整理しました。
GCP におけるアカウント管理や権限制御については、この記事で整理した内容に加えて「プロジェクト」や「請求アカウント」、「GCS バケットのアクセス制御」なども理解していく必要がありそうです。

参考

  1. AWS IAMの基本概念を概念モデルで整理した

  2. 概念モデル + AWS IAM との対比で Kubernetes の RBAC を理解する

48
29
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
48
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?