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

本文档介绍了一个脚本,可让组织或文件夹中的每个项目都支持服务健康事件处理。该模板会向指定的 Identity and Access Management (IAM) 正文授予 Service Health Viewer 角色,以便您查看事件并启用 Service Health API。

准备工作

确保您拥有以下权限:

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

如需检查您可以用来运行脚本的角色,请执行以下操作:

  1. 前往 IAM 基本角色和预定义角色参考文档页面的预定义角色部分。
  2. 搜索所需权限。系统会显示具有相应权限的角色。

运行脚本

该脚本接受以下参数:

  • PARENT_ID:项目的父级 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 为 1111111111 的所有项目,并向用户 user:test-user@gmail.com 授予 roles/servicehealth.viewer 角色,请运行以下命令:

      bash activateProjects.sh 1111111111 "user:test-user@gmail.com"
      
    • 如需激活组织 ID 1111111111 中的所有项目,并向服务账号 serviceAccount:test-proj1@example.domain.com 授予 roles/servicehealth.viewer 角色,请运行以下命令:

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

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