gpt4 book ai didi

authentication - 启用对非公共(public) Google Cloud Function 的 token 访问

转载 作者:行者123 更新时间:2023-12-04 06:42:07 25 4
gpt4 key购买 nike

我想部署一个没有公共(public)访问权限的 Google Cloud Functions。服务帐户应该能够以最低权限调用函数 - 以供外部服务器使用。

我已经创建了一个服务帐户,添加了绑定(bind)并下载了 key :

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!
  1. 这真让我吃惊,我认为调用者角色应该足够了。我在这里缺少什么?

我想使用 token 通过 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
  1. 这里有什么问题?

感谢您的帮助!最好的,鲍里斯

最佳答案

Google Cloud 建议将此类请求视为最终用户请求,即在使用调用者角色访问 Cloud 函数时通过传递授权 header (带有不记名 token )来使用 OAuth2.0。详情是here

尝试通过执行以下操作来传递不记名 token

gcloud auth activate-service-account <service account> <key file>
gcloud auth print-identity-token <service account>
curl https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME \
-H "Authorization: bearer $(gcloud auth print-identity-token)"

关于authentication - 启用对非公共(public) Google Cloud Function 的 token 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58741674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com