為機構或資料夾中的所有專案啟用 Personalized Service Health

本文說明的指令碼可為機構或資料夾中的每個專案啟用服務健康狀態事件處理功能。這會授予指定的Identity and Access Management (IAM) 主體 Service Health 檢視者角色,讓您查看事件及啟用 Service Health API。

事前準備

Make sure that billing is enabled for your Google Cloud project.

請確認您具備下列權限,可執行指令碼:

  • 列出上層專案的權限:resourcemanager.projects.list
  • 為指定 IAM 主體新增 IAM (服務健康狀態檢視者角色) 的權限:resourcemanager.projects.setIamPolicy
  • 啟用 Google Cloud 服務的權限:serviceusage.services.enable

如要取得這些權限,可以請管理員授予您適當的角色。在 IAM 基本角色和預先定義角色參考頁面的「預先定義的角色」部分中,搜尋權限。系統會顯示具備這些權限的角色。

執行指令碼

這個指令碼可接受以下參數:

  • PARENT_ID:專案的父項 ID。ID 可以是機構或資料夾的 ID。父項下的所有專案都會啟用個人化服務健康狀態。
  • (選用) IAM_PRINCIPAL:主體或成員的身分識別,將獲派服務健康狀態檢視者角色。通常有以下格式:PRINCIPAL_TYPE:ID。例如:user:my-user@example.com

    如需支援值的完整清單,請參閱「管理專案、資料夾和機構的存取權」頁面的「授予單一角色」一節。

如要執行指令碼,請按照下列步驟操作:

  1. 決定 API VERSIONv1v1beta
  2. 將下列指令碼貼到檔案中:

    #!/bin/bash
    
    PARENT_ID="$1" PRINCIPAL="$2"
    
    FAILED_PROJECTS=()
    
    for project in $(gcloud projects list --filter="parent.id: ${PARENT_ID}" --format="value(projectId)")
    do
        echo "Enabling PSH API for project $project"
        gcloud services enable servicehealth.googleapis.com --project="${project}"
        echo "Finished enabling PSH API for project $project"
    
        if [[ -n "$PRINCIPAL" ]]; then
            echo "Adding $PRINCIPAL as service health viewer to project $project"
            gcloud projects add-iam-policy-binding "${project}" --member "${PRINCIPAL}" --role roles/servicehealth.viewer
            echo "Finished adding $PRINCIPAL as service health viewer to project $project"
            sleep 5
        else echo "PRINCIPAL not provided, will not grant service health viewer role. Please provide a PRINCIPAL value in order to view events."
        fi
    
        echo "Attempt to list events from Personalized Service Health for project $project"
        RESPONSE="$(curl -w "%{http_code}" -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://servicehealth.googleapis.com/API VERSION/projects/"${project}"/locations/global/events)" HTTP_CODE=$(tail -n1 <<< "$RESPONSE")
    
        if [[ "$HTTP_CODE" -ne 200 ]] ; then
            echo "Failed to list events for project $project"
            echo "Response: $RESPONSE"
            FAILED_PROJECTS+=($project)
        else
            echo "Successfully listed events for project $project"
        fi
    done
    
    if [[ "${#FAILED_PROJECTS[@]}" -ne 0 ]]; then
        echo "Listing projects that failed to activate"
        for project in "${FAILED_PROJECTS[@]}"
        do
            echo "$project"
        done
    fi
    
  3. 執行指令碼。以下範例假設指令碼位於名為 activateProjects.sh 的檔案中:

    • 如要啟用機構 ID 345678901 中的所有專案,並授予使用者user:test-user@gmail.com roles/servicehealth.viewer角色,請執行下列指令:

      bash activateProjects.sh 345678901 "user:test-user@gmail.com"
      
    • 如要啟用機構 ID 345678901 中的所有專案,並將 roles/servicehealth.viewer 角色授予服務帳戶 serviceAccount:test-proj1@example.domain.com,請執行下列指令:

      bash activateProjects.sh 345678901 "serviceAccount:test-proj1@example.domain.com"
      

Personalized Service Health 最多需要 24 小時,才會開始處理服務健康狀態事件。