允許公開 (未經驗證) 存取

建立公開 Cloud Run 服務的方法有兩種:

  • 停用 Cloud Run 叫用者 IAM 檢查 (建議)。
  • 將 Cloud Run 叫用者 IAM 角色指派給 allUsers 成員類型。

必要的角色

如要停用或重新啟用服務的叫用者 IAM 檢查,您必須具備下列權限:

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

Cloud Run 管理員 (roles/run.admin) 角色具備這些權限。請參閱「Cloud Run IAM 角色」,取得完整的角色清單和相關聯的權限。

停用 Cloud Run 叫用者 IAM 檢查

如要建立公開服務,建議您停用 Cloud Run 叫用者 IAM 檢查。Cloud Run 預設會執行這項檢查。如果專案受組織政策中的網域限制共用限制約束,請使用這項解決方案。

如要停用檢查,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「Cloud Run」頁面:

    前往 Cloud Run。

  2. 從 Cloud Run 導覽選單中選取「Services」(服務):

    1. 如要設定新服務,請按一下「Deploy container」(部署容器),然後填寫初始服務設定頁面。

    2. 如要設定現有服務,請按一下該服務,然後按一下「Security」(安全性) 分頁標籤。

  3. 選取「允許公開存取」。

  4. 按一下「建立」,建立新服務。依序點選「查看差異並重新部署」和「部署變更」,即可更新現有服務。

gcloud

  • 如為新服務,請使用 gcloud run deploy 指令,並加上 --no-invoker-iam-check 旗標:

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

    將 SERVICE_NAME 替換為服務名稱。

  • 如為現有服務,請使用 gcloud run services update 指令,並加上 --no-invoker-iam-check 旗標:

    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

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = true

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

更改下列內容:

  • SERVICE:Cloud Run 服務的名稱。
  • REGION: Google Cloud 區域,例如 europe-west1。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果使用 Artifact Registry,則必須預先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

部署後,請前往服務的 HTTPS 端點,確認檢查功能已停用。

重新啟用 Cloud Run 叫用者 IAM 檢查

如要重新啟用檢查功能,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:

    前往 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 服務名稱。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = false

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

更改下列內容:

  • SERVICE:Cloud Run 服務的名稱。
  • REGION: Google Cloud 區域,例如 europe-west1。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果使用 Artifact Registry,則必須預先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

前往服務的 HTTPS 端點,確認部署後是否重新啟用檢查。

設定 Cloud Run 叫用者 IAM 檢查的組織政策

如果您是管理員,可以使用 constraints/run.managed.requireInvokerIam 代管限制,限制停用叫用者 IAM 檢查的功能。預設不會強制執行這項限制。

將 Cloud Run IAM 叫用者角色指派給 allUsers 成員類型

您可以將 Cloud Run 叫用者 IAM 角色指派給 allUsers 成員類型,允許公開存取服務。

您必須具備 run.services.setIamPolicy 權限,才能在 Cloud Run 服務上設定驗證。Cloud Run 管理員角色具備這項權限。請參閱「Cloud Run IAM 角色」,取得完整的角色清單和相關聯的權限。

控制台

現有 Cloud Run 服務:

  1. 前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:

    前往 Google Cloud 控制台

  2. 在要公開的服務左側,按一下核取方塊。請勿點選服務本身。

  3. 在右上角的資訊窗格中,按一下「Permissions」(權限) 分頁標籤。如果看不到資訊窗格,可能需要按一下「Show Info Panel」(顯示資訊面板),然後點選「Permissions」(權限)。

  4. 按一下「Add principal」(新增主體)。

在「New principals」(新增主體) 欄位中輸入 allUsers。

  1. 在「Select a role」(選取角色) 選單中,選取「Cloud Run Invoker」角色。

  2. 按一下 [儲存]。

  3. 系統會提示您確認是否要將這項資源設為公開。按一下「Allow public access」(允許公開存取),將變更套用至服務 IAM 設定。

如要建立新服務,請建立服務,並在「Authentication」(驗證) 專區中選取「Allow public access」(允許公開存取),公開提供服務。如要將服務設為私人,請選取「Require authentication」(需要驗證)。

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 繫結則會保留。