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

此选项适用于用作公共 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 服务的博文。