通过 IAM 授权访问权限

您可以使用身份和访问权限管理 (IAM) 来授权身份对您的函数执行管理操作,例如创建、更新和删除函数。您可以将主帐号(您想启用的身份,通常是用户或服务帐号电子邮件)添加到函数,然后为这些主帐号授予适当的 IAM 角色。这些角色拥有的权限可定义允许他们执行的操作。

启用对函数的访问

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

添加主帐号并授予角色

控制台

  1. 转到 Google Cloud Console:

    转到 Google Cloud Console

  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 Console:

    转到 Google Cloud Console

  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 Console:

    转到 Google Cloud Console

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

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

如果要添加主帐号,请执行以下操作:

  1. 点击添加主帐号

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

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

  4. 点击保存

如果要移除主帐号,请执行以下操作:

  1. 搜索要移除的主帐号,或展开主帐号具有的某个角色。

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

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 Console:

    转到 Google Cloud Console

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

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

部署后

要允许对函数进行未经身份验证的调用,请将 Cloud Functions Invoker 角色授予函数的特殊 allUsers 主帐号:

控制台

  1. 转到 Google Cloud Console:

    转到 Google Cloud Console

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

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

  4. 点击添加主帐号

  5. 新建主帐号字段中,输入 allUsers

  6. 选择角色下拉菜单中选择 Cloud Functions > Cloud Functions Invoker 角色。

  7. 点击保存

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"

受网域限制的共享

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

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

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

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

控制对项目中所有函数的访问

如果您想为项目中的所有函数授予角色,可以对项目授予这些角色