GCP Cloud IAM の基本的な使い方
[履歴] [最終更新] (2022/02/20 10:31:22)
最近の投稿
注目の記事

概要

こちらのページに記載した GCP における Cloud IAM について、基本的な使い方を記載します。

用語

Uploaded Image

Permission

<service>.<resource>.<verb> という形式で表現されます。例えば、後述の Custom Role を作成するためには iam.roles.create permission が必要です。Permission は通常、ある一つの REST メソッドに対応しています。

Role

複数の permission をまとめたものです。

Member

以下のいずれかを指します。

  • ユーザーアカウント xxxx@gmail.comxxxx@qoosky.io
  • サービスアカウント xxxx@*.gserviceaccount.com
  • グループ xxxx_group@qoosky.io
  • Cloud Identity (または Google Workspace) ドメイン qoosky.io

Policy

IAM policy は以下の4つのレベルで作成できます。上位のレベルで作成したポリシーは、下位のレベルでも適用されます。

  • organization
  • folder
  • project
  • resource

一つの IAM policy は、複数の binding を持ちます。ある binding は一つの role と複数の member を関連付けます。

{
  "bindings": [
    {
      "role": "roles/storage.objectAdmin",
       "members": [
         "user:ali@example.com",
         "serviceAccount:my-other-app@appspot.gserviceaccount.com",
         "group:admins@example.com",
         "domain:google.com"
       ]
    },
    {
      "role": "roles/storage.objectViewer",
      "members": [
        "user:maria@example.com"
      ]
    }
  ]
}

allAuthenticatedUsers

Member すべてを指します。

allUsers

Member に加えて、ログインしていない匿名ユーザも対象となります。

Role の分類

Basic roles

以下のいずれかです。初期の GCP では Predefined roles が存在しておらず、これら三つのみが存在していたという歴史的な経緯があります。

  • Owner
  • Editor
  • Viewer

Predefined roles

Basic roles よりも細かくアクセス制御ができます。

Custom roles

organization または project レベルで作成できます。それぞれ、以下の Role が必要になります。

  • organizationroles/owner または roles/iam.organizationRoleAdmin (roles/resourcemanager.organizationAdmin に権限はありません)
  • projectroles/owner または roles/iam.roleAdmin

roles/iam.securityReviewer は custom role の管理はできませんが、閲覧はできます。

gcloud コマンド例

Permission 情報の取得

引数に指定した organization、project または resource に関する permission 一覧を表示します。

gcloud iam list-testable-permissions //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID

Role 情報の取得

Predefined roles の表示

gcloud iam roles list

Custom role の表示 (organization レベルまたは project レベル)

gcloud iam roles list --project $DEVSHELL_PROJECT_ID
gcloud iam roles list --project $DEVSHELL_PROJECT_ID --show-deleted
gcloud iam roles list --organization [ORGANIZATION_ID]

引数に指定した organization、project、resource に関する role 一覧の表示

gcloud iam list-grantable-roles //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID

あるロールの情報を取得

gcloud iam roles describe roles/editor
gcloud iam roles describe myCustomRole --project $DEVSHELL_PROJECT_ID

Custom Role の作成

gcloud iam roles create myCustomRole --project $DEVSHELL_PROJECT_ID --file my-role-definition.yaml

my-role-definition.yaml

title: My Custom Role
description: My Custom Role
stage: ALPHA
includedPermissions:
- appengine.versions.create
- appengine.versions.delete

または以下のようにしても同じです。

gcloud iam roles create myCustomRole --project $DEVSHELL_PROJECT_ID \
--title "Role Custom Role" --description "Role Custom Role" \
--permissions compute.instances.get,compute.instances.list \
--stage ALPHA

Custom Role の更新

複数の人が同時に同じ Custom Role を更新することを避けるために etag を指定する必要があります。

gcloud iam roles update myCustomRole --project $DEVSHELL_PROJECT_ID --file my-new-role-definition.yaml

my-new-role-definition.yaml

title: My Custom Role
description: My Custom Role
stage: ALPHA
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
- storage.buckets.get
- storage.buckets.list
etag: [ETAG]

Add permission

あるいは、以下のように permission を追加することもできます。

gcloud iam roles update myCustomRole --project $DEVSHELL_PROJECT_ID \
--add-permissions storage.buckets.get,storage.buckets.list

Custom Role の無効化または削除

無効化 (stage: DISABLED となります)

gcloud iam roles update myCustomRole --project $DEVSHELL_PROJECT_ID --stage DISABLED

削除

gcloud iam roles delete myCustomRole --project $DEVSHELL_PROJECT_ID

削除フラグが立った後の流れは以下のようになります。

  • 7日後、削除が始まります。stage: DEPRECATED となります。
  • 更に 30日後、完全に削除されます。

7日以内であれば、以下のコマンドで削除を取り消せます。

gcloud iam roles undelete myCustomRole --project $DEVSHELL_PROJECT_ID

サービスアカウントの作成

gcloud iam service-accounts create my-sa-20210516 --display-name 'my service account'

gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID \
--member serviceAccount:my-sa-20210516@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com \
--role roles/editor

Google-managed サービスアカウントの表示

例えば Data Fusion API を有効化すると、以下のサービスアカウントへの IAM 権限が付与されます。

service-customer-xxx@gcp-sa-datafusion.iam.gserviceaccount.com

管理コンソールから、付与された IAM を確認するには "Include Google-provided role grants" にチェックを入れる必要があることに留意します。

Uploaded Image

参考資料:

関連ページ