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

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

准备工作

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

确保您拥有以下权限:

  • 列出父级项目的权限: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 小时才能开始处理服务健康事件。