使用 IAM 授予访问权限
您可以使用 Identity and Access Management 授权身份对使用 Cloud Functions v2 API 创建的函数执行管理操作,例如使用 gcloud functions
、REST API 或 Terraform 执行操作。管理操作包括创建、更新和删除函数。如需了解通过 Cloud Run 创建的函数的 IAM 访问权限,请参阅使用 IAM 进行访问权限控制。
在 IAM 中,您可以为主账号(您要启用的身份,通常是用户或服务账号电子邮件)授予函数或项目的相应 IAM 角色。这些角色拥有的权限可定义允许主账号执行的操作。
准备工作
如需获得控制项目中特定函数或所有函数的访问权限所需的权限,请让管理员向您授予函数或项目的 Cloud Functions Admin (roles/roles/cloudfunctions.admin
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含 cloudfunctions.functions.setIamPolicy
权限,若要控制项目中特定函数或所有函数的访问权限,则需要该权限。
如需查看 Cloud Run functions 角色及其关联权限的完整列表,请参阅 Cloud Run functions IAM 角色。
启用对函数的访问
您可以使用 IAM 通过向个别身份授予或限制角色来控制对函数的操作。
添加主账号并授予角色
使用 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
的来源列表,请参阅主账号标识符。如需查看 ROLE
的可接受值列表,请参阅 Cloud Run functions IAM 角色参考页面。
从主账号中移除角色
使用 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
的可接受来源列表,请参阅主账号标识符。如需查看 ROLE
的可接受值列表,请参阅 Cloud Functions IAM 角色参考页面。
如果主账号已被授予多个角色,请务必指定您要移除的角色。
批量添加主账号
创建一项 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
的可接受来源列表,请参阅主账号标识符。如需查看 ROLE
的可接受值列表,请参阅 Cloud Functions IAM 角色参考页面。
查看主账号
如需查看主账号,请使用 gcloud functions get-iam-policy
命令:
gcloud functions get-iam-policy FUNCTION_NAME
允许未经身份验证的 HTTP 函数调用
自 2020 年 1 月 15 日起,未启用允许未经身份验证的调用的 HTTP 函数将会限制没有适当权限的最终用户和服务账号的访问。
如需允许未通过身份验证的调用,您必须在部署时或部署后指定。
您可以使用上述方法的特殊变体向未经身份验证的调用者授予调用 HTTP 函数的权限。
部署时
gcloud functions deploy
命令包含一条提示,可帮助您在创建函数期间配置调用权限。该命令还可以包含 --allow-unauthenticated
标志:
gcloud functions deploy FUNCTION_NAME \ --trigger-http \ --allow-unauthenticated \ ...
后续部署同一函数并不会更改其状态,即使您不使用此标志也是如此。
部署后
使用 gcloud run services add-iam-policy-binding
命令向特定函数授予 roles/run.invoker
角色:
gcloud run services add-iam-policy-binding FUNCTION_NAME \ --member="allUsers"\ --role="roles/run.invoker"
如需了解有关这些字段的详情,请参阅 gcloud run add-iam-policy-binding
参考文档。
受网域限制的共享
如果您在一个需要遵守“网域限定共享”组织政策的项目中开发函数,您将无法允许未经身份验证的函数调用。此政策限制公开数据共享,以降低数据渗漏的风险。
如果您希望部署允许未经身份验证调用的函数,我们建议您移除项目的“网域限定共享”组织政策。您可以在组织、文件夹或项目级层设置组织政策。
创建完允许未经身份验证调用的函数后,可以重新启用该组织政策:
- 在重新启用组织政策之前部署的函数将继续允许未经身份验证的调用。
- 您可以部署这些现有函数的新版本(不要求必须先经过身份验证才能调用)。
- 您无法部署允许未经身份验证调用的新函数。