新しい権限で Cloud Build から Cloud Run へデプロイする
#Terraform #Cloud_Build #GoogleCloud
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 のあれね
Cloud Run へのデプロイ  |  Cloud Build のドキュメント  |  Google Cloud
サービスアカウントユーザーの権限を要求するようになっている(2021/2 頃からのはず)
Cloud Functions や AppEngine も同様にデプロイする時に必要になっているはず
サービス アカウントをリソースに関連付けるための権限を要求する  |  Cloud IAM のドキュメント  |  Google Cloud
これの話
全体のサービスアカウントユーザー権限渡したくないときは
注: セキュリティを強化するには、サービス アカウント ユーザーのロールを Cloud Run ランタイム サービス アカウントのみに付与してください。これを行う方法については、最小限の IAM 権限の使用をご覧ください。
最小限の IAM 権限の使用 - Cloud Run へのデプロイ  |  Cloud Build のドキュメント  |  Google Cloud
これを 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 | Resources | hashicorp/google | Terraform Registry
google_storage_bucket_iam_member が特定のストレージを指定して role を渡す(特定の IAM への roles/storage.* を渡すのではなく)ように、特定のサービスアカウントへのアクセス権を付与する
google_storage_bucket_iam_member に渡せる role がストレージまつわるもの以外意味あるのかは知らないし
google_service_account_iam_member に roles/iam.serviceAccountUser 以外を渡して意味ある role があるのかも気になる(なんか意味ないよみたいなエラーが出たような...)