启用对非公共Google Cloud功能的令牌访问 [英] Enabling token access to non-public Google Cloud Function

查看:29
本文介绍了启用对非公共Google Cloud功能的令牌访问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在没有公共访问权限的情况下部署Google Cloud功能。服务帐户应该能够以最低权限调用该函数,以便由外部服务器使用。

我已经创建了服务帐户,添加了绑定和下载的密钥:

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>

当我使用INVOKER-ROLE调用函数时,失败:

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. 这着实让我大吃一惊,我以为调用者的角色应该足够了。我在这里错过了什么?

我想使用令牌通过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建议将此类请求视为终端用户请求,即在以调用者角色访问云函数时,通过传递AuthorizationHeader(带承载令牌)来使用OAuth2.0。详细信息为here

尝试通过执行以下操作传递承载令牌

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)"

这篇关于启用对非公共Google Cloud功能的令牌访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