Authentication 启用对非公共Google云功能的令牌访问

Authentication 启用对非公共Google云功能的令牌访问,authentication,google-cloud-platform,oauth-2.0,google-cloud-functions,gcloud,Authentication,Google Cloud Platform,Oauth 2.0,Google Cloud Functions,Gcloud,我想在没有公共访问的情况下部署Google云功能。服务帐户应该能够以最少的权限调用函数,以供外部服务器使用 我创建了一个服务帐户,添加了绑定并下载了密钥: gcloud iam服务帐户创建--项目--说明 gcloud beta函数添加iam策略绑定--欧洲-西部地区1--成员服务帐户:--角色/cloudfunctions.invoker gcloud iam服务帐户密钥创建--iam帐户 当我使用调用者角色调用函数时,此操作失败: gcloud身份验证激活服务帐户--密钥文件 gcloud

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

我创建了一个服务帐户,添加了绑定并下载了密钥:

gcloud iam服务帐户创建--项目--说明
gcloud beta函数添加iam策略绑定--欧洲-西部地区1--成员服务帐户:--角色/cloudfunctions.invoker
gcloud iam服务帐户密钥创建--iam帐户
当我使用调用者角色调用函数时,此操作失败:

gcloud身份验证激活服务帐户--密钥文件
gcloud beta函数调用--region=europe-west1--数据{}
错误:(gcloud.beta.functions.call)ResponseError:status=[403],code=[禁止],message=[调用方没有权限]
但是,当我切换到我的用户时,添加
角色/cloudfunctions.developer
角色,切换回服务帐户,上面的工作如下:

gcloud配置设置帐户
gcloud beta函数添加iam策略绑定--欧洲-西部地区1--成员服务帐户:--角色/cloudfunctions.developer
gcloud身份验证激活服务帐户--密钥文件
gcloud beta函数调用--region=europe-west1--数据{}
成功!
  • 这真的让我吃惊,我认为调用程序角色应该足够了。我错过了什么
  • 我想使用令牌通过curl访问函数,但这根本不起作用,无论是作为调用程序还是作为开发人员:

    echo$(GOOGLE\u APPLICATION\u CREDENTIALS=gcloud auth APPLICATION default print access token)>
    curl-H“授权:持票人美元(类别)”
    → 401未经授权的HTML页面
    
  • 这里有什么问题
  • 谢谢你的帮助!
    最好的办法是,Boris

    Google Cloud建议将此类请求视为最终用户请求,即在使用调用者角色访问云函数时,通过传递授权头(带有承载令牌)来使用OAuth2.0。详细信息如下

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

    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)"
    
    gcloud身份验证激活服务帐户
    gcloud auth打印标识令牌
    卷曲https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME \
    -H“授权:持票人$(gcloud auth打印身份令牌)”
    
    FWIW…我重新创建了您的真实故事,也不理解调用程序不够用的原因。如下所示,
    gcloud beta函数调用…
    似乎需要额外的权限。太好了,可以了!它还回答了问题#1:使用
    gcloud beta函数调用函数需要开发人员角色。
    ,但调用程序对于您的版本已经足够了。谢谢!