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

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

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

所需的角色

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

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

这些权限包含在 Cloud Run Admin 角色 (roles/run.admin) 中。如需查看角色及其关联权限的完整列表,请参阅 Cloud Run IAM 角色

停用 Cloud Run Invoker IAM 检查

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

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

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run 页面:

    转到 Cloud Run

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

    如果您要配置现有服务,请点击该服务,然后点击安全性标签页。

  3. 选择允许公开访问

  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. 在 Google Cloud 控制台中,前往 Cloud Run 页面:

    转到 Cloud Run

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

  3. 选择需要身份验证,然后选择 Identity and Access Management (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 Invoker IAM 角色。

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

控制台

对于现有 Cloud Run 服务:

  1. 在 Google Cloud 控制台中,前往 Cloud Run 页面。

    前往 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 绑定均会予以保留。