启用对非公共 Google Cloud Function 的令牌访问

2024-02-03

我想部署一个没有公共访问权限的 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!
  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 建议将此类请求视为最终用户请求,即在使用调用者角色访问云函数时通过传递授权标头(带有不记名令牌)来使用 OAuth2.0。详细信息是here https://cloud.google.com/functions/docs/securing/authenticating#developers

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

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)"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启用对非公共 Google Cloud Function 的令牌访问 的相关文章

随机推荐

  • 无法在 p:media 中显示从 Primefaces 中的流内容生成的 PDF

    我正在尝试显示在新浏览器窗口中打开的内联 PDF 我有以下场景 在由ajax调用的一些ActionListen中 我生成PDF内容 将数据放入会话中 并发送要执行的Javascript window open打开新页面以显示 PDF 在打开
  • 如果日期带有前导零,则 getDay() 返回错误的日期[重复]

    这个问题在这里已经有答案了 我在使用 javascript 时遇到了这个问题 我从数据库中获取 yyyy mm dd 日期 但是当我想使用 getDay 获取星期几时 如果这一天带有前导零 我会得到错误的数字 我写了一个可能的解决方案来将
  • 在 LinkedIn 上分享 描述字段未显示在新用户界面中

    用户在新用户界面上通过 LinkedIn API 上的共享发布的帖子最多会显示在其帐户上 用户消息 评论 图像 标题和链接域 但是 有关在 LinkedIn API 上共享的文档 https developer linkedin com d
  • 搜索视图未显示在工具栏中

    我实际上在支持 AppCompat v7 lib 24 0 0 上的 Searchview 有问题 SearchView 不显示任何文本和输入文本 看屏幕截图 搜索查询工作完美 这是我的菜单 menu menu
  • 无法以 null 启动服务 [服务名称]

    我最近编写了一个 Android Widget 并在模拟器和我的 Galaxy S 上进行了测试 它在两者上都运行良好 在我将其发布到 Android 市场后 现在我收到了一些错误报告 我在 Widget 类的 onUpdate 中声明一个
  • Azure 函数无法启动 - “未响应端口 X 上的 HTTP ping”(Docker/VNet)

    我真的很难弄清楚如何设置使用 Docker 容器映像并连接到 VNet 的 Azure Function 我在任何地方都找不到此设置的任何示例 我遇到的主要问题是 在我的容器启动并运行后 它似乎没有响应底层框架用于确定该功能是否启动并运行的
  • codechef 和 spoj 问题中使用的 modulo 10^9+7 有何意义?

    我正在研究一个问题 http www codechef com SEPT14 problems CHEFLR它需要输出为 对于每行输出答案模 10 9 7 为什么是模 10 9 7包含在问题中吗 其意义何在 我不是在寻找问题的解决方案 仅该
  • 进度条与文件解压

    我正在尝试更新progress bar将文件解压缩到 SD 卡中 我的解压工作正常 但是progress bar没有出现 这是我在 mainactivity 中的代码 private ProgressBar bar Override pub
  • ORM 解决方案(JPA;Hibernate)与 JDBC

    我需要能够以每 5 秒至少 8000 个对象的一致速率在内存 HSQL 数据库中插入 更新对象 我在 Spring Hibernate JPA 和纯 JDBC 之间做了一些性能对比测试 我发现使用 HSQL 的性能有显着差异 使用 Spri
  • Silverlight:FrameworkElement.FindName() 在浏览器窗口中不“可见”时找不到控件

    我遇到一个问题 我使用 FrameworkElement 对象的 FindName 方法来搜索该元素的子控件 我注意到了一些有趣的行为 但似乎无法弄清楚 如果用户滚动浏览器窗口 使得控件本身在窗口框架的上下文中不再明显显示 则 FindNa
  • “let”类陷入无限循环

    请原谅代码中的任何愚蠢错误 因为这是我第一次尝试使用类 而且我在网上找不到任何真正将其放入其中的教程 really对于像我这样的傻瓜来说 简单的术语 我尽力遵循 MS 指南 https msdn microsoft com en us li
  • c:forEach 在 tomcat 7 中不起作用

    我使用创建了简单的页面c forEach标签 它在 tomcat 6 中工作 但是not working tomcat 7 使用 JSF 2 0 开发简单的 Web 应用程序 我在 tomcat 6 中运行我的代码 它可以工作 我部署在 t
  • 为什么 Array.Copy 支持长参数

    来自MSDN http msdn microsoft com en us library btfeahds VS 80 aspx 参数 源数组 包含数据的数组 复制 目的地数组 接收数据的数组 长度 一个 64 位整数 表示 要复制的元素数
  • 使用数据源将文本添加到组合框

    我有一个 vaadin 组合框 里面装有容器数据源 setContainerDataSource container 我现在想在结果列表中的某处插入静态文本 例如 一个组合框充满了一个容器 结果列表中弹出的第一个条目是某种标题 Person
  • 从 python 字典列表中选择单个字段

    假设我有一个字典列表 如下所示 dictionList 1 Type Cat Legs 4 2 Type Dog Legs 4 3 Type Bird Legs 2 使用 for 循环 我想迭代列表 直到捕获带有 a 的字典Type场等于
  • CSS:增加上边距

    我正在尝试以楼梯类型的方式错开 div 类 所以它看起来像这样 1 2 3 4 编辑 我想更改上边距 以便 process div 的每个位置都低于之前的位置 我让它们浮动 这样它们就可以并排坐着 但我也希望每个 div 都比上一个更低 我
  • FastText 使用预先训练的词向量进行文本分类

    我正在研究文本分类问题 也就是说 给定一些文本 我需要为其分配某些给定的标签 我尝试过使用 Facebook 的快速文本库 它有两个我感兴趣的实用程序 A 带有预训练模型的词向量 B 文本分类实用程序 然而 这些似乎是完全独立的工具 因为我
  • Overpass api 来查找坐标的速度限制?

    我收到车辆的坐标 我需要找出该车辆所在道路的速度限制 我知道你可以找到某个有界框的最大速度 如下所示 www overpass api de api xapi 最大速度 bbox 5 6283473 50 5348043 5 6285261
  • 通过 JQuery 选择 select 中的选项

    我有一个包含以下选项的选择
  • 启用对非公共 Google Cloud Function 的令牌访问

    我想部署一个没有公共访问权限的 Google Cloud Function 服务帐户应该能够以最少的权限调用该功能 由外部服务器使用 我已经创建了一个服务帐户 添加了绑定并下载了密钥 gcloud iam service accounts