簡體   English   中英

錯誤:(gcloud.beta.functions.deploy)...消息=[調用者沒有權限]

[英]ERROR: (gcloud.beta.functions.deploy) ... message=[The caller does not have permission]

我正在嘗試從這個 repo 部署代碼:

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

在谷歌雲構建中。 我的 cloudbuild.yaml 文件內容是:

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

我已將以下角色授予我的雲構建服務帳戶 (****@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

我錯過了什么?

當(可能)Cloud Functions 正式發布時,權限似乎發生了變化。 今天另一位客戶提出了這個問題,我想起了你的問題。

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}

讓我知道!

在閱讀了相當多的文檔后,我也為此苦苦掙扎。 以上答案的組合使我走上了正確的軌道。 基本上,需要類似以下內容:

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 Build 文檔,對於 Cloud Functions,您必須向您的服務帳戶授予“項目編輯器”角色。

但是, Cloud Functions 文檔指出,除了使用項目編輯器角色之外,您還可以使用“Cloud Functions 開發人員角色 [但您必須] 確保您已授予服務帳戶用戶角色”。 對於服務帳戶,它表示擁有“您的項目上的 CloudFunctions.ServiceAgent 角色”和“擁有觸發源的權限,例如 Pub/Sub 或觸發您的函數的 Cloud Storage 存儲桶”。

由於這些考慮,我的理解是文檔省略了指定您的服務帳戶所需的所有角色,而是直接指示授予項目編輯器角色。

您必須在 Cloud Build 設置頁面上更新服務帳戶權限。 這是說明https://cloud.google.com/cloud-build/docs/deploying-builds/deploy-cloud-run#fully-managed

您只需在該頁面上將 Cloud Run Admin 角色的狀態設置為 ENABLED:

在此處輸入圖片說明

使用 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']

請將“Cloud Functions Service Agent”角色與“Cloud Functions Developer”一起添加到您的服務帳戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM