【发布时间】:2021-02-11 08:10:19
【问题描述】:
我正在尝试使用服务帐户构建弹性模板图像:
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.admin 和 dataflow.serviceAgent 角色,我的服务帐户仍然无法执行此任务。
https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates 文档建议将 roles/owner 角色授予服务帐户,但我犹豫是否这样做,因为这意味着成为 CI/CD 管道的一部分并为服务帐户提供所有者角色除非我完全错了,否则对我来说没有任何意义。
在不向服务帐户授予所有者角色的情况下,是否有任何方法可以规避此问题?
【问题讨论】:
-
1) 通常错误消息包括缺少的权限。在您的问题中发布整个错误消息。 2)
Owner角色是遗留的,一个项目中只有一两个人,甚至在 ORG 级别更好的人应该有这个角色。在您的示例中,您分配了很多管理员角色(它们真的有必要吗),这同样糟糕。例如,为什么 Cloud Dataflow 的服务帐户需要 App Engine、Cloud Functions 等的管理员权限? -
对于测试和开发,在确定正确的权限集时使用旧角色编辑器是可以的。如果角色编辑器失败,那么就会发生其他事情。
-
是的,此服务帐户仅用于测试目的。有些角色是从以前的开发任务中遗留下来的,我同意这是一种不好的做法。但是,特别是对于这项任务,我仍然无法将第一个脚本作为我的 CI/CD 管道的一部分。错误消息只是说:
ERROR: (gcloud.dataflow.flex-template.build) PERMISSION_DENIED: The caller does not have permission -
查看 Stackdriver 日志。应该记录失败的 API 调用,这可能有助于了解哪个 API 由于缺少权限而失败。
-
嗨,我设法弄清楚我需要添加
roles/cloudbuild.builds.builder才能开始构建作业。但是,我在构建步骤之后遇到了这个错误。如果您能帮我解决这个问题,我将不胜感激。ERROR: (gcloud.dataflow.flex-template.build) HTTPError 403: <?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>dev-tf-sa@XXX.iam.gserviceaccount.com does not have storage.objects.get access to the Google Cloud Storage object.</Details></Error>
标签: google-cloud-platform google-cloud-dataflow google-cloud-iam