本文档介绍了一个脚本,可让组织或文件夹中的每个项目都支持服务健康事件处理。该模板会向指定的 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.
如需检查您可以用来运行脚本的角色,请执行以下操作:
- 前往 IAM 基本角色和预定义角色参考文档页面的预定义角色部分。
- 搜索所需权限。系统会显示具有相应权限的角色。
运行脚本
该脚本接受以下参数:
PARENT_ID
:项目的父级 ID。该 ID 可以是组织 ID,也可以是文件夹 ID。父级项目下的所有项目都将启用个性化服务健康度。(可选)
IAM_PRINCIPAL
:主账号或成员的标识符,系统会向其授予“服务健康状况查看者”角色。其格式通常如下:PRINCIPAL_TYPE:ID
。示例:user:my-user@example.com
。如需查看受支持值的完整列表,请参阅“管理对项目、文件夹和组织的访问权限”页面的授予单个角色部分。
如需运行该脚本,请执行以下操作:
- 确定 API VERSION:
v1
或v1beta
。 将以下脚本粘贴到文件中:
#!/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
运行脚本。以下示例假定脚本位于名为
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 小时才能开始处理服务健康事件。