(gcloud.dataflow.flex-template.build) PERMISSION_DENIED:调用者没



我正在尝试使用服务帐户建立一个灵活的模板图像:

gcloud dataflow flex-template build "$TEMPLATE_PATH" 
--image-gcr-path "$TEMPLATE_IMAGE" 
--sdk-language "JAVA" 
--flex-template-base-image JAVA11 
--metadata-file "metadata.json" 
--jar "target/XXX.jar" 
--env FLEX_TEMPLATE_JAVA_MAIN_CLASS="XXX"

业务帐户有以下角色:

"roles/appengine.appAdmin",
"roles/bigquery.admin",
"roles/cloudfunctions.admin",
"roles/cloudtasks.admin",
"roles/compute.viewer",
"roles/container.admin",
"roles/dataproc.admin",
"roles/iam.securityAdmin",
"roles/iam.serviceAccountAdmin",
"roles/iam.serviceAccountUser",
"roles/iam.roleAdmin",
"roles/resourcemanager.projectIamAdmin",
"roles/pubsub.admin",
"roles/serviceusage.serviceUsageAdmin",
"roles/servicemanagement.admin",
"roles/spanner.admin",
"roles/storage.admin",
"roles/storage.objectAdmin",
"roles/firebase.admin",
"roles/cloudconfig.admin",
"roles/vpcaccess.admin",
"roles/compute.instanceAdmin.v1",
"roles/dataflow.admin",
"roles/dataflow.serviceAgent"

但是,即使使用dataflow.admindataflow.serviceAgent角色,我的服务帐户仍然无法执行此任务。

文档https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates建议将roles/owner角色授予服务帐户,但我犹豫是否要这样做,因为这意味着要成为CI/CD管道的一部分,并且给予服务帐户所有者角色对我来说并没有意义,除非我完全错了。

是否有办法在不授予服务帐户所有者角色的情况下规避此问题?

我刚刚遇到了完全相同的问题,并花了几个小时来解决这个问题。我们也使用terraform服务账号。正如你所提到的,有两个主要问题:服务帐户访问和构建日志访问。

  1. 默认情况下,云构建将使用[project_number]@cloudbuild.gserviceaccount.com形式的默认服务帐户,因此您需要向该服务帐户授予权限,以便向支持gcr容器注册表的gcs桶写入内容。我将roles/storage.admin授予我的服务帐户。
  2. 正如您提到的,默认情况下,云构建将日志保存在gs://[project_number].cloudbuild-logs.googleusercontent.com。这似乎是一个隐藏在项目中的桶,至少我看不见它。另外,不能为它配置google_storage_bucket_iam_member,相反,根据本文档的建议是在项目级别给运行gcloud dataflow ...命令的服务帐户roles/viewer

经过以上修改后,命令可以成功运行了。

相关内容

  • 没有找到相关文章

最新更新