【发布时间】: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/authenticating 和https://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