使用 IAM 进行访问权限控制

默认情况下,只有项目所有者和编辑者可以创建、更新、删除或调用服务和作业;只有项目所有者和 Cloud Run 管理员可以修改 Identity and Access Management (IAM) 政策(例如公开服务)。如需了解详情,请参阅 Cloud Run IAM 角色

如需向其他主账号或群组授予执行这些操作的权限,请使用 IAM 为不同主账号授予角色

Cloud Run 预定义角色

与基本角色(Owner、Editor 和 Viewer)相比,以下预定义角色具有用于访问 Cloud Run 资源的更精细的访问权限控制:

角色 说明
Cloud Run Admin (roles/run.admin) 可以创建、更新和删除服务和作业,可以获取、列出、删除作业执行。
可以调用服务和作业,可以取消作业执行。
可以获取和设置 IAM 政策。
可以查看、应用和忽略建议
需要额外配置才能部署服务。
Cloud Run Developer (roles/run.developer) 可以创建、更新和删除服务和作业,可以获取、列出、删除作业执行。
可以获取,但不能设置 IAM 政策
可以查看、应用和忽略建议
Cloud Run Viewer (roles/run.viewer) 可以查看服务、作业和作业执行。
可以获取 IAM 政策。
可以查看建议
Cloud Run Invoker (roles/run.invoker) 可以调用服务和作业,可以取消作业执行。

控制对个别服务或作业的访问权限

您可以使用 IAM 按服务或作业控制访问权限。

使某个服务可供公开访问

此选项适用于用作公共 API 或网站的 Cloud Run 服务。

您可以允许在未通过身份验证的情况下调用服务,方法是为 allUsers 成员类型分配 Cloud Run IAM Invoker 角色。

您必须具有 run.services.setIamPolicy 权限才能在 Cloud Run 服务上配置身份验证。Owner 和 Cloud Run Admin 角色均拥有这项权限。如需查看角色及其关联权限的完整列表,请参阅 Cloud Run IAM 角色

控制台界面

对于现有 Cloud Run 服务:

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要公开的服务左侧的复选框。(请勿点击服务本身。)

  3. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

  4. 点击添加主账号

新的主账号字段中,输入值 allUsers

  1. “角色”下拉菜单中,选择 Cloud Run Invoker 角色。

  2. 点击保存

  3. 系统会提示您确认是否要公开此资源。点击允许公开访问将更改应用到服务的 IAM 设置。

若要创建新服务,请点击创建服务,但务必选中身份验证标签页中的允许未通过身份验证的调用复选框,以使该服务可供公开访问。如果选择需要身份验证,则会将服务设为不公开。

gcloud

如需使服务可公开访问,请使用 gcloud run services 命令向服务添加特殊 allUsers 成员类型并向其授予 roles/run.invoker 角色:

  gcloud run services add-iam-policy-binding [SERVICE_NAME] \
    --member="allUsers" \
    --role="roles/run.invoker"

运行 gcloud run deploy 命令以在部署服务时使服务可公开访问:

gcloud run deploy [SERVICE_NAME] ... --allow-unauthenticated

YAML

创建一个名为 policy.yaml 的文件,其中包含以下内容:

bindings:
- members:
  - allUsers
  role: roles/run.invoker

使用以下命令允许对现有 SERVICE 进行未经身份验证的调用:

gcloud run services set-iam-policy SERVICE policy.yaml

Terraform

如需创建 Cloud Run 服务,请将以下内容添加到现有 main.tf 文件中:

resource "google_cloud_run_v2_service" "default" {
  name     = "public-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }
}

如需针对 roles/run.invoker 更新服务 IAM 绑定,请添加引用 Cloud Run 服务的以下资源:

resource "google_cloud_run_service_iam_binding" "default" {
  location = google_cloud_run_v2_service.default.location
  service  = google_cloud_run_v2_service.default.name
  role     = "roles/run.invoker"
  members = [
    "allUsers"
  ]
}

此绑定仅针对给定角色授权。服务 IAM 政策中的其他 IAM 绑定均会予以保留。

网域限定共享

默认情况下,如果项目受组织政策中网域限定共享限制的约束,您将无法创建公共服务。您可以使用标记和条件政策来避免特定服务受到此限制条件的约束。如需了解详情,请参阅关于在实施网域限定共享时创建公共 Cloud Run 服务的博文。

添加主账号

您可以向作业或服务添加主账号。

向服务添加主账号

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

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要向其添加主账号的服务旁边的复选框。(请勿点击服务本身。)

  3. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

  4. 点击添加主账号

  5. 新的主账号字段中,输入需要访问服务的一个或多个身份。

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

  7. 点击保存

gcloud

使用 gcloud run services add-iam-policy-binding 命令:

