ani*_*kny 10 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']
Run Code Online (Sandbox Code Playgroud)
我为我的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
Run Code Online (Sandbox Code Playgroud)
我想念什么?
Daz*_*kin 11
似乎在(也许)Cloud Functions进入GA时,权限已更改。今天另一位客户提出了这个问题,我想起了您的问题。
另外,Cloud Build机械手(${NUM}@cloudbuild.gserviceaccount.com)必须是该${PROJECT-ID}@appspot.gserviceaccount.com帐户的serviceAccountUser :
注意:虽然Cloud Build机械手本地部分是项目编号(${NUM}),但是appspot机械手本地部分是项目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}
Run Code Online (Sandbox Code Playgroud)
让我知道!
根据Cloud Build 文档,对于 Cloud Functions,您必须向您的服务帐户授予“项目编辑器”角色。
但是,Cloud Functions 文档指出,除了使用项目编辑器角色之外,您还可以使用“Cloud Functions 开发人员角色 [但您必须] 确保您已授予服务帐户用户角色”。对于服务帐户,它表示拥有“您的项目上的 CloudFunctions.ServiceAgent 角色”和“拥有触发源的权限,例如 Pub/Sub 或触发您的函数的 Cloud Storage 存储桶”。
由于这些考虑,我的理解是文档省略了指定您的服务帐户所需的所有角色,而是直接指示授予项目编辑器角色。
在阅读了很多文档之后,我也为此付出了很多努力。上述答案的结合使我走上了正确的道路。基本上,需要以下内容:
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'
Run Code Online (Sandbox Code Playgroud)
另外,我通过IAM控制台向我的@ cloudbuild.gserviceaccount.com帐户添加了“ Cloud Functions Developer”角色。
| 归档时间: |
|
| 查看次数: |
4820 次 |
| 最近记录: |