使用 IAM 控管存取權

根據預設,只有專案擁有者和編輯者可以建立、更新、刪除或叫用 Cloud Run 資源,且只有專案擁有者和 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) 可建立、更新及刪除服務、工作和 worker 集區,以及取得、列出及刪除工作執行作業。
可叫用服務和工作,以及取消工作執行作業。
可取得及設定 IAM 政策。
可查看、套用及關閉建議。
必須額外設定才能部署服務。
Cloud Run 開發人員 (roles/run.developer) 可建立、更新及刪除服務、工作和 worker 集區,以及取得、列出及刪除工作執行作業。
可取得但無法設定 IAM 政策。
可查看、套用及關閉建議。
Cloud Run 檢視者 (roles/run.viewer) 可查看服務、工作、工作執行作業和 worker 集區。
可取得 IAM 政策。
可查看建議。
Cloud Run 叫用者 (roles/run.invoker) 可叫用服務和工作,以及取消工作執行作業。
Cloud Run 原始碼開發人員 (roles/run.sourceDeveloper) 可部署及管理 Cloud Run 原始碼部署的資源。
Cloud Run 建構者 (roles/run.builder) 可建構 Cloud Run functions 和原始碼部署的服務。
Cloud Run 服務叫用者 (roles/run.servicesInvoker) 可叫用 Cloud Run 服務。
Cloud Run 工作執行者 (roles/run.jobsExecutor) 可執行及取消 Cloud Run 工作。
Cloud Run 工作執行者 (具備覆寫權限) (roles/run.jobsExecutorWithOverrides) 可執行及取消具有覆寫機制的 Cloud Run 工作。

控管個別 Cloud Run 資源的存取權

您可以使用 IAM,依 服務、工作、worker 集區或執行個體 控管存取權。

新增主體

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

控制台

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

    前往 Cloud Run

  2. 找出要新增主體的服務,然後勾選旁邊的核取方塊。請勿點選服務本身。
  3. 在右上角的資訊窗格中,按一下「Permissions」(權限) 分頁標籤。如果沒有看到資訊窗格,請按一下「顯示資訊面板」,然後點選「權限」。
  4. 按一下「Add principal」(新增主體)。
  5. 在「New principals」(新主體) 欄位中,輸入需要存取服務的一或多個身分。
  6. 從「Assign roles」(指派角色) 下拉式選單中選取一或多個角色。面板中會顯示選取的角色,並針對這些角色授予的權限提供簡短說明。
  7. 按一下 [儲存]。

gcloud

使用下列指令:

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

更改下列內容:

  • SERVICE_NAME:服務名稱。
  • PRINCIPAL:主體類型 (例如 user:email@domain.com)。如需 PRINCIPAL 的可接受值清單,請參閱「主體 ID」。
  • ROLE:角色。如需 ROLE 的可接受值清單,請參閱「Cloud Run IAM 角色」。

從角色中移除主體

如要移除服務角色的主體,請按照下列步驟操作:

控制台

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

    前往 Cloud Run

  2. 找出要移除主體的服務,然後勾選旁邊的核取方塊。請勿點選服務本身。
  3. 按一下右上角資訊窗格中的「Permissions」(權限) 分頁標籤。如果沒有看到資訊窗格,請按一下「顯示資訊面板」,然後點選「權限」。
  4. 在角色清單篩選器中輸入要移除的主體,系統會顯示授予該主體的所有角色。
  5. 在所需角色中,按一下主體旁邊的「刪除」垃圾桶圖示,即可從主體中移除該角色。
  6. 在確認對話方塊中,您可以選擇將該主體從服務中的所有角色中移除。按一下「Remove」(移除),即可從角色中移除主體。

gcloud

使用下列指令:

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

更改下列內容:

  • SERVICE_NAME:服務名稱。
  • PRINCIPAL:主體類型 (例如 user:email@domain.com)。如需 PRINCIPAL 的可接受值清單,請參閱「主體 ID」。
  • ROLE:角色。如需 ROLE 的可接受值清單,請參閱「Cloud Run IAM 角色」。

大量新增或移除主體

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

控制台

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

    前往 Cloud Run

  2. 找出要新增或移除主體的服務,然後勾選左側的核取方塊。請勿點選服務本身。
  3. 選取要新增或移除主體的服務。
  4. 按一下右上角資訊窗格中的「Permissions」(權限) 分頁標籤。如果沒有看到資訊窗格,請按一下「顯示資訊面板」,然後點選「權限」。

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

  1. 按一下「Add principal」(新增主體)。
  2. 在「New principals」(新主體) 欄位中,輸入需要存取服務的一或多個身分。
  3. 在「Assign roles」(指派角色) 選單中,選取一或多個角色。 面板中會顯示選取的角色,並針對這些角色授予的權限提供簡短說明。
  4. 按一下 [儲存]。

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

  1. 在角色清單篩選器中,輸入要移除的主體,系統會顯示授予該主體的所有角色。
  2. 按一下主體資料列中的「刪除」垃圾桶圖示。
  3. 在確認對話方塊中,您可以選擇將該主體從服務中的所有角色中移除。按一下「Remove」(移除),即可從角色中移除主體。

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

查看主體

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

控制台

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

    前往 Cloud Run

  2. 找出要查看主體和角色的服務,然後勾選左側的核取方塊。請勿點選服務本身。
  3. 選取要查看主體和角色的服務。
  4. 按一下右上角資訊窗格中的「Permissions」(權限) 分頁標籤。如果未顯示資訊窗格,您可能需要依序點選「Show Info Panel」(顯示資訊面板) 和「Permissions」(權限)。
  5. 系統會依授予的角色分組,顯示角色和主體清單。

gcloud

使用下列指令:

gcloud run services get-iam-policy SERVICE_NAME

如要查看執行個體的主體,請按照下列步驟操作:

gcloud

使用下列指令:

gcloud beta run instances get-iam-policy INSTANCE_NAME

控管專案中所有 Cloud Run 資源的存取權

如要將專案中「所有」資源的角色授予主體,可以使用專案層級 IAM。

控制台

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

    前往「IAM」頁面

  2. 找出要授予專案層級角色的主體。

  3. 按一下主體列右側的「編輯」鉛筆圖示。

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

  5. 按一下 [儲存]。

gcloud

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

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

更改下列內容:

  • PROJECT_ID: Google Cloud專案的 ID。
  • PRINCIPAL:主體 (例如 user:email@domain.com)。
  • ROLE:角色 (例如 roles/run.admin)。

allUsers 和 allAuthenticatedUsers 主體類型無法在專案層級套用,必須個別新增至每項服務。

公開服務

建立公開 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 繫結則會保留。

使用 IAM 條件

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

舉例來說,如要在叫用 Cloud Run 服務時,使用 request.host 和 request.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 旗標必須包含鍵/值組合 expression 和 title。

後續步驟

瞭解如何安全地驗證開發人員、服務和使用者,以便存取您剛保護的服務。