使用 IAM 控管存取權

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

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

如果您使用 gcloud functions 指令或 Cloud Functions 第 2 代 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. 按一下「Add principal」(新增主體)

  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 的可接受值清單,請參閱「主體 ID」。如需 ROLE 的可接受值清單,請參閱 Cloud Run IAM 角色

將主體新增至工作

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

主控台使用者介面

  1. 前往 Google Cloud 控制台

    前往 Google Cloud 控制台

  2. 找出要新增主體的作業,然後勾選左側的核取方塊。 (請勿點選工作本身)。

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

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

  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. 按一下所需角色內主體旁的「刪除」垃圾桶圖示,即可從主體移除該角色。

  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. 按一下所需角色內主體旁的「刪除」垃圾桶圖示,即可從主體移除該角色。

  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. 按一下「Add principal」(新增主體)

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

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

  4. 按一下 [儲存]

如要移除主體,請按照下列步驟操作:

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

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

  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. 按一下「Add principal」(新增主體)

  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. 按一下「新增其他角色」,然後選取所需角色。

  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 主體類型無法套用至專案層級,必須個別新增至各項服務。

公開服務

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

  • 停用 Cloud Run 叫用者 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

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 Invoker 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 受管理限制,限制停用 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「Services」(服務) 頁面:

    前往 Google Cloud 控制台

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

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

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

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

在服務上使用 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,並指定區域 (例如 europe-west1)。
    • KEY=VALUE,並在繫結中加入條件。--condition 旗標必須包含鍵/值組合 expressiontitle

後續步驟

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