管理消費者政策

階層式服務啟用功能可讓您管理透過 Google Cloud 資源階層繼承的服務啟用狀態。詳情請參閱總覽

ConsumerPolicy 是 Service Usage API 資源,位於Google Cloud 資源階層的每個層級。這個資源一律命名為 default,內含 enableRules,用於定義已啟用的服務。您可以修改 ConsumerPolicy 資源,不必啟用或停用特定服務。如果服務名稱位於清單中,表示該服務已在該階層啟用。

本文說明如何使用 Google Cloud CLI 管理專案、資料夾和機構的消費者政策。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要「專案建立者」角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 如要使用現有專案進行本指南中的操作,請確認您具有完成本指南所需的權限。如果您建立新專案,則已具備必要權限。

  7. 確認專案已啟用計費功能 Google Cloud

  8. 啟用 Service Usage API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable serviceusage.googleapis.com
  9. 安裝 Google Cloud CLI。

  10. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  11. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  12. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要「專案建立者」角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  13. 如要使用現有專案進行本指南中的操作,請確認您具有完成本指南所需的權限。如果您建立新專案,則已具備必要權限。

  14. 確認專案已啟用計費功能 Google Cloud

  15. 啟用 Service Usage API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable serviceusage.googleapis.com
  16. 如果您未指出要管理的 Google Cloud 資源,本文中的指令會預設為目前的專案。舉例來說,gcloud beta services policies get --policy-name=default 會傳回目前專案的消費者政策。

    您可以擷取目前的專案 ID:

    gcloud config list --format='text(core.project)'

必要的角色

