こちらのページに記載した GCP における Cloud IAM について、基本的な使い方を記載します。
<service>.<resource>.<verb>
という形式で表現されます。例えば、後述の Custom Role を作成するためには iam.roles.create
permission が必要です。Permission は通常、ある一つの REST メソッドに対応しています。
複数の permission をまとめたものです。
以下のいずれかを指します。
xxxx@gmail.com
、xxxx@qoosky.io
xxxx@*.gserviceaccount.com
xxxx_group@qoosky.io
qoosky.io
IAM policy は以下の4つのレベルで作成できます。上位のレベルで作成したポリシーは、下位のレベルでも適用されます。
一つの 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"
]
}
]
}
Member
すべてを指します。
Member
に加えて、ログインしていない匿名ユーザも対象となります。
以下のいずれかです。初期の GCP では Predefined roles が存在しておらず、これら三つのみが存在していたという歴史的な経緯があります。
Basic roles よりも細かくアクセス制御ができます。
organization
または project
レベルで作成できます。それぞれ、以下の Role が必要になります。
organization
→ roles/owner
または roles/iam.organizationRoleAdmin
(roles/resourcemanager.organizationAdmin
に権限はありません)project
→ roles/owner
または roles/iam.roleAdmin
roles/iam.securityReviewer
は custom role の管理はできませんが、閲覧はできます。
引数に指定した organization、project または resource に関する permission 一覧を表示します。
gcloud iam list-testable-permissions //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID
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
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 を更新することを避けるために 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]
あるいは、以下のように permission を追加することもできます。
gcloud iam roles update myCustomRole --project $DEVSHELL_PROJECT_ID \
--add-permissions storage.buckets.get,storage.buckets.list
無効化 (stage: DISABLED
となります)
gcloud iam roles update myCustomRole --project $DEVSHELL_PROJECT_ID --stage DISABLED
削除
gcloud iam roles delete myCustomRole --project $DEVSHELL_PROJECT_ID
削除フラグが立った後の流れは以下のようになります。
stage: DEPRECATED
となります。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
例えば Data Fusion API を有効化すると、以下のサービスアカウントへの IAM 権限が付与されます。
service-customer-xxx@gcp-sa-datafusion.iam.gserviceaccount.com
管理コンソールから、付与された IAM を確認するには "Include Google-provided role grants" にチェックを入れる必要があることに留意します。
参考資料: