使用 IAM 授予访问权限
您可以使用 Identity and Access Management (IAM) 来授权身份对您的函数执行管理操作,例如创建、更新和删除函数。您可以将主帐号(您想启用的身份,通常是用户或服务帐号电子邮件)添加到函数,然后为这些主帐号授予适当的 IAM 角色。这些角色拥有的权限可定义允许他们执行的操作。
启用对函数的访问
您可以使用 IAM 通过向个别身份授予或限制角色来控制对函数的操作。
添加主帐号并授予角色
控制台
转到 Google Cloud 控制台:
点击您感兴趣的函数旁边的复选框。
点击屏幕顶部的权限。此时权限面板会打开。
点击添加主帐号。
在新主帐号字段中,输入需要访问您的函数的一个或多个身份。它通常是用户或服务帐号电子邮件地址。
从选择角色下拉菜单中选择一个或多个角色。 您选择的角色将显示在窗格中,其中包含对角色授予的权限的简短说明。
点击保存。
GCloud
使用 gcloud functions add-iam-policy-binding
命令:
gcloud functions add-iam-policy-binding FUNCTION_NAME \ --member=PRINCIPAL_ID \ --role=ROLE
其中,FUNCTION_NAME
是函数名称,PRINCIPAL_ID
是主帐号的标识符(通常是电子邮件),ROLE
是角色。
如需查看可以提供 PRINCIPAL_ID
的来源列表,请参阅 IAM 概念页面。如需查看 ROLE
的可接受值列表,请参阅 Cloud Functions IAM 角色参考页面。
从主帐号中移除角色
控制台
转到 Google Cloud 控制台:
点击您感兴趣的函数旁边的复选框。
点击屏幕顶部的权限。此时权限面板会打开。
搜索您要移除的主帐号。查看主帐号被授予的每个角色。
找到拥有您要删除的主帐号的成员后,点击成员旁边的垃圾箱图标。如果您希望完全移除主帐号的访问权限,请对授予主帐号的每个角色执行此操作。
GCloud
使用 gcloud functions remove-iam-policy-binding
命令:
gcloud functions remove-iam-policy-binding FUNCTION_NAME \ --member=PRINCIPAL_ID \ --role=ROLE
其中,FUNCTION_NAME
是函数名称,PRINCIPAL_ID
是用于标识服务帐号的电子邮件地址,前面带有 serviceAccount:
且 ROLE
是角色。
如需查看 PRINCIPAL_ID
可接受的来源列表,请参阅 IAM 概念页面。如需查看 ROLE
的可接受值列表,请参阅 Cloud Functions IAM 角色参考页面。
如果主帐号已被授予多个角色,请务必指定您要移除的角色。
批量添加或移除主帐号
控制台
转到 Google Cloud 控制台:
点击您要针对其授予或限制访问权限的函数旁边的复选框。
点击屏幕顶部的权限。此时权限面板会打开。
如果要添加主帐号,请执行以下操作:
点击添加主帐号。
在新主帐号中,输入需要访问您的函数的多个身份。
从选择角色下拉菜单中选择一个或多个角色。 您选择的角色将显示在窗格中,其中包含对角色授予的权限的简短说明。
点击保存。
如果要移除主帐号,请执行以下操作:
搜索要移除的主帐号,或展开主帐号具有的某个角色。
找到您要删除的主帐号后,请点击该主帐号旁边的垃圾桶图标。如果您希望完全移除主帐号的访问权限,请对授予主帐号的每个角色执行此操作。
GCloud
创建一项 IAM 政策并为其命名,例如 policy.json
:
{ "bindings": [ { "role": ROLE, "members": [ PRINCIPAL_ID ] } ] }
使用 gcloud functions set-iam-policy
命令:
gcloud functions set-iam-policy FUNCTION_NAME policy.json
如需查看 PRINCIPAL_ID
可接受的来源列表,请参阅 IAM 概念页面。如需查看 ROLE
的可接受值列表,请参阅 Cloud Functions IAM 角色参考页面。
查看主帐号
控制台
转到 Google Cloud 控制台:
点击您感兴趣的函数的名称。
选择权限标签页。此时权限面板会打开。
确保主帐号标签页处于选中状态。
GCloud
使用 gcloud functions get-iam-policy
命令:
gcloud functions get-iam-policy FUNCTION_NAME
允许未经身份验证的 HTTP 函数调用
自 2020 年 1 月 15 日起,未启用允许未经身份验证的调用的 HTTP 函数将会限制没有适当权限的最终用户和服务帐号的访问。
如需允许未通过身份验证的调用,您必须在部署时或部署后指定。
您可以使用上述方法的特殊变体向未经身份验证的调用者授予调用 HTTP 函数的权限。
部署时
控制台
在配置面板的身份验证部分中,选择允许未通过身份验证的调用。
GCloud
gcloud functions deploy
命令包含一条提示,可帮助您在创建函数期间配置调用权限。它还可以包含 --allow-unauthenticated
标志:
gcloud functions deploy FUNCTION_NAME \ --trigger-http \ --allow-unauthenticated \ ...
后续部署相同函数并不会更改其状态,即使您不使用此标志也是如此。
部署后
Cloud Functions(第 1 代):
要允许对函数进行未经身份验证的调用,请将 Cloud Functions Invoker 角色授予函数的特殊 allUsers
主帐号:
控制台
转到 Google Cloud 控制台:
点击接收函数旁边的复选框。(请勿点击函数本身。)
点击屏幕顶部的权限。此时权限面板会打开。
点击添加主帐号。
在新建主帐号字段中,输入
allUsers
。从选择角色下拉菜单中选择 Cloud Functions > Cloud Functions Invoker 角色。
在对话框中,点击允许公开访问。
GCloud
使用 gcloud functions add-iam-policy-binding
命令将 roles/cloudfunctions.invoker
角色授予函数上的特殊 allUsers
主帐号:
gcloud functions add-iam-policy-binding FUNCTION_NAME \ --member="allUsers" \ --role="roles/cloudfunctions.invoker"
Cloud Functions(第 2 代):
控制台
转到 Google Cloud 控制台:
点击您要授予访问权限的函数的链接名称。
点击函数详细信息概览页面右上角的由 Cloud Run 提供支持链接。
打开安全标签页,然后在身份验证下,选择允许未通过身份验证的调用。
点击保存。
GCloud
使用 gcloud run services add-iam-policy-binding
命令向特定函数授予 roles/run.invoker
角色。
gcloud run services add-iam-policy-binding FUNCTION_NAME \ --member="user:USER_EMAIL"\ --role="roles/run.invoker"
受网域限制的共享
如果您在一个需要遵守“网域限定共享”组织政策的项目中开发函数,您将无法允许未经身份验证的函数调用。此政策限制公开数据共享,以降低数据渗漏的风险。
如果您希望部署允许未经身份验证调用的函数,我们建议您移除项目的“网域限定共享”组织政策。您可以在组织、文件夹或项目级层设置组织政策。
创建完允许未经身份验证调用的函数后,可以重新启用该组织政策:
- 在重新启用组织政策之前部署的函数将继续允许未经身份验证的调用。
- 您可以部署这些现有函数的新版本(不要求必须先经过身份验证才能调用)。
- 您无法部署允许未经身份验证调用的新函数。
控制对项目中所有函数的访问
如果您想为项目中的所有函数授予角色,可以对项目授予这些角色。