使用 IAM 控管存取權

根據預設,只有專案擁有者和編輯者可以建立、更新、刪除或叫用服務和工作;只有專案擁有者和 Cloud Run 管理員可以修改 Identity and Access Management (IAM) 政策,例如公開服務。詳情請參閱 Cloud Run IAM 角色

如要讓其他主體或群組能夠執行這些動作,請使用 IAM角色授予不同的主體

如果您已使用 gcloud functions 指令或 Cloud Functions v2 API 建立或部署函式,且需要使用這些選項來維持向後相容性,請參閱「使用 IAM 控管存取權」。

Cloud Run 預先定義角色

與基本角色 (擁有者、編輯者和檢視者) 相比,下列預先定義角色可提供更精細的存取權控管機制,用於存取 Cloud Run 資源:

角色 說明
Cloud Run 管理員 (roles/run.admin) 可建立、更新及刪除服務和工作,可取得、列出及刪除工作執行作業。
可叫用服務和工作,可取消工作執行作業。
可取得及設定 IAM 政策。
可查看、套用及關閉建議
需要額外設定才能部署服務。
Cloud Run 開發人員 (roles/run.developer) 可建立、更新及刪除服務和工作,可取得、列出及刪除工作執行作業。
可取得,但能設定 IAM 政策。
可查看、套用及略過建議
Cloud Run 檢視器 (roles/run.viewer) 可查看服務、工作和工作執行作業。
可取得 IAM 政策。
可查看最佳化建議
Cloud Run 叫用者 (roles/run.invoker) 可叫用服務和工作,並取消工作執行作業。

控管個別服務或工作的存取權

您可以使用 IAM 按服務或工作控管存取權。

新增主體

您可以將使用者代管單位新增至工作或服務。

為服務新增主體

如要為服務新增擁有者,請按照下列步驟操作:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出要新增擁有者權限的服務,然後勾選旁邊的核取方塊。(請勿點選服務本身)。

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

  4. 按一下「新增主體」

  5. 在「New principals」(新主體) 欄位中,輸入一或多個需要服務存取權的身分。

  6. 從「角色」下拉式選單中選取一或多個角色。您選取的角色會顯示在面板中,系統還會針對這些角色所授予的權限提供簡短說明。

  7. 按一下 [儲存]

gcloud

使用 gcloud run services add-iam-policy-binding 指令:

gcloud run services add-iam-policy-binding SERVICE_NAME \
  --member=PRINCIPAL \
  --role=ROLE

其中 SERVICE_NAME 是服務名稱、PRINCIPAL 是主體 (例如 user:email@domain.com),而 ROLE 是角色。

如需 PRINCIPAL 可接受的值清單,請參閱「主要識別碼」。如需 ROLE 的許可值清單,請參閱 Cloud Run IAM 角色

為工作新增主體

如要將主體新增至工作,請按照下列步驟操作:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出要新增管理員的工作,然後按一下左側的核取方塊。(請勿點選工作本身)。

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

  4. 按一下「新增主體」

  5. 在「New principals」(新增主體) 欄位中,輸入需要存取工作內容的一或多個身分。

  6. 從「角色」選單中選取一或多個角色。您選取的角色會顯示在面板中,系統還會針對這些角色所授予的權限提供簡短說明。

  7. 按一下 [儲存]

gcloud

使用 gcloud run jobs add-iam-policy-binding 指令:

gcloud run jobs add-iam-policy-binding JOB_NAME \
  --member=PRINCIPAL \
  --role=ROLE

其中 JOB_NAME 是工作名稱、PRINCIPAL 是主要類型 (例如 user:email@domain.com),而 ROLE 是角色。

如需 PRINCIPAL 的可接受值清單,請參閱 IAM 概念頁面。如需 ROLE 的許可值清單,請參閱 Cloud Run IAM 角色

從角色中移除主體

您可以從服務或工作中移除使用者。

從服務的角色中移除主體

如要從服務的角色中移除主體:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出要移除實體的服務,然後按一下該服務左側的核取方塊。(請勿點選服務本身)。

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

  4. 在角色清單篩選器中輸入要移除的主體,系統會顯示授予該主體的所有角色。

  5. 按一下所需角色內主體旁的「delete」垃圾桶圖示,即可從主體中移除該角色。

  6. 在確認對話方塊中,您可以選擇從服務中的所有角色中移除該主體。按一下「移除」,即可從角色中移除主體。

gcloud

使用 gcloud run services remove-iam-policy-binding 指令:

  gcloud run services remove-iam-policy-binding SERVICE_NAME \
    --member=PRINCIPAL \
    --role=ROLE

