概要
掲題の通りです。いつも忘れるんで、備忘として記述してます。
想定
Github Actions (みたいなCI)でGoogle App Engineにデプロイするためのサービスアカウントを作ります。
結論
以下で作成する。
# 変数
EXPORT PROJECT_ID=[プロジェクトID]
EXPORT SERVICE_ACCOUNT_ID=[サービスアカウント名] #例: ci-deploy とか
# サービスアカウントの作成
$ gcloud iam service-accounts create ${SERVICE_ACCOUNT_ID} \
--description="Use to CI Deploy" \
--display-name="CI Deploy" \
--project ${PROJECT_ID}
# 必要なロールの設定
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/appengine.deployer"
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/appengine.serviceAdmin"
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/compute.storageAdmin"
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/cloudbuild.builds.builder"
# Optional: サーバーレスVPCを利用する場合
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/vpcaccess.user"
ダウンロード
$ gcloud iam service-accounts keys create [任意の名前].json \
--iam-account=${SERVICE_ACCOUNT_ID}@${PROJECT_ID}.iam.gserviceaccount.com
created key [xxxx] of type [json] as [xxx.json] for [xx@xxxx.iam.gserviceaccount.com]
ちなみに
GitHubは一昨年くらいにOIDCトークンを導入したからWorkload Identity 連携でGoogle Cloudに認証するというのもできるらしいです。
参考