允许公开(未通过身份验证)访问

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

您可以通过以下两种方式创建公共 Cloud Run 服务:

  • 停用 Cloud Run Invoker IAM 检查(推荐)。
  • allUsers 成员类型分配 Cloud Run Invoker IAM 角色。

停用 Cloud Run Invoker IAM 检查

建议您通过停用 Cloud Run Invoker IAM 检查来创建公开服务。默认情况下,系统会强制执行该检查。 如果项目受组织政策中网域限定共享限制的约束,此解决方案尤为适用。

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

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

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

停用 Cloud Run Invoker IAM 检查

如需停用检查,请执行以下操作:

控制台

  1. 转到 Cloud Run

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

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

  4. 点击创建保存

gcloud

  • 对于新服务,请使用带有 --no-invoker-iam-check 标志的 gcloud run deploy 命令:

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

    其中,SERVICE_NAME 是服务名称。

  • 对于现有服务,请使用带有 --no-invoker-iam-check 标志的 gcloud run services update 命令:

    gcloud run services update 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. 选择使用 IAM 对传入请求进行身份验证

  4. 点击保存

gcloud

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

    gcloud run services update SERVICE_NAME --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: false
        name: SERVICE_NAME

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

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

为 Cloud Run invoker IAM 检查配置组织政策

如果您是管理员,可以使用 constraints/run.managed.requireInvokerIam 受管理的限制条件来限制停用 Invoker IAM 检查的权限。默认情况下,系统不会强制执行此限制条件。

将 Cloud Run IAM Invoker 角色分配给 allUsers 成员类型

您可以允许在未通过身份验证的情况下调用服务,方法是为 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

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_service 资源:
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 绑定均会予以保留。