github actions✖︎GCP(container registry、cloud run)に必要なIAMのロールをまとめた
はじめに
Dockerで作成したアプリをgithub actionsを使って、container registryとcloud runへpushとdeployした際に、GCPのIAM権限周りでハマってしまいました。
container registryとcloud runをgithub actionsで通信するにあたってサービスアカウントに付与したロールを備忘録としてまとめてみました。
最後にハマったポイントをまとめてみましたのでそちらも併せてご覧下さいませ。
actionsのエラーをもとにぽちぽちと設定していっただけなので、もしかしたら不要なロールも追加されているかもしれません、、、mm
構成
github actionsからGCPへは下記のような通信を行うように設定しました。
githubの特定のbranchにプルリクされたら、container registryへpush、cloud runへdeployするという単純な流れです。
container registryのpushの際に付与したロール
- セキュリティ管理者(roles/iam.securityAdmin)
- Project IAM 管理者(roles/resourcemanager.projectIamAdmin)
cloud runのdeployの際に付与したロール
-
サービスアカウントユーザー(roles/iam.serviceAccountUser)
-
Cloud Run 管理者(roles/run.admin)
cloud storage
-
ストレージのレガシー バケット オーナー(roles/storage.legacyBucketOwner)
このロールについては、Permissionsでstorage.buckets.getが付与されれば良いのでStorage レガシー バケット読み取りロールでも良かったかもしれないです。
-
Workload Identity ユーザー(roles/iam.workloadIdentityUser)
ハマったポイント
今回GCPを使うにあたってハマってしまったのがcloud storageの権限でした。
下記のようなエラーが出てstorage.buckets.getの権限が必要だったみたいですが
ERROR: Policy modification failed. For a binding with condition, run "gcloud alpha iam policies lint-condition" to identify issues in condition.
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Role roles/storage.buckets.get is not supported for this resource.
IAMのコンソール画面からロールの設定が出来ず悪戦苦闘しました。結果的にcloud storageの画面でバケットを選択してアクセス権を設定しました。
IAMの画面で設定する方法があるのでしょうか、、、?
参考
最後にIAMのロールを検索する際に参考になる下記Googleのロール一覧から検索すると、付与したい権限のロールを一発で見つかるので便利でした。
ロールについて
Discussion