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" にチェックを入れる必要があることに留意します。
参考資料:
関連記事
- GKE における Node および Pod の autoscalingGoogle 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