gcloud run services add-iam-policy-binding SERVICE_NAME \
  --member=MEMBER_TYPE \
  --role=ROLE

其中,SERVICE_NAME 是服务名称,MEMBER_TYPE 是主账号类型(例如 user:email@domain.com),ROLE 是角色。

如需查看 MEMBER_TYPE 可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE 可接受的值列表,请参阅 Cloud Run IAM 角色

向作业添加主账号

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

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)

  3. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

  4. 点击添加主账号

  5. 新的主账号文本框中,输入需要访问您作业的一个或多个身份。

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

  7. 点击保存

gcloud

使用 gcloud run jobs add-iam-policy-binding 命令:

gcloud run jobs add-iam-policy-binding JOB_NAME \
  --member=MEMBER_TYPE \
  --role=ROLE

其中,JOB_NAME 是作业名称,MEMBER_TYPE 是主账号类型(例如 user:email@domain.com),ROLE 是角色。

如需查看 MEMBER_TYPE 可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE 可接受的值列表,请参阅 Cloud Run IAM 角色

从角色中移除主账号

您可以从服务或作业中移除主账号。

从服务的角色中移除主账号

如需从服务的角色中移除主账号,请执行以下操作:

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要从中移除主账号的服务左侧的复选框。(请勿点击服务本身。)

  3. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

  4. 在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。

  5. 点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。

  6. 在确认对话框中,您可以选择从该服务的所有角色中移除该主账号。点击移除,从角色中移除主账号。

gcloud

使用 gcloud run services remove-iam-policy-binding 命令:

  gcloud run services remove-iam-policy-binding SERVICE_NAME \
    --member=MEMBER_TYPE \
    --role=ROLE

其中,SERVICE_NAME 是服务名称,MEMBER_TYPE 是主账号类型(例如 user:email@domain.com),ROLE 是角色。

如需查看 MEMBER_TYPE 可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE 可接受的值列表,请参阅 Cloud Run IAM 角色

从作业的角色中移除主账号

如需从作业的角色中移除主账号,请执行以下操作:

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)

  3. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

  4. 在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。

  5. 点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。

  6. 在确认对话框中,您可以选择从该作业的所有角色中移除该主账号。点击移除,从角色中移除主账号。

gcloud

使用 gcloud run jobs remove-iam-policy-binding 命令:

  gcloud run jobs remove-iam-policy-binding JOB_NAME \
    --member=MEMBER_TYPE \
    --role=ROLE

其中,JOB_NAME 是作业名称,MEMBER_TYPE 是主账号类型(例如 user:email@domain.com),ROLE 是角色。

如需查看 MEMBER_TYPE 可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE 可接受的值列表,请参阅 Cloud Run IAM 角色

批量添加或移除主账号

您可以对服务和作业执行批量添加或移除操作。

批量添加和移除服务的主账号

如需为服务批量添加或移除服务,请执行以下操作:

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要添加或移除主账号的服务左侧的复选框。(请勿点击服务本身。)

  3. 选择要添加或移除主账号的服务。

  4. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

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

  1. 点击添加主账号

  2. 新的主账号文本框中,输入需要访问您服务的一个或多个身份。

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

  4. 点击保存

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

  1. 在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。

  2. 点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。

  3. 在确认对话框中,您可以选择从该服务的所有角色中移除该主账号。点击移除,从角色中移除主账号。

gcloud

创建 IAM 政策:

cat <<EOF > policy.json
{
  "bindings": [
    {
      "role": ROLE,
      "members": [
        MEMBER_TYPE
      ]
    }
  ]
}
EOF

使用 gcloud run services set-iam-policy 命令:

gcloud run services set-iam-policy SERVICE_NAME policy.json

如需查看 MEMBER_TYPE 可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE 可接受的值列表,请参阅 Cloud Run IAM 角色

批量添加和移除作业的主账号

如需针对作业执行批量添加或移除操作,请执行以下操作:

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)

  3. 选择要添加或移除主账号的作业。

  4. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

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

  1. 点击添加主账号

  2. 新的主账号文本框中,输入需要访问您服务的一个或多个身份。

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

  4. 点击保存

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

  1. 在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。

  2. 点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。

  3. 在确认对话框中,您可以选择从该作业的所有角色中移除该主账号。点击移除,从角色中移除主账号。

gcloud

创建 IAM 政策:

cat <<EOF > policy.json
{
  "bindings": [
    {
      "role": ROLE,
      "members": [
        MEMBER_TYPE
      ]
    }
  ]
}
EOF

使用 gcloud run jobs set-iam-policy 命令:

gcloud run jobs set-iam-policy JOB_NAME policy.json

如需查看 MEMBER_TYPE 可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE 可接受的值列表,请参阅 Cloud Run IAM 角色

查看主账号

您可以查看服务和作业的主账号。

