Cloud IAM
GCP (IAM) | hatakoya memo
gcloud での実行例がまとまってて便利
Stackdriver Trace の Service Account を払い出す
code:create-service-account.sh
# service account を作る
$ gcloud iam service-accounts create stackdriver-trace-agent
# service account に role を付与
$ gcloud projects add-iam-policy-binding pokutuna-dev \
--member=serviceAccount:stackdriver-trace-agent@pokutuna-dev.iam.gserviceaccount.com \
--role=roles/cloudtrace.agent
# credential を作る
$ gcloud iam service-accounts keys create key.json \
--iam-account stackdriver-trace-agent@pokutuna-dev.iam.gserviceaccount.com
1回で複数の role をセットはできないみたい
--role=roles/hoge --role=roles/fuga とかやっても一方のみ付く
role はこういうページを見て探す
役割について  |  Cloud IAM のドキュメント  |  Google Cloud
事前定義された役割と権限  |  BigQuery  |  Google Cloud
add-iam-policy-binding
の後ろにくる RESOURCE はサブコマンドによってかなりなんでもある、IAM ポリシーを付けられる対象
プロジェクト
$ gcloud projects add-iam-policy-binding (projectId)
Cloud Functions
$ gcloud functions add-iam-policy-binding (functionName)
Service Account の公開鍵
サービス アカウント キーの作成 - サービス アカウントキーの作成と管理  |  Cloud IAM のドキュメント  |  Google Cloud
Google は、すべてのサービス アカウントのすべての公開鍵に誰でもアクセスできるようにしており、秘密鍵を使って作成された署名の検証に公開鍵を使用できます。公開鍵は次の URL で公開されています。
すばらしいな
Cusotm Role
カスタム役割の作成と管理  |  Cloud IAM のドキュメント  |  Google Cloud
複数の Permission を指定してオリジナルの Role を作ろう! という機能だけど
意外と Custom Role に対応してない Permission が多く微妙である。
👉カスタム役割での権限のサポートレベル  |  Cloud IAM のドキュメント  |  Google Cloud
このツールにはこの Permissions が必要ですよ、この yaml で Custom Role を作れますよ、となるとうれしいのだが意外とサポートされてない権限が多い、Datastore は結構だめ
数字で作成されるサービスアカウント
例えば
xxxxxx@cloudbuild.gserviceaccount.com CloudBuild
xxxxxx-compute@developer.gserviceaccount.com ComputeEngine
xxxxxx@cloudservices.gserviceaccount.com GoogleAPI サービスエージェント
この辺の数字は Project の数字のほうのID
Method: projects.list  |  Resource Manager  |  Google Cloud から確認できる
Terraform では google_project | Data Sources | hashicorp/google | Terraform Registry などで data.google_project.{name}.number などで取れる
...そういうサービスアカウントを data.google_service_account で参照してもたぶんだめ(@より前しか入力できない)
google_project_service_identity | Resources | hashicorp/google | Terraform Registry で参照できるようだが...
諦めて文字列を作る ${data.google_project.hoge.number}@cloudbuild.gserviceaccount.com など
code:cloudbuild-agent.tf
locals {
cloudbuild_user_roles = toset([
"roles/cloudkms.cryptoKeyEncrypterDecrypter",
"roles/container.developer"
])
}
resource "google_project_iam_member" "roles_cloudbuild_agent" {
for_each = local.cloudbuild_user_roles
member = "serviceAccount:${data.google_project.this.number}@cloudbuild.gserviceaccount.com"
role = each.value
}
Access Scope
サービス アカウント  |  Compute Engine ドキュメント  |  Google Cloud
アクセス スコープは、インスタンスの権限を指定するレガシーな方法です。アクセス スコープはセキュリティ メカニズムではなく、gcloud ツールまたはクライアント ライブラリからのリクエストで使用されるデフォルトの OAuth スコープを定義するものです。これは、gRPC や SignBlob API など、OAuth を介して認証を受けないリクエストには影響しないことに注意してください。
従来の GCE インスタンスの権限を制限する用途?
デフォルト
https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
https://www.googleapis.com/auth/service.management.readonly
https://www.googleapis.com/auth/servicecontrol
API とりあえず叩くときに指定する https://www.googleapis.com/auth/cloud-platform は入ってない
これは全ての GCP OAuth API
変更には1度インスタンスを停止する必要がある
Compute Engineのアクセススコープ変更 - Qiita
https://gyazo.com/e2da754b7bc1c89cc369d755fcb24013
IAM Conditions
IAM Conditions の概要  |  IAM のドキュメント  |  Google Cloud
指定された条件を満たす場合にのみプリンシパルにアクセス権を付与できる
基本ロールや allUsers には条件付与できない
サービスや特定のバケットに限る
タグでフィルタ
期限
宛先
条件は CEL で書く
IAM Conditions 属性のリファレンス  |  IAM のドキュメント  |  Google Cloud
Asset Inventory
Cloud Asset Inventory の概要  |  Cloud Asset Inventory のドキュメント  |  Google Cloud
サポートされているアセットタイプ  |  Cloud Asset Inventory のドキュメント  |  Google Cloud
$ gcloud asset list
#GoogleCloud