GCP における Cloud IAM について、基本的な使い方を記載します。
用語

Permission
<service>.<resource>.<verb> という形式で表現されます。例えば、後述の Custom Role を作成するためには iam.roles.create permission が必要です。Permission は通常、ある一つの REST メソッドに対応しています。
Role
複数の permission をまとめたものです。
Member
以下のいずれかを指します。
- ユーザーアカウント
xxxx@gmail.com、xxxx@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 が必要になります。
organization→roles/ownerまたはroles/iam.organizationRoleAdmin(roles/resourcemanager.organizationAdminに権限はありません)project→roles/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" にチェックを入れる必要があることに留意します。

参考資料:
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- GKE における Node および Pod の autoscaling
Google Kubernetes Engine (GKE) における autoscaling について、用語の意味を整理します。 GKE の機能による Node の autoscaling GKE のクラスタには Standard と Autopilot の二種類が存在します。 Autopilot の場合は Node は Google によって管理されるため、自動で autoscaling され... - Snowflake におけるネットワーク関連の設定
本ページではネットワーク関連の設定について記載します。 Network Policy によるアクセス元 IP 制限 IPv4 で指定します。IPv6 は 2021/9/21 時点では利用できません。 allowed list で許可されていない IP は block されます。 allowed list が /24 等で指定されており、その一部を - VPC Service Controls に関する雑多な事項の整理
VPC Service Controls (VPC-SC) に関する雑多な事項を記載します。 Private Google Access の基本形 Private Google Access は外部 IP を持たない VM のための機能です。VPC の機能ですが、VPC-SC と関連するため基本事項を記載します。 [Private Google Access](ht - AWS IAM Role を GCP から STS 認証で利用する設定例
GCP から AWS IAM Role を利用するための設定例を記載します。 GCP Service Account の作成 Service Account を作成して Unique ID を確認します。 AWS IAM Role の作成 Trust relationship の設定は Web Identity を選択します。Identity Provider - Amazon Comprehend を GCP VPC 内から実行する設定の例 (Public Internet 接続なし)GCP DLP に相当する AWS サービスに Amazon Comprehend が存在します。GCP VPC 内から Public Internet を経由せずに利用する設定の例を記載します。 AWS VPC と GCP VPC の作成 クラウド 項目 値 AWS VPC region ap-northeast-1 AWS VPC CIDR 10.2.0.0/16 AWS ap-north