如要取得管理消費者政策所需的權限,請要求管理員授予目標資源的服務使用情形管理員 (roles/serviceusage.serviceUsageAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備管理消費者政策所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

必須具備下列權限,才能管理消費者政策:

  • 取得消費者政策: serviceusage.consumerpolicy.get
  • 更新消費者政策:
    • serviceusage.consumerpolicy.analyze
    • serviceusage.consumerpolicy.update
  • 取得有效政策: serviceusage.effectivepolicy.get
  • 檢查服務是否已啟用: serviceusage.values.test

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

取得消費者政策

您可以使用 gcloud beta services policies get 指令,擷取專案、資料夾或機構的 ConsumerPolicy

這項指令會傳回該資源層級的 enableRules,而非沿用規則。如要查看更完整的檢視畫面 (包括繼承的規則),可以擷取有效政策。僅支援 default 政策名稱。

專案

gcloud beta services policies get --policy-name=default \
    --project=PROJECT_ID \
    --output-file=OUTPUT_FILE

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID。 或者,省略旗標,預設為目前的專案。
  • OUTPUT_FILE:(選用) 輸出檔案的路徑,可儲存消費者政策內容。支援的檔案格式為 JSON 和 YAML。

資料夾

gcloud beta services policies get --policy-name=default \
    --folder=FOLDER_ID \
    --output-file=OUTPUT_FILE

更改下列內容:

  • FOLDER_ID:您的Google Cloud 資料夾 ID
  • OUTPUT_FILE:(選用) 輸出檔案的路徑,可儲存消費者政策內容。支援的檔案格式為 JSON 和 YAML。

機構

gcloud beta services policies get --policy-name=default \
    --organization=ORGANIZATION_ID \
    --output-file=OUTPUT_FILE

更改下列內容:

  • ORGANIZATION_ID:您的Google Cloud 機構資源 ID
  • OUTPUT_FILE:(選用) 輸出檔案的路徑,可儲存消費者政策內容。支援的檔案格式為 JSON 和 YAML。

更新消費者政策

您可以使用 gcloud beta services policies update 指令更新 ConsumerPolicy。這樣您就能取代目前的政策,並使用 YAML 檔案一次更新多項已啟用的服務。

這個指令不會自動啟用服務依附元件。您必須在輸入檔案中明確列出所有服務依附元件。您可以使用 --validate-only 旗標預覽變更,再加以套用。

gcloud beta services policies update --consumer-policy-file=PATH_TO_CONSUMER_POLICY

PATH_TO_CONSUMER_POLICY 替換為包含消費者政策的 YAML 檔案路徑,例如:

gcloud beta services policies update --consumer-policy-file=/path/to/the/file.yaml

支援的旗標:

  • --bypass-api-usage-check 略過用量檢查。否則,如果想停用的服務在過去 30 天內曾使用過,或在過去 3 天內啟用,系統就會傳回錯誤。

  • --bypass-dependency-check,略過依附元件檢查。新增服務時,政策中必須包含所有服務依附元件。移除服務時,政策中的其他服務不得依附於該服務。否則更新會失敗,並傳回錯誤。

  • --validate-only,驗證更新作業,但實際上不執行作業。

注意事項:

  • 如要取得政策檔案的 YAML 範本,請先擷取消費者政策,然後使用 --output-file 旗標將政策儲存至檔案。接著修改這個檔案,並將其做為更新指令的輸入內容。範本範例:

    name: projects/PROJECT_ID/consumerPolicies/default
    enableRules:
      - services:
        - services/SERVICE
        - ...
        - ...
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。 其他支援的資源名稱格式類似,例如: folders/FOLDER_ID/consumerPolicies/default

    • SERVICE:服務名稱,例如: bigquery.googleapis.com

取得有效政策

您可以使用 gcloud beta services policies get-effective 指令,擷取資源的有效政策。

有效政策會結合資源的 ConsumerPolicy 和所有上層資源的政策。這樣一來,您就能全面掌握所有已啟用的服務,包括直接在資源上啟用的所有服務,以及從上層資源繼承的服務。

專案

gcloud beta services policies get-effective --project=PROJECT_ID \
    --view=VIEW

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID。 或者,省略旗標,預設為目前的專案。
  • VIEW:可選擇 BASIC 擷取一組有限的中繼資料,或選擇 FULL 擷取完整的中繼資料,包括階層中啟用各項服務的位置。預設值為 BASIC

資料夾

gcloud beta services policies get-effective --folder=FOLDER_ID \
    --view=VIEW

更改下列內容:

  • FOLDER_ID:您的Google Cloud 資料夾 ID
  • VIEW:可選擇 BASIC 擷取一組有限的中繼資料,或選擇 FULL 擷取完整的中繼資料,包括階層中啟用各項服務的位置。預設值為 BASIC

機構

gcloud beta services policies get-effective --organization=ORGANIZATION_ID \
    --view=VIEW

更改下列內容:

  • ORGANIZATION_ID:您的Google Cloud 機構資源 ID
  • VIEW:可選擇 BASIC 擷取一組有限的中繼資料,或選擇 FULL 擷取完整的中繼資料,包括階層中啟用各項服務的位置。預設值為 BASIC

檢查服務是否已啟用

您可以使用 gcloud beta services policies test-enabled 指令,檢查資源是否已啟用服務。

檢查服務狀態時,這項指令會考量有效政策和完整的 Google Cloud 資源階層。

專案

gcloud beta services policies test-enabled SERVICE \
    --project=PROJECT_ID

更改下列內容:

  • SERVICE:要檢查的服務名稱。
  • PROJECT_ID:您的 Google Cloud 專案 ID。 或者,省略旗標,預設為目前的專案。

資料夾

gcloud beta services policies test-enabled SERVICE \
    --folder=FOLDER_ID

更改下列內容:

機構

gcloud beta services policies test-enabled SERVICE \
    --organization=ORGANIZATION_ID

更改下列內容:

範例

擷取消費者政策

  • 擷取目前專案的消費者政策:
    gcloud beta services policies get

    輸出內容:

    name: projects/PROJECT_ID/consumerPolicies/default
    enableRules:
     services:
      - services/apikeys.googleapis.com
      - services/compute.googleapis.com
      - services/oslogin.googleapis.com
      - services/serviceusage.googleapis.com
    updateTime: 2025-09-11T23:05:22.758394Z
    createTime: 2025-01-31T20:17:37.272343Z
    etag: W/"W9nsVJK0V1m7ee7tM7pFDg=="

更新消費者政策

  • 已成功更新消費者政策:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.yaml

    輸出內容:

    Operation [operations/ucpat.p39-581601899707-86fe7e37-c7f9-4624-90c4-d54754d57eed] complete. Result: {
        "@type":"type.googleapis.com/google.api.serviceusage.v2beta.ConsumerPolicy",
        "createTime":"1970-01-01T00:00:00Z",
        "enableRules":[
            {
                "services":[
                    "services/apikeys.googleapis.com"
                ]
            }
        ],
        "name":"projects/PROJECT_ID/consumerPolicies/default",
        "updateTime":"1970-01-01T00:00:00Z"
    }
  • 無法更新消費者政策:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.json

    錯誤訊息:

    ERROR: (gcloud.beta.services.policies.update) Invalid consumer_policy_file format. Please provide path to a yaml file.
  • 如果服務最近曾使用或啟用,嘗試更新消費者政策時:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.yaml

    輸出內容:

    The operation "operations/ucpat.p39-581601899707-4884bdb0-d899-49ac-9c83-38457950ef33" resulted in a failure "The services apikeys.googleapis.com have usage in the last 30 days or were enabled in the past 3 days. Please specify force if you want to proceed with the destructive policy change. Help Token: AVSZLmtCfGwMm4oHmOyExdDEFRQ0pFiBrl879nbZlY2JkfVzeU63u66ApXYr6MIEAoig..."
  • 如果最近略過使用情況檢查並使用或啟用服務,更新消費者政策的步驟如下:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.yaml --bypass-api-usage-check

    輸出內容:

    Operation [operations/ucpat.p39-581601899707-8ffda670-ed04-4776-8d43-d2f8e1817e00] complete. Result: {
        "@type":"type.googleapis.com/google.api.serviceusage.v2beta.ConsumerPolicy",
        "createTime":"1970-01-01T00:00:00Z",
        "enableRules":[
            {
                "services":[
                    "services/serviceusage.googleapis.com"
                ]
            }
        ],
        "name":"projects/PROJECT_ID/consumerPolicies/default",
        "updateTime":"1970-01-01T00:00:00Z"
    }

擷取有效政策

  • 擷取目前專案的有效政策檢視畫面:BASIC
    gcloud beta services policies get-effective

    輸出內容:

    EnabledRules:
     Services:
      -   services/apikeys.googleapis.com
      -   services/compute.googleapis.com
      -   services/computescanning.googleapis.com
      -   services/containeranalysis.googleapis.com
      -   services/containerscanning.googleapis.com
      -   services/gkebackup.googleapis.com
      -   services/osconfig.googleapis.com
      -   services/oslogin.googleapis.com
      -   services/serviceusage.googleapis.com
  • 擷取目前專案的有效政策檢視畫面:FULL
    gcloud beta services policies get-effective --view=FULL

    輸出內容:

    EnabledRules:
     Services:
      -   services/apikeys.googleapis.com
      -   services/compute.googleapis.com
      -   services/computescanning.googleapis.com
      -   services/containeranalysis.googleapis.com
      -   services/containerscanning.googleapis.com
      -   services/gkebackup.googleapis.com
      -   services/osconfig.googleapis.com
      -   services/oslogin.googleapis.com
      -   services/serviceusage.googleapis.com
    
    Metadata of effective policy:
    EnabledService: services/apikeys.googleapis.com
    EnabledPolicies: ['projects/PROJECT_ID/consumerPolicies/default']
    
    EnabledService: services/bcidcloudenforcer-pa.googleapis.com
    EnabledPolicies: ['folders/FOLDER_ID/consumerPolicies/default']
    
    EnabledService: services/compute.googleapis.com
    EnabledPolicies: ['projects/PROJECT_ID/consumerPolicies/default']
    ...

檢查服務是否已啟用

  • 檢查目前專案的已啟用 API 金鑰服務狀態:
    gcloud beta services policies test-enabled apikeys.googleapis.com

    輸出內容:

    Service apikeys.googleapis.com is ENABLED for resource projects/test-project Hierarchical Service Activation.
  • 檢查目前專案的 App Hub 服務是否已停用:
    gcloud beta services policies test-enabled apphub.googleapis.com

    輸出內容:

    Service apphub.googleapis.com is NOT ENABLED for resource projects/test-project Hierarchical Service Activation.

後續步驟