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

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

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

必要的角色

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

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

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

停用 Cloud Run Invoker IAM 檢查

如要建立公開服務,建議停用 Cloud Run 叫用者 IAM 檢查。Cloud Run 預設會強制執行這項檢查。如果專案須遵守機構政策中的網域限定共用限制,請使用這個解決方案。

如要停用檢查:

控制台

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

    前往 Cloud Run

  2. 如要設定新服務,請按一下「建立服務」,然後視需要填寫初始服務設定頁面。

    如要設定現有服務,請按一下該服務,然後按一下「安全性」分頁。

  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

部署完成後,請前往服務的 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 呼叫端 IAM 檢查的機構政策

如果您是管理員,可以使用 constraints/run.managed.requireInvokerIam 受管理限制,限制停用 Invoker 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 頁面:

    前往 Google Cloud 控制台

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

  3. 在右上角的資訊窗格中,按一下「權限」分頁標籤。如果資訊窗格未顯示,您可能需要按一下「顯示資訊面板」,然後按一下「權限」

  4. 按一下「新增主體」

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

  1. 從「Select a role」(請選擇角色) 選單中,選取「Cloud Run Invoker」(Cloud Run 叫用者) 角色。

  2. 按一下 [儲存]

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

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

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