其中 SERVICE_NAME 是服務名稱、PRINCIPAL 是主體類型 (例如 user:email@domain.com),而 ROLE 是角色。

如需 PRINCIPAL 的可接受值清單,請參閱 IAM 概念頁面。如需 ROLE 的許可值清單,請參閱 Cloud Run IAM 角色

從工作角色中移除主體

如要從工作角色中移除主體,請按照下列步驟操作:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出要新增管理員的工作,然後按一下左側的核取方塊。(請勿點選工作本身)。

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

  4. 在角色清單篩選器中輸入要移除的主體,系統會顯示授予該主體的所有角色。

  5. 按一下所需角色內主體旁的「delete」垃圾桶圖示,即可從主體中移除該角色。

  6. 在確認對話方塊中,您可以選擇從工作中的所有角色中移除該主體。按一下「移除」,即可從角色中移除主體。

gcloud

使用 gcloud run jobs remove-iam-policy-binding 指令:

  gcloud run jobs remove-iam-policy-binding JOB_NAME \
    --member=PRINCIPAL \
    --role=ROLE

其中 JOB_NAME 是工作名稱、PRINCIPAL 是主要類型 (例如 user:email@domain.com),而 ROLE 是角色。

如需 PRINCIPAL 的可接受值清單,請參閱 IAM 概念頁面。如需 ROLE 的許可值清單,請參閱 Cloud Run IAM 角色

大量新增或移除主要使用者

您可以為服務和工作進行大量新增或移除作業。

大量新增及移除服務的使用者主體

如要為服務大量新增或移除項目,請按照下列步驟操作:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 按一下要新增或移除實體的服務左側核取方塊。(請勿點選服務本身)。

  3. 選取要新增或移除主體的服務。

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

如要新增主體:

  1. 按一下「新增主體」

  2. 在「New principals」(新主體) 欄位中,輸入一或多個需要服務存取權的身分。

  3. 從「角色」選單中選取一或多個角色。您選取的角色會顯示在面板中,系統還會針對這些角色所授予的權限提供簡短說明。

  4. 按一下 [儲存]

如要移除主體:

  1. 在角色清單篩選器中輸入要移除的主體,系統會顯示授予該主體的所有角色。

  2. 按一下所需角色內主體旁的「delete」垃圾桶圖示,即可從主體中移除該角色。

  3. 在確認對話方塊中,您可以選擇從服務中的所有角色中移除該主體。按一下「移除」,即可從角色中移除主體。

gcloud

建立身分與存取權管理政策:

cat <<EOF > policy.json
{
  "bindings": [
    {
      "role": ROLE,
      "members": [
        PRINCIPAL
      ]
    }
  ]
}
EOF

使用 gcloud run services set-iam-policy 指令:

gcloud run services set-iam-policy SERVICE_NAME policy.json

如需 PRINCIPAL 的可接受值清單,請參閱 IAM 概念頁面。如需 ROLE 的許可值清單,請參閱 Cloud Run IAM 角色

大量新增及移除工作主體

如要為工作進行大量新增或移除作業,請按照下列步驟操作:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出要新增管理員的工作,然後按一下左側的核取方塊。(請勿點選工作本身)。

  3. 選取要新增或移除管理員的工作。

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

如要新增主體:

  1. 按一下「新增主體」

  2. 在「New principals」(新主體) 欄位中,輸入一或多個需要服務存取權的身分。

  3. 從「角色」選單中選取一或多個角色。您選取的角色會顯示在面板中,系統還會針對這些角色所授予的權限提供簡短說明。

  4. 按一下 [儲存]

如要移除主體:

  1. 在角色清單篩選器中輸入要移除的主體,系統會顯示授予該主體的所有角色。

  2. 按一下所需角色內主體旁的「刪除」垃圾桶圖示,從主體中移除該角色。

  3. 在確認對話方塊中,您可以選擇從工作中的所有角色中移除該主體。按一下「移除」,即可從角色中移除主體。

gcloud

建立身分與存取權管理政策:

cat <<EOF > policy.json
{
  "bindings": [
    {
      "role": ROLE,
      "members": [
        PRINCIPAL
      ]
    }
  ]
}
EOF

使用 gcloud run jobs set-iam-policy 指令:

gcloud run jobs set-iam-policy JOB_NAME policy.json

如需 PRINCIPAL 的可接受值清單,請參閱 IAM 概念頁面。如需 ROLE 的許可值清單,請參閱 Cloud Run IAM 角色

查看主體

您可以查看服務和工作的主體。

查看服務的使用者

