【问题标题】:Google Cloud Function not created with Private access未使用私有访问权限创建的 Google Cloud 函数
【发布时间】:2019-11-29 00:20:48
【问题描述】:

我正在使用我的 python 脚本创建 Google Cloud HTTP 函数,如下所示:

gcloud beta 函数部署“ + function_name +” --runtime go111 --trigger-http --memory 128 --region " + cloud_region + " --source " + function_path + " --service-account " + my_service_account

允许未经身份验证的新函数调用 [执行功能测试]? (是/否)?否

警告:使用默认 IAM 策略创建的函数。启用 未经授权的访问考虑“gcloud alpha 功能 add-iam-policy-binding function_name --region=us-central1 --member=allUsers --role=roles/cloudfunctions.invoker"

然后当我这样做时:

gcloud beta 函数 get-iam-policy function_name

我得到以下输出:

bindings:
- members:
  - allUsers
  role: roles/cloudfunctions.invoker
etag: BwWOGyVdpDg=
version: 1

为什么“allUsers”是这里的成员?

文档https://cloud.google.com/functions/docs/securing/authenticatinghttps://cloud.google.com/functions/docs/securing/managing-access 说:

所有云功能都是私有部署的,这意味着 在不提供身份验证的情况下无法访问它们 请求中的凭据。

默认情况下,HTTP 函数只能由项目所有者调用, 编辑,以及 Cloud Functions 管理员和开发人员。

但我可以使用简单的 curl 命令或 Postman 客户端访问 Cloud Function URL,而无需来自项目外部的任何凭据。

什么可能导致 Cloud Function 拥有“allUsers”成员并且可以公开访问?

【问题讨论】:

  • 附带问题:你有没有找到一种方法来自动化并对这个问题说“N”。我没有看到可以做到这一点的命令行标志
  • @Thomas 我没有找到自动说 N 的方式
  • 我从 google dev 邮件列表中获得了解决方案:对于布尔标志,您可以使用 --no-flag-name 作为 --flag-name 的反面。在这种情况下,您应该可以使用--no-allow-unauthenticated。见cloud/sdk/gcloud/reference/topic/command-conventions。 (来源:克里斯·格伯)
  • 根据我的理解,部署云函数后,您可以在不提供任何令牌的情况下调用它,对吧?您能否提供有关如何调用云功能的更多详细信息? -allUsers 角色:roles/cloudfunctions.invoker,表示任何拥有 cloudfunctions.invoker 角色的用户都可以调用 CF,但这并不意味着它是不受限制的公开的。

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


【解决方案1】:

新的 IAM 功能是 beta 命令集的一部分。您正在使用通用部署 (GA) 命令。删除你的函数,然后使用gcloud beta functions deploy ...

【讨论】:

  • 嗨,约翰,我已经更新了问题。当我使用 beta 命令集时,我仍然在云功能中获得allUsers 成员。这可能是什么原因造成的?
  • 你是不是先删除了函数?要么您在重新部署之前没有删除该函数,要么在某一时刻您包含了命令行选项--allow-unauthenticated,这就是 GA 命令的情况。
  • 这是一个新功能。它以前不存在。
  • @user5155835 那我不知道。您使用的是哪个版本的gcloud?您的信息中缺少某些内容。作为一种解决方法,只需删除 allUsers IAM 成员。
  • 版本:Google Cloud SDK 254.0.0beta 2019.05.17core 2019.07.15
【解决方案2】:

您可以使用下一个命令设置访问权限

https://cloud.google.com/sdk/gcloud/reference/alpha/functions/add-iam-policy-binding

并删除下一个用户的所有用户

https://cloud.google.com/sdk/gcloud/reference/alpha/functions/remove-iam-policy-binding

示例: gcloud alpha 函数 add-iam-policy-binding function_name --region=us-central1 --member=user:your.email@gmail.com --role=roles/cloudfunctions.invoker

gcloud alpha 函数 remove-iam-policy-binding function_name --region=us-central1 --member=allUsers --role=roles/cloudfunctions.invoker

【讨论】:

    【解决方案3】:

    http 函数的 allUsers 权限是默认行为。您可以(也许应该!)通过以下方式删除 iam 权限:

    gcloud alpha functions remove-iam-policy-binding ...
    

    此 HTTP 函数的默认行为将在 2019 年 11 月 1 日之后发生变化。目前,新的 HTTP 函数默认允许未经身份验证的调用。 2019 年 11 月 1 日之后创建的新 HTTP 函数默认需要身份验证。您可以指定函数是否允许在部署时或部署后进行未经身份验证的调用。

    Source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多