Google Cloud Build在单独项目中部署云功能的正确权限



我们有单独的GCP项目用于"构建"one_answers"生产"环境。我想在"Build"项目中使用Cloud Build来在"prod"项目中部署云功能。遵循文档时。

值得注意的是,我在构建项目的构建服务帐户中添加了"云功能开发人员"角色,并在PROJECT_ID@appspot.gserviceaccount.com如文档中所述,在这个问题中,当运行构建时,我得到:

错误:(gcloud.functions.deploy(响应错误:状态=[403],代码=[禁止],消息=[调用方没有权限]

我的cloudbuild.yaml的一个简化示例是

steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['source', 'repos', 'clone', 'a_mirrored_repo', '--project=build-xxxx']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['functions', 'deploy', 'some_function', '--trigger-http', '--runtime', 'python37', '--project', 'prod-yyyy']

我可以使用笔记本电脑上的gsutil命令行实用程序将我的函数部署到prod,并且我可以使用cloudbuild.yaml将此函数部署到build项目。但我不确定我需要将哪些角色分配给哪些帐户,以使构建项目能够将cloudfunction部署到prod项目。

如果您想在prod项目中部署功能,则必须在prod中添加构建项目的云构建服务帐户作为"云功能开发人员"。如果我正确理解你的描述,那么你已经在构建项目中设置了它。

具体来说:在GCP控制台中,在prod项目中,在IAM>members下添加一个名为[build-project-id]@cloudbuild.gserviceaccount.com的新成员,并向该成员添加"云功能开发人员"角色。此时,尝试部署可能会导致错误消息:

错误:(gcloud.functions.deploy(ResponseError:status=[403],code=[禁止],message=[缺少必要的权限iam.serviceAccounts.actAsprod-xxxx@appspot.gserviceaccount.com关于xxxx项目。

请给予prod-xxxx@appspot.gserviceaccount.com这个roles/iam.serviceAccountUser角色。

你可以通过跑步来做到这一点'gcloud项目添加iam策略绑定产品xxxx--成员=prod-xxxx@appspot.gserviceaccount.com--role=roles/iam.serviceAccountUser的

错误消息中建议的命令略有错误。正确的语法是:

gcloud projects add-iam-policy-binding prod-xxxx --member='serviceAccount:[build-project-number]@cloudbuild.gserviceaccount.com' --role='roles/iam.serviceAccountUser'

最新更新