错误:(gcloud.beta.functions.deploy)... message = [呼叫者没有权限]

时间:2018-08-17 20:47:28

标签: google-cloud-functions google-cloud-build

我正在尝试从此存储库部署代码:

https://github.com/anishkny/puppeteer-on-cloud-functions

在Google Cloud Build中。我的cloudbuild.yaml文件内容为:

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['beta', 'functions', 'deploy', 'screenshot', '--trigger-http', '--runtime', 'nodejs8', '--memory', '1024MB']

我为我的Cloud Build Service帐户(****@cloudbuild.gserviceaccount.com)赋予了以下角色:

  • 云构建服务帐户
  • 云功能开发人员

但是,在我的Cloud Build日志中,我看到以下错误:

starting build "1f04522c-fe60-4a25-a4a8-d70e496e2821"

FETCHSOURCE
Fetching storage object: gs://628906418368.cloudbuild-source.googleusercontent.com/94762cc396ed1bb46e8c5dbfa3fa42550140c2eb-b3cfa476-cb21-45ba-849c-c28423982a0f.tar.gz#1534532794239047
Copying gs://628906418368.cloudbuild-source.googleusercontent.com/94762cc396ed1bb46e8c5dbfa3fa42550140c2eb-b3cfa476-cb21-45ba-849c-c28423982a0f.tar.gz#1534532794239047...
/ [0 files][    0.0 B/  835.0 B]                                                
/ [1 files][  835.0 B/  835.0 B]                                                
Operation completed over 1 objects/835.0 B.                                      
tar: Substituting `.' for empty member name
BUILD
Already have image (with digest): gcr.io/cloud-builders/gcloud
ERROR: (gcloud.beta.functions.deploy) ResponseError: status=[403], code=[Forbidden], message=[The caller does not have permission]
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/gcloud" failed: exit status 1

我想念什么?

5 个答案:

答案 0 :(得分:4)

似乎(当)Cloud Functions转为GA时,权限已更改。另一位客户今天提出了这个问题,我想起了您的问题。

Cloud Build机械手(${NUM}@cloudbuild.gserviceaccount.com)还必须是${PROJECT-ID}@appspot.gserviceaccount.com帐户的serviceAccountUser:

NB 尽管Cloud Build机器人本地部分是项目编号(${NUM}),而apppotpot机器人本地部分是项目ID(${PROJECT}

请尝试:

PROJECT=[[YOUR-PROJECT-ID]]

NUM=$(gcloud projects describe $PROJECT --format='value(projectNumber)')

gcloud iam service-accounts add-iam-policy-binding \
${PROJECT}@appspot.gserviceaccount.com \
--member=serviceAccount:${NUM}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser \
--project=${PROJECT}

让我知道!

答案 1 :(得分:3)

According to Cloud Build documentation结合使用,对于Cloud Functions,您必须授予“项目编辑器”您的服务帐户的角色。

但是,Cloud Functions documentation指出,除了使用项目编辑器角色以外,您还可以使用“ Cloud Functions Developer角色[但必须]确保已授予“服务帐户用户”角色”。关于服务帐户,它表示“在您的项目上具有CloudFunctions.ServiceAgent角色”,并且“具有对触发源的权限,例如Pub / Sub或触发您的功能的Cloud Storage存储桶”。

基于这些考虑,我的理解是,省略了文档来指定您的服务帐户所需的所有角色,而直接指向授予项目编辑者角色。

答案 2 :(得分:3)

在阅读了很多文档之后,我也为此付出了很多努力。上述答案的结合使我走上了正确的道路。基本上,需要以下内容:

PROJECT=[PROJECT-NAME]

NUM=$(gcloud projects describe $PROJECT --format='value(projectNumber)')

gcloud iam service-accounts add-iam-policy-binding \
${PROJECT}@appspot.gserviceaccount.com \
--member=serviceAccount:${NUM}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser \
--project=${PROJECT}

gcloud iam service-accounts add-iam-policy-binding \
    ${PROJECT}@[INSERT_YOUR_IAM_OWNER_SERVICE_ACCOUNT_NAME].iam.gserviceaccount.com \
    --member='serviceAccount:service-${NUM}@gcf-admin-robot.iam.gserviceaccount.com' \
    --role='roles/iam.serviceAccountUser'  

我还通过IAM控制台向我的@ cloudbuild.gserviceaccount.com帐户添加了“ Cloud Functions Developer”角色。

答案 3 :(得分:0)

使用auth开始您的云构建

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['auth', 'activate-service-account', 'xoxox@xoxo-dev.iam.gserviceaccount.com', '--key-file=account.json', '--project=rabbito-dev']

然后简单地将代码部署在云功能上

- name: 'gcr.io/cloud-builders/gcloud'
  args: ['beta', 'functions', 'deploy', 'screenshot', '--trigger-http', '--runtime', 'nodejs8', '--memory', '1024MB']

答案 4 :(得分:0)

您必须在Cloud Build设置页面上更新服务帐户权限。 这是说明https://cloud.google.com/cloud-build/docs/deploying-builds/deploy-cloud-run#fully-managed

您只需要在该页面上将Cloud Run Admin角色的状态设置为ENABLED:

enter image description here

相关问题