如要查看服務的服務主体,請按照下列步驟操作:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出要查看的服務,然後按一下該服務左側的核取方塊,查看實體和角色。(請勿點選服務本身)。

  3. 選取要查看的服務、主要使用者和角色。

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

  5. 系統會顯示角色和主體清單,並按授予的角色分組。

gcloud

使用 gcloud run services get-iam-policy 指令:

gcloud run services get-iam-policy SERVICE_NAME

查看工作的主體

如何查看工作的原則:

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出要新增管理員的工作,然後按一下左側的核取方塊。(請勿點選工作本身)。

  3. 選取要查看的作業、主體和角色。

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

  5. 系統會顯示角色和主體清單,並按授予的角色分組。

gcloud

使用 gcloud run jobs get-iam-policy 指令:

gcloud run jobs get-iam-policy JOB_NAME

控管專案中所有服務和工作的存取權

如果您想要將角色授予專案中所有服務和工作項的主體,可以使用專案層級 IAM

主控台使用者介面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 找出您要授予整個專案角色的主體。

  3. 按一下主體資料列右側的編輯 [Pencil] (鉛筆) 圖示。

  4. 按一下「Add another role」(新增其他角色),然後選取所需角色。

  5. 按一下 [儲存]

gcloud

使用 gcloud projects add-iam-policy-binding 指令:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=PRINCIPAL \
  --role=ROLE

其中 PRINCIPAL 是主要角色 (例如 user:email@domain.com),而 ROLE 是角色 (例如 roles/run.admin)。

allUsersallAuthenticatedUsers 主要類型無法套用至專案層級,必須個別新增至各個服務。

將服務設為公開

這個選項適用於公開 API 或網站的 Cloud Run 服務。

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

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

停用 Cloud Run 叫用者 IAM 檢查

如要建立公開服務,建議您停用 Cloud Run 叫用者 IAM 檢查。系統預設會強制執行檢查。特別是如果專案須遵守機構政策中的網域限定共用限制,這就是解決問題的最佳方法。

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

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

這些權限包含在「擁有者」和「Cloud Run 管理員」角色中。如需角色和相關權限的完整清單,請參閱 Cloud Run IAM 角色

停用 Cloud Run 叫用者 IAM 檢查

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

控制台

  1. 前往 Cloud Run

  2. 如果您要設定新服務,請按一下「Create Service」(建立服務),然後視需要填寫初始服務設定頁面。如果要設定現有服務,請按一下該服務,然後點選「安全性」

  3. 取消勾選「使用 IAM 驗證傳入要求」

  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 叫用者 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 叫用者身分與存取權管理檢查設定機構政策

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

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

您可以將 Cloud Run 叫用者 IAM 角色指派給 allUsers 成員類型,藉此允許未經驗證的服務叫用。

您必須具備 run.services.setIamPolicy 權限,才能在 Cloud Run 服務上設定驗證機制。此權限包含在「Owner」和「Cloud Run Admin」角色中。如需角色和相關權限的完整清單,請參閱 Cloud Run IAM 角色

主控台使用者介面

針對現有的 Cloud Run 服務:

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

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

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

  4. 按一下「新增主體」

在「New principals」欄位中輸入值 allUsers

  1. 從「角色」下拉式選單中,選取「Cloud Run Invoker」角色。

  2. 按一下 [儲存]

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

如要建立新服務,請建立服務,但請務必在「Authentication」分頁中選取「Allow unauthenticated invocations」,以便公開發布服務。選取「需要驗證」會將服務設為私人。

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

在服務上使用 IAM 條件

您可以使用 IAM 條件,為 Cloud Run 資源定義及強制執行條件式、以屬性為基礎的存取權控管。Cloud Run 支援 (request.host) 和 (request.path) 條件屬性,可在叫用 Cloud Run 服務時授予條件式存取權。

  • 如要在叫用 Cloud Run 服務時,使用 request.hostrequest.path 屬性授予條件式存取權,請在執行下列指令時新增 condition 欄位:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
     --member=PRINCIPAL \
     --role=ROLE \
     --region=REGION \
     --condition=[KEY=VALUE,...]
    

    取代:

    • SERVICE_NAME 與服務名稱 (例如 my-service)。
    • PRINCIPAL 與主要內容 (例如 user:email@domain.com)。
    • ROLE 與角色 (例如 roles/run.invoker)。
    • REGION 與地區 (例如 us-central1)。
    • KEY=VALUE 包含要納入繫結的條件--condition 旗標必須包含鍵/值組合 expressiontitle

後續步驟

瞭解如何針對您剛才保護的服務,安全驗證開發人員、服務和使用者