查看服务的主账号

如需查看服务的主账号,请执行以下操作:

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要查看其主账号和角色的服务左侧的复选框。(请勿点击服务本身。)

  3. 选择要查看主账号和角色的服务。

  4. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

  5. 此时将显示角色和主账号列表,并按授予的角色进行分组。

gcloud

使用 gcloud run services get-iam-policy 命令:

gcloud run services get-iam-policy SERVICE_NAME

查看作业的主账号

如需查看作业的主账号,请执行以下操作:

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)

  3. 选择要查看主账号和角色的作业。

  4. 在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限

  5. 此时将显示角色和主账号列表,并按授予的角色进行分组。

gcloud

使用 gcloud run jobs get-iam-policy 命令:

gcloud run jobs get-iam-policy JOB_NAME

控制对项目中所有服务和作业的访问权限

如果您想要针对项目中的所有服务和作业向主账号授予角色,可以使用项目级 IAM

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找到您要授予项目级层角色的主账号。

  3. 点击该主账号所在行右侧的修改按钮(铅笔图标)。

  4. 点击添加其他角色并选择所需的角色。

  5. 点击保存

gcloud

使用 gcloud projects add-iam-policy-binding 命令:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=MEMBER_TYPE \
  --role=ROLE

其中,MEMBER_TYPE 是主账号类型(例如 user:email@domain.com),ROLE 是角色(例如 roles/run.admin)。

allUsersallAuthenticatedUsers 主账号类型不能应用于项目级层,必须单独添加到每项服务。

为服务停用 Cloud Run Invoker

您可以为任何 Cloud Run 服务停用或重新启用 Cloud Run Invoker IAM 检查。默认情况下,系统会强制执行该检查。

如需为服务停用或重新启用 Invoker IAM 检查,您必须拥有以下权限:

  • run.services.create
  • run.services.update
  • run.services.setIamPolicy

Owner 和 Cloud Run Admin 角色均可提供这些权限。如需查看角色及其关联权限的完整列表,请参阅 Cloud Run IAM 角色

停用 Cloud Run Invoker IAM 检查

  1. 根据需要在组织或项目级层替换组织政策限制条件 constraints/run.requireInvokerIam。您可以使用标记为特定 Cloud Run 服务设置更精细的规则。

    如需从 Google Cloud 控制台中移除政策限制条件,请执行以下操作:

    1. 转到 IAM

    2. 点击组织政策标签页。

    3. 找到 Allow Invoker IAM Disabled (Cloud Run) 政策,然后从“操作”菜单中选择修改政策

    4. 确保将该政策配置为未实施

    5. 点击设置政策

  2. 停用检查:

    控制台

    1. 转到 Cloud Run

    2. 如果您要配置新服务,请点击创建服务,然后根据需要填写初始服务设置页面。如果您要配置现有服务,请点击该服务,然后点击安全性

    3. 清除使用 Cloud IAM 对传入请求进行身份验证

    4. 点击创建保存

    gcloud

    • 使用 --no-invoker-iam-check 标志:

      gcloud run deploy SERVICE_NAME --no-invoker-iam-check

      其中,SERVICE_NAME 是服务名称。

    YAML

    1. 如需查看和下载配置,请运行以下命令:

      gcloud run services describe SERVICE --format export > service.yaml
    2. 更新 run.googleapis.com/invoker-iam-disabled: 注释:

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
         annotations:
            run.googleapis.com/invoker-iam-disabled: true
         name: SERVICE_NAME

      其中,SERVICE_NAME 是您的 Cloud Run 服务的名称。

    3. 使用以下命令将服务的配置替换为新配置:

      gcloud run services replace service.yaml

前往服务的 HTTPS 端点,验证检查是否已在部署后停用。

重新启用 Cloud Run Invoker IAM 检查

如需重新启用检查,请执行以下操作:

控制台

  1. 转到 Cloud Run

  2. 点击相应服务,然后点击安全性

  3. 选择使用 Cloud IAM 对传入请求进行身份验证

  4. 点击保存

gcloud

  • 通过传递 --invoker-iam-check 标志来更新服务:

    gcloud beta run services SERVICE_NAME --invoker-iam-check

    其中,SERVICE_NAME 是服务名称。

YAML

  1. 如需查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 run.googleapis.com/invokerIamCheckDisabled: 注释:

    apiVersion: serving.knative.dev/v1
     kind: Service
     metadata:
        annotations:
           run.googleapis.com/invokerIamCheckDisabled: false
        name: SERVICE_NAME

    其中,SERVICE_NAME 是 Cloud Run 服务的名称。

前往服务的 HTTPS 端点,验证检查是否已在部署后重新启用。

后续步骤

了解如何以安全的方式向您刚刚添加保护措施的服务对开发者、服务和用户进行身份验证