GCPのCloud DeployをCloud Buildから呼び出すときにエラーになる(ACTAS_PERMISSION_DENIED)


GCP環境で主にGKEのCI/CDをやろうとしたときに軽くハマったのでメモ的に書きます。

Cloud Deployとは

主にGKE(Google Kubernetes Engine)へのコンテナイメージのデプロイに利用します。
CI/CDで言うとCD(Continuous Delivery)にあたります。

Kubernetesでは良くCIとCDを分けて考えられるのですが、ArgoCDなどをインストールしなくても、コンテナイメージを動作環境に合わせてプロモート出来るのが最大の魅力と考えます。

(参考)
https://cloud.google.com/blog/ja/products/devops-sre/google-cloud-deploy-automates-deploys-to-gke

Cloud Buildとは

GCP上で様々なタスクを実行するためのサービス。Github Actionsのようなもの
コンテナイメージのビルドも出来る。

Cloud Deployを使うなら、Cloud Buildと連携してGCP内でCI/CDを完結させたいというモチベーションは高い。

本題のエラーについて

設定して使ってみたところ、Cloud Buildから以下のような感じで Cloud Deployを実行する際にエラーになる
それぞれの設定はダミーです。

実行内容

  - name: gcr.io/google.com/cloudsdktool/cloud-sdk
    entrypoint: gcloud
    args:
      [
        "deploy", "releases", "create", "rel-${SHORT_SHA}",
        "--delivery-pipeline", "${_PIPELINE_NAME}",
        "--region", "${_COMPUTE_ZONE}",
        "--source", "hoge.yaml",
        "--images", "app=$_IMAGE_NAME:$COMMIT_SHA"
      ] 

エラー

domain: clouddeploy.googleapis.com
metadata:
  serviceAccount: [email protected]
  reason: ACTAS_PERMISSION_DENIED

解決策

Cloud Buildを実行させるサービスアカウント
[email protected]
に権限を追加する。

NGだった

カスタムロールを作成して
iam.serviceAccounts.actAs
を入れておけば良いかなと思ったがNG

OKだった

Editor権限を追加したらうまくいった(調査中)
(IAMで足りていない権限を見ていくと
container.clusters.getCredentials
あたりが怪しいのではないか)

所感

Cloud Deployがすごく便利なので、是非試してみて欲しいです。

(参考文献)
https://medium.com/google-cloud-jp/cloud-deploy-%E5%AE%9F%E8%B7%B5%E7%B7%A8-ci-%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA-c22a6bc96286