为组织或文件夹中的所有项目启用 Personalized Service Health

本文档介绍了一个脚本,该脚本可让组织或文件夹中的每个项目能够处理服务健康状况事件。它会向指定的 Identity and Access Management (IAM) 主账号授予 Service Health Viewer 角色,让您能够查看事件并启用 Service Health API。

准备工作

Verify that billing is enabled for your Google Cloud project.

确保您拥有以下权限来运行脚本:

  • 列出父级 resourcemanager.projects.list 下的项目的权限。
  • 为指定 IAM 主账号添加 IAM(Service Health Viewer 角色)的权限:resourcemanager.projects.setIamPolicy
  • 启用 Google Cloud 服务的权限:serviceusage.services.enable

如需获得这些权限,一种方法是让管理员向您授予适当的角色。在 IAM 基本角色和预定义角色参考页面的预定义角色部分中搜索相应权限。 系统会显示具有相应权限的角色。

运行脚本

该脚本接受以下参数:

  • PARENT_ID:项目的父级 ID。该 ID 可以是组织 ID 或文件夹 ID。父项目下的所有项目都将启用个性化服务健康状况。
  • (可选)IAM_PRINCIPAL:将获授 Service Health Viewer 角色的主账号或成员的标识符。它通常采用以下格式: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 的所有项目,并向服务账号 serviceAccount:test-proj1@example.domain.com 授予 roles/servicehealth.viewer 角色,请运行:

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

Personalized Service Health 最长需要 24 小时才能开始处理服务健康状况事件。