【问题标题】:Authenticating request from Cloud Functions to Google Endpoints with Service Account使用服务帐户对从 Cloud Functions 到 Google Endpoints 的请求进行身份验证
【发布时间】:2020-03-03 03:39:53
【问题描述】:

我有一个简单的云功能,它是由在FirebaseAuth 上创建一个新用户触发的,它向在谷歌Kubernetes Engine 上运行的服务发出一个POST 请求以及一个ESP( Google 端点)。

据我所知,通过阅读"Authentication between services",我应该能够通过分配与具有服务帐户令牌创建者角色的服务帐户相关的安全定义来定义服务到服务身份验证。 我将如何使用服务帐户对这个请求进行身份验证,以便只有这个函数可以发出这个请求?此服务帐户是否可以以某种方式归因于该功能?请指导我解决这个问题。

谢谢!

【问题讨论】:

  • 答案需要更多信息。您正在使用 POST 到 Kubernetes 服务的什么服务?一些服务具有内置的 OAuth 身份功能(Cloud Scheduler、Cloud Run、Cloud Functions 等)。对于这些服务,您只需设置一个命令行选项。对于其他服务,您需要请求身份令牌(计算引擎)或使用 Google OAuth API 创建一个。最终结果是您的 Kubernetes 服务将需要处理包含 OAuth 身份令牌的 HTTP Authorization: Bearer TOKEN 标头。
  • 如何配置你的 k8s 集群?哪些服务正在通信?您是否使用服务网格层进行服务到服务身份验证?
  • @JohnHanley POST 请求是由云函数完成的,我在问题的开头就这么说了。
  • @guillaumeblaquiere 这与问题有什么关系?这只是云功能和端点(Google Endpoints)之间的身份验证。
  • 说“我的云功能”和说我正在使用谷歌云功能是有区别的。清晰是好问题的关键组成部分。然后我的评论有你的答案。 Cloud Functions 支持命令行选项/配置选项--service-account。这设置了函数使用的标识。另一方面,您需要验证 HTTP 标头中收到的令牌。 cloud.google.com/sdk/gcloud/reference/functions/deploy

标签: google-cloud-platform google-cloud-functions google-cloud-endpoints


【解决方案1】:

这个服务帐户能否以某种方式归因于该功能?请指导我解决这个问题。

在函数执行期间,Cloud Functions 使用服务帐号 PROJECT_ID@appspot.gserviceaccount.com 作为其身份。但是,您可以为您的函数分配它自己的标识。您可以使用具有正确角色的服务帐户部署您的云功能。

然后该函数使用服务帐户的私钥对安全的 JSON Web Token (JWT) 进行签名,并在请求中将签名的 JWT 发送到您的 API。

您将通过在您的 OpenAPI 文档中添加服务帐户作为颁发者来配置您的 API 以支持身份验证。

在 ESP 将请求转发到您的 API 之前,ESP 会验证:签名、颁发者声明、受众声明和令牌。

这样只有这个函数可以发出api请求。

这里你可以找到官方文档Function IdentityAuthentication between services

【讨论】:

  • 是的,这个解决方案似乎是正确的,我现在正在尝试实施它。
  • 如果此答案对您有帮助,请将其标记为已接受,以提高社区的知名度。
【解决方案2】:

Cloud Functions 默认使用 App Engine 服务帐户。

为了实现这一点,您需要遵循以下四个步骤:

1) 将服务帐号添加到 Cloud IAP 保护项目的访问权限list

2) 生成基于 JWT 的access token

3) 为受 Cloud IAP 保护的客户端 ID 请求 OIDC 令牌

4) 在 Authorization: Bearer 标头中包含 OIDC 令牌,以向 Cloud IAP - 安全应用程序发出经过身份验证的请求

Here 您可以查看详细说明这些步骤的指南和一些代码示例,以实现默认服务帐户的编程授权。

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2017-08-30
    • 2019-11-06
    • 2018-11-25
    相关资源
    最近更新 更多