我想部署一个没有公共访问权限的 Google Cloud Function。服务帐户应该能够以最少的权限调用该功能 - 由外部服务器使用。
我已经创建了一个服务帐户,添加了绑定并下载了密钥:
gcloud iam service-accounts create <NAME> --project <PROJECT> --description <DESCRIPTION>
gcloud beta functions add-iam-policy-binding <FUNCTION> --region europe-west1 --member serviceAccount:<EMAIL> --role roles/cloudfunctions.invoker
gcloud iam service-accounts keys create --iam-account <EMAIL> <KEYFILE>
当我使用调用者角色调用该函数时,会失败:
gcloud auth activate-service-account <EMAIL> --key-file <KEYFILE>
gcloud beta functions call <FUNCTION> --region=europe-west1 --data '{}'
ERROR: (gcloud.beta.functions.call) ResponseError: status=[403], code=[Forbidden], message=[The caller does not have permission]
但是,当我切换到我的用户时,添加roles/cloudfunctions.developer
角色,切换回服务帐户,以上工作正常:
gcloud config set account <USER>
gcloud beta functions add-iam-policy-binding <FUNCTION> --region europe-west1 --member serviceAccount:<EMAIL> --role roles/cloudfunctions.developer
gcloud auth activate-service-account <EMAIL> --key-file <KEYFILE>
gcloud beta functions call <FUNCTION> --region=europe-west1 --data '{}'
Success!
- 这确实让我惊讶,我认为调用者角色应该足够了。我在这里缺少什么?
我想使用令牌通过curl 访问该函数,但这根本不起作用,无论是作为调用者还是作为开发人员:
echo $(GOOGLE_APPLICATION_CREDENTIALS=<KEYFILE> gcloud auth application-default print-access-token) > <TOKENFILE>
curl -H "Authorization: Bearer $(cat <TOKENFILE>" <FUNCTIONURL>
→ 401 Unauthorized as HTML page
- 这里有什么问题?
谢谢你的帮助!
最好的,鲍里斯