【问题标题】:Authentication in HTTP Google Cloud FunctionsHTTP Google Cloud Functions 中的身份验证
【发布时间】:2018-07-09 22:33:29
【问题描述】:

https://cloud.google.com/solutions/authentication-in-http-cloud-functions

文档建议设置一个 Google Cloud Storage 存储分区。然后设置服务帐户对存储桶的权限“storage.buckets.get”。

然后使用此权限来验证对 http Google Cloud Functions 的访问。

我们正在讨论对 http 云功能进行身份验证,但我们是从 Google Cloud Storage 借用权限。在我看来,这是一个 hack 解决方案。

如果我们可以通过 Google Cloud Console 为每个 Cloud Function 设置权限,那就太好了。

你们在使用谷歌在上述文档中建议的身份验证解决方案吗?或者你有更好的方法?

设置“storage.buckets.get”,是否意味着我授予服务帐户“Storage Object Viewer”权限?

【问题讨论】:

  • “如果我们可以通过谷歌云控制台在每个云功能上设置权限,那就太好了”——这听起来像是一个功能请求。您可以直接向 Firebase 团队发送功能请求here

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


【解决方案1】:

你带来的link中提出的解决方案确实是其中一种方式。事实上,您可以使用任何其他 Google Cloud Platform 产品(不仅仅是存储桶)来检查所选帐户对其的权限。

另一种可行的方法是:

  1. 准备一个云函数,其中将列出授权用户的电子邮件。
  2. Cloud Function 检索传入 HTTP 请求的 'Authorization' 标头,其中包含为发出请求的帐户生成的令牌。
  3. 该函数调用tokeninfo endpoint 使用提到的标头来检索帐户的电子邮件(来自JSON 响应正文)。返回电子邮件的 url 如下所示:
url = "https://www.googleapis.com/oauth2/v1/tokeninfo?fields=email&access_token
    =" + token_from_the_request_header;
  1. 验证返回的电子邮件是否在授权列表中。
  2. ...如果是,则执行函数的逻辑。

【讨论】:

  • 假设我有一个 gcloud 函数 (API) https://us-central1-gcf.cloudfunctions.net/myapi 并希望在我自己的一些应用程序中使用它。我不认为您的意思是每个物理用户都必须登录 Google 才能使用它,对吧?在企业非云环境中,典型做法是为所有希望调用此函数的应用程序设置一个通用 LDAP 帐户。对于 gcloud,我们可以将其替换为通用 gmail 帐户,在阅读了上面的“tokeninfo 端点”之后,我的问题是如何指定这个通用 gmail 帐户说 CallFromApps@gmail.com 可以使用我的 GCF?
【解决方案2】:

要使用 Cloud Functions,您需要将模块放入存储桶中。授予账户“storage.buckets.get”对存储桶的权限,您授予服务账户授权以触发您的 HTTP Cloud Function;同样,您可以通过从另一个服务帐户中删除“storage.buckets.get”权限来撤销授权。

要设置‘storage.buckets.get’ permission,您需要通过标准角色选择“Storage Admin”,或者从旧角色中选择“Storage.legacyBucketReader”/“storage.legacyBucketWriter”,甚至使用“storage.buckets.get”选择define a custom role ' 许可。

【讨论】:

  • 不应该这样,我可以在桶、主题、发布/订阅上设置触发器,只要它们是 gcloud functions deploy 命令的 --trigger 键的正确值。跨度>
猜你喜欢
  • 2018-07-23
  • 2020-10-25
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 2019-04-19
  • 1970-01-01
相关资源
最近更新 更多