如何通过身份验证从 Cloud Scheduler 调用 Cloud Function

2023-12-27

我到处都看了,似乎人们要么使用 pubsub、应用程序引擎 http 要么使用没有身份验证的 http。没有太多人展示他们通过使用 oidc 令牌进行身份验证来访问谷歌功能的工作。

我查了一下:无法从 GCP Scheduler 调用 Google Cloud Function https://stackoverflow.com/questions/60055422/cannot-invoke-google-cloud-function-from-gcp-scheduler但似乎没有任何效果。

我遵循的文档:https://cloud.google.com/scheduler/docs/http-target-auth#using-gcloud_1 https://cloud.google.com/scheduler/docs/http-target-auth#using-gcloud_1

  1. 创建了一个新的服务帐户
  2. 设置角色(云调度程序服务代理/云函数服务代理/云调度程序管理员/云函数调用者...甚至尝试过 所有者!)
  3. 部署的谷歌功能不允许公共(未经身份验证)访问(一个简单的 helloworld 功能)
  4. setup cron job on cloud scheduler to run every minute against the new deployed function with this configuration:
    • url = helloworld 函数
    • oidc 代币
    • 新创建的服务帐户
    • 观众设置为 hello world 函数 url

云调度程序日志的结果:

Expand all | Collapse all{
 httpRequest: {
 }
 insertId: "ibboa4fg7l1s9"  
 jsonPayload: {
  @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"   
  jobName: "projects/project/locations/region/jobs/tester"   
  status: "PERMISSION_DENIED"   
  targetType: "HTTP"   
  url: "https://region-project.cloudfunctions.net/tester"   
 }
 logName: "projects/project/logs/cloudscheduler.googleapis.com%2Fexecutions"  
 receiveTimestamp: "2020-04-15T17:50:14.287689800Z"  
 resource: {…}  
 severity: "ERROR"  
 timestamp: "2020-04-15T17:50:14.287689800Z" 

我看到一个解决方案显示有人创建了一个新项目来实现此目的,还有其他解决方案吗?

感谢所提供的任何帮助。

UPDATE

新的 Google 功能 - 在中央运行(与我的应用程序引擎应用程序相同) https://i.stack.imgur.com/8ZRRI.png

新服务帐户 - 带所有者角色 https://i.stack.imgur.com/30vXE.png

新计划任务 - 信息 https://i.stack.imgur.com/1Qtr3.png

新计划任务 - 状态 https://i.stack.imgur.com/60cRd.png

新计划任务 - 日志 https://i.stack.imgur.com/2tXjp.png

实际修复

如果您缺少 cloudscheduler 服务帐户(例如: service-1231231231412@gcp-sa-cloudscheduler.iam.gserviceaccount.com) Http 身份验证任务将无法工作。 为了解决这个问题,我必须禁用 api 并重新启用,它给了我服务帐户, 我没有使用这个服务帐户,但是,这是我执行此操作使其工作后唯一的变化因素。


这些是您必须采取的具体步骤。请务必不要跳过第二步,它会设置服务帐户的调用者权限,以便调度程序能够使用该服务帐户的 OIDC 信息调用 HTTP 云函数。注意:为了简单起见,我在这里选择默认服务帐户,但是,明智的做法是为此目的创建一个具有较少权限的单独服务帐户。

# Create cloud function
gcloud functions deploy my_function \
  --entry-point=my_entrypoint \
  --runtime=python37 \
  --trigger-http \
  --region=europe-west1 \
  --project=${PROJECT_ID}

# Set invoke permissions
gcloud functions add-iam-policy-binding my_function \
  --region=europe-west1 \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role="roles/cloudfunctions.invoker" \
  --project=${PROJECT_ID}

# Deploy scheduler
gcloud scheduler jobs create http my_job \
  --schedule="every 60 minutes" \
  --uri="https://europe-west1-${PROJECT_ID}.cloudfunctions.net/my_function/" \
  --http-method=POST \
  --oidc-service-account-email="${PROJECT_ID}@appspot.gserviceaccount.com" \
  --oidc-token-audience="https://europe-west1-${PROJECT_ID}.cloudfunctions.net/my_function" \
  --project=${PROJECT_ID}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过身份验证从 Cloud Scheduler 调用 Cloud Function 的相关文章

随机推荐

  • 如何将 XDebug zend_extension 添加到 php.ini?

    我有一个带有 cPanel WHM 的 VPS 并且正在尝试启用 XDebug 我通过以下方式安装了扩展程序WHM gt Software gt Module Installers gt PHP Pecl gt Manage我通过检查我的p
  • 如何替换数组的元素?

    如何替换数组中的元素 a 1 2 3 4 5 我需要将 5 替换为 11 22 33 44 flatten so that a现在变成 a 1 2 3 4 11 22 33 44 不确定您是否想要替换特定值 但这有效 a 1 2 3 4 5
  • 如何获取 crtdbg.h 文件?

    我在用MinGW http en wikipedia org wiki MinGW GCC Eclipse http en wikipedia org wiki Eclipse 28software 29在 Windows 上 我遇到了这个
  • 如何悬停固定元素直到到达某个点

    我有一个 div 需要将其固定在屏幕底部 直到滚动到某个点并停在那里并停留 如果用户开始向后滚动 在经过同一点后再次将其固定 关于如何实现这一点有什么想法吗 编辑 这是我当前的代码 不起作用 window scroll function i
  • SQl:从文本文件更新表

    这是我必须做的 我有一个包含 3 列的文本文件 PID X Y 现在我的数据库中有两个表 Table 1包含 4 列 UID PID X Y Table 2包含多列 必需的列是UID X Y 我需要更新Table 2具有相应的 X 和 Y
  • 如何用正则表达式模式替换文本并在替换文本中集成计数器?

    function parse string counter 0 string preg replace b b si span class b counter 1 span string 1 counter return string 我正
  • ggplot2 中两种不同颜色美学映射的不同调色板

    我的问题非常类似于this https stackoverflow com questions 15363035 ggplot2 how to specify multiple fill colors for points that are
  • D3 旭日。如何设置不同的环\层宽度

    帮助 我已经搜索了很长时间 但没有找到任何与此相关的信息 我基本上希望能够设置 D3 sunburst 中每个图层的大小 像素 相对 我不介意 我猜这可以在数据或基于数字或父母的代码中完成 我有一个旭日纹 希望内环占据大部分空间 而外环只是
  • 存储过程 azure Cosmos DB 返回空集合

    我尝试使用 Azure 文档中的示例 sp 创建代码创建存储过程 但无法获取集合详细信息 它总是返回 null 存储过程 SAMPLE STORED PROCEDURE function sample prefix var collecti
  • 拖动 JPanel

    我在尝试拖动 JPanel 时遇到问题 如果我纯粹在 MouseDragged 中将其实现为 public void mouseDragged MouseEvent me me getSource setLocation me getX m
  • MongoDB 字段数组搜索(C#,如何?)

    请告诉我如何通过字段数组进行搜索 我有一些类型的字段List
  • 我应该修改 String 的原型吗?

    我本来打算在 javascript 中创建一个修剪函数 但由于我不想重新发明轮子 所以我在谷歌上搜索了这个方法 我找到了这个链接http www somacon com p355 php http www somacon com p355
  • 比较两个对象(不包括一些属性)的最快方法?

    我有一个网站 用户将数据上传到其中 我只想更新属性已更改的数据 因此 我正在比较 2 个相同类型的对象的更改 并且我需要排除一些属性 例如 ModifiedOn 日期 这是迄今为止我使用反射的代码 private bool hasChang
  • 无法在Jboss EAP 7.0服务器中创建oracle数据源

    我需要在JBOSS EAP 7 0服务器中创建oracle数据源 我部署了ojdbc6 jar从 JBOSS 管理 CLI 命令行界面 使用以下命令 deploy
  • 计算时差超过 24 小时

    我遇到一个问题 我试图计算以秒为单位的时间差 然后在报告 访问报告 中我将总结这些秒并将其格式化为 hh nn ss 但是 我收集两个字段之间的时间差的计算字段有时会超过 24 小时 从而消除了时间差 我正在使用 DateDiff 函数 D
  • 有关 EF Code First Fluent API、TPH 和外键的困难

    我的数据库中有两个表 一种叫做Users 另一个称为Widgets The Widgets表代表我的代码模型中的 3 个实体 其中一个实体 Widget 是其他两个实体的父类 WidgetTypeA and WidgetTypeB Both
  • g++ 编译和链接选项

    也许是天真的问题 g 是否有单独的编译和链接选项列表 我的意思是一个显示哪些选项用于编译 哪些选项用于链接的列表 gcc 手册说这些是链接选项 http gcc gnu org onlinedocs gcc Link Options htm
  • 如何在长时间运行的功能期间更新 UI(文本字段)?

    我知道这个问题可能没有意义 而且我很难想出一种方法来解释它 所以我将展示一段代码来提供帮助 我在 Visual Studio Express 2010 上使用 Winforms private void button1 object sen
  • 用于可变长度记录存储和仅在主键上搜索的磁盘查找的数据结构/算法

    我正在寻找一种适用于基于大型块的设备 例如机械硬盘驱动器 的算法 数据结构 该结构针对插入 获取 更新和删除进行了优化 其中搜索始终使用数据的 id 进行 并且数据在何处任何 ID 的字段都有可变长度 B Tree 似乎是一种常用的结构 但
  • 如何通过身份验证从 Cloud Scheduler 调用 Cloud Function

    我到处都看了 似乎人们要么使用 pubsub 应用程序引擎 http 要么使用没有身份验证的 http 没有太多人展示他们通过使用 oidc 令牌进行身份验证来访问谷歌功能的工作 我查了一下 无法从 GCP Scheduler 调用 Goo