Open5

GCPのIAMについてメモ

tt

主にGCP固有の概念を把握する

tt

プリンシパル、ロール、ポリシーという3つから構成される。

  • プリンシパル
    • googleアカウント/グループ、サービスアカウントなど一意の識別子を持つ
  • ロール
    • 権限のコレクション
  • ポリシー
    • リソースに対して、どんなロールをどのプリンシパルに許可するのを定義する
tt

プリンシパルの種類

  • Google アカウント
    • いつも使っているgoogleアカウントそのまま
  • サービスアカウント
    • アプリケーションやGCP上のリソースから使用するアカウント
    • 人間が直接使うことはない
  • Google グループ
    • 複数のGoogleアカウントやサービスアカウントをグループとしてまとめたもの
  • Google Workspace アカウント
    • ドメインに紐づくグループ
    • hoge@example.comというGアカウントを作るとexample.comという仮想グループに追加される
    • グループ同様複数アカウントに対する権限管理をする
  • Cloud Identity ドメイン
    • 組織内のすべてのGアカウントの仮想グループ
    • Google Workspace アカウントに似ている
  • 認証済みのすべてのユーザー
    • allAuthenticatedUsersはGアカウントとサービスアカウントで認証済みのユーザーすべてを表す特殊な識別子
    • 外部IdPは含まれないので、大体の場合はallUsersを使うほうが良い
  • すべてのユーザー
    • allUsersallAuthenticatedUsersの認証なしユーザーも含めた識別子
tt

リソース

  • ユーザーが特定のリソースにアクセスする場合はそのリソースのロールをユーザーに付与する
  • 一部サービス(GCSやGCEなど)はリソース単位でのロール付与ができるが、基本的にはプロジェクトレベルで権限を管理する

権限

  • service.resource.verbという形式

ロール

  • 権限のコレクション
  • ロールの種類
    • 基本ロール
      • オーナー、編集者、閲覧者など
    • 事前定義ロール
      • 基本ロールよりも詳細なアクセス制御が可能なロール
    • カスタムロール
      • ニーズに合わせて権限を調整するために作成するロール

許可ポリシー

  • 誰が、どの種類のアクセス権をもつかを定義するステートメントの集合
  • ユーザーへのロールの付与に必要
  • rolemembersから構成される
    • role: プリンシパルに付与するロール
    • members: プリンシパルから構成されたリスト。プリンシパルの種類ごとに接頭辞がつく
tt

リソース階層

  • Org,Folders,Project,services
  • 許可ポリシーはどの階層にも付与でき、子リソースは親リソースの許可ポリシーをすべて継承する

たとえば、前の図で topic_a はプロジェクト example-prod 内に存在する Pub/Sub リソースです。example-prod の編集者のロールを micah@example.com に付与し、topic_a のパブリッシャーのロールを song@example.com に付与する場合は、topic_a の編集者のロールを micah@example.com に付与し、パブリッシャーのロールを song@example.com に付与します。