使用 IAM 授予访问权限

您可以使用 Identity and Access Management 授权身份对使用 Cloud Functions v2 API 创建的函数执行管理操作,例如使用 gcloud functions、REST API 或 Terraform 执行操作。管理操作包括创建、更新和删除函数。如需了解通过 Cloud Run 创建的函数的 IAM 访问权限,请参阅使用 IAM 进行访问权限控制

在 IAM 中,您可以为主账号(您要启用的身份,通常是用户或服务账号电子邮件)授予函数或项目的相应 IAM 角色。这些角色拥有的权限可定义允许主账号执行的操作。

准备工作

如需获得控制项目中特定函数或所有函数的访问权限所需的权限,请让管理员向您授予函数或项目的 Cloud Functions Admin (roles/function.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含 cloudfunctions.functions.setIamPolicy 权限,若要控制项目中特定函数或所有函数的访问权限,则需要该权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

如需查看 Cloud Run 函数角色及其关联权限的完整列表,请参阅 Cloud Run 函数 IAM 角色

启用对函数的访问

您可以使用 IAM 通过向个别身份授予或限制角色来控制对函数的操作。

添加主账号并授予角色

控制台

  1. 转到 Google Cloud 控制台:

    转到 Google Cloud 控制台

  2. 点击您感兴趣的函数旁边的复选框。

  3. 点击屏幕顶部的权限。此时权限面板会打开。

  4. 点击添加主账号

  5. 新主账号字段中,输入需要访问您的函数的一个或多个身份。它通常是用户或服务账号电子邮件地址。

  6. 选择角色下拉菜单中选择一个或多个角色。 您选择的角色将显示在窗格中,其中包含对角色授予的权限的简短说明。

  7. 点击保存

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 角色参考页面

从主账号中移除角色

控制台

  1. 转到 Google Cloud 控制台:

    转到 Google Cloud 控制台

  2. 点击您感兴趣的函数旁边的复选框。

  3. 点击屏幕顶部的权限。此时权限面板会打开。

  4. 搜索您要移除的主账号。查看主账号被授予的每个角色。

  5. 找到拥有您要删除的主账号的成员后,点击成员旁边的垃圾箱图标。如果您希望完全移除主账号的访问权限,请对授予主账号的每个角色执行此操作。

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 角色参考页面

如果主账号已被授予多个角色,请务必指定您要移除的角色。

批量添加主账号

控制台

  1. 转到 Google Cloud 控制台:

    转到 Google Cloud 控制台

  2. 点击您要针对其授予或限制访问权限的函数旁边的复选框。

  3. 点击屏幕顶部的权限。此时权限面板会打开。

如需添加主账号,请执行以下操作:

  1. 点击添加主账号

  2. 新的主账号字段中,输入需要访问您的函数的多个身份。

  3. 选择角色下拉菜单中选择一个或多个角色。 您选择的角色将显示在窗格中,其中包含对角色授予的权限的简短说明。

  4. 点击保存

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 角色参考页面

查看主账号

控制台

  1. 转到 Google Cloud 控制台:

    转到 Google Cloud 控制台

  2. 点击您感兴趣的函数的名称。

  3. 选择权限标签页。此时权限面板会打开。

  4. 选择按主账号查看标签页,以查看具有所选函数访问权限的所有主账号的列表。

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 \
...

后续部署相同函数并不会更改其状态,即使您不使用此标志也是如此。

部署后

控制台

  1. 转到 Google Cloud 控制台:

    转到 Google Cloud 控制台

  2. 点击您要授予访问权限的函数的链接名称。

  3. 点击函数详细信息概览页面右上角的由 Cloud Run 提供支持链接。

  4. 打开安全标签页,然后在身份验证下,选择允许未通过身份验证的调用

  5. 点击保存

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"

如需了解有关这些字段的详情,请参阅 gcloud run add-iam-policy-binding 参考文档

受网域限制的共享

如果您在一个需要遵守“网域限定共享”组织政策的项目中开发函数,您将无法允许未经身份验证的函数调用。此政策限制公开数据共享,以降低数据渗漏的风险。

如果您希望部署允许未经身份验证调用的函数,我们建议您移除项目的“网域限定共享”组织政策。您可以在组织、文件夹或项目级层设置组织政策。

创建完允许未经身份验证调用的函数后,可以重新启用该组织政策:

  • 在重新启用组织政策之前部署的函数将继续允许未经身份验证的调用。
  • 您可以部署这些现有函数的新版本(不要求必须先经过身份验证才能调用)。
  • 您无法部署允许未经身份验证调用的新函数。