新しい権限で Cloud Build から Cloud Run へデプロイする
Step #2: ERROR: (gcloud.run.deploy) User PROJECT_NUMBER@cloudbuild.gserviceaccount.com does not have permission to access namespaces instance hogehoge (or it may not exist): Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist). みたいなやつ、actAs のあれね
サービスアカウントユーザーの権限を要求するようになっている(2021/2 頃からのはず)
Cloud Functions や AppEngine も同様にデプロイする時に必要になっているはず
これの話
全体のサービスアカウントユーザー権限渡したくないときは
注: セキュリティを強化するには、サービス アカウント ユーザーのロールを Cloud Run ランタイム サービス アカウントのみに付与してください。これを行う方法については、最小限の IAM 権限の使用をご覧ください。
これを Terraform でどうするか
ロールは roles/iam.serviceAccountUserでも対象をどうやって選ぶ? iam.serviceaccounts.actAs ?
Terraform 上のどのリソースを使うのか
謎の google_service_account_iam_member?
その通り正解っぽかった
code:iam.tf
resource "google_service_account_iam_member" "cloudbuild_default_service_account_user" {
service_account_id = data.google_compute_default_service_account.default.name
member = "serviceAccount:${data.google_project.this.number}@cloudbuild.gserviceaccount.com"
role = "roles/iam.serviceAccountUser"
}
google_service_account_iam_member は感覚としては google_storage_bucket_iam_member の兄弟
google_storage_bucket_iam_member が特定のストレージを指定して role を渡す(特定の IAM への roles/storage.* を渡すのではなく)ように、特定のサービスアカウントへのアクセス権を付与する
google_storage_bucket_iam_member に渡せる role がストレージまつわるもの以外意味あるのかは知らないし
google_service_account_iam_member に roles/iam.serviceAccountUser 以外を渡して意味ある role があるのかも気になる(なんか意味ないよみたいなエラーが出たような...)