組織またはフォルダ内のすべてのプロジェクトで 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(Service Health 閲覧者ロール)を追加する権限: resourcemanager.projects.setIamPolicy
  • Google Cloud サービスを有効にする権限: serviceusage.services.enable

これらの権限を取得する方法の 1 つは、適切なロールを付与するよう管理者に依頼することです。IAM の基本ロールと事前定義ロールのリファレンス ページの事前定義ロール セクションで権限を検索します。権限を持つロールが表示されます。

スクリプトを実行する

スクリプトは次のパラメータを受け入れます。

  • PARENT_ID: プロジェクトの親の ID。ID は組織またはフォルダの ID になります。親のすべてのプロジェクトで、パーソナライズされたサービス ヘルスが有効になります。
  • (省略可)IAM_PRINCIPAL: Service Health 閲覧者のロールが付与されるプリンシパルまたはメンバーの ID。通常、形式は PRINCIPAL_TYPE:ID です。例:user:my-user@example.com

    サポートされている値の完全なリストについては、プロジェクト、フォルダ、組織へのアクセスを管理するページの単一のロールを付与するセクションをご覧ください。

このスクリプトを実行するには、次のようにします。

  1. API VERSIONv1 または v1beta)を決定します。
  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.comroles/servicehealth.viewer のロールを付与するには、次のコマンドを実行します。

      bash activateProjects.sh 345678901 "user:test-user@gmail.com"
      
    • 組織 ID 345678901 のすべてのプロジェクトを有効にして、サービス アカウント serviceAccount:test-proj1@example.domain.comroles/servicehealth.viewer のロールを付与するには、次のコマンドを実行します。

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

Personalized Service Health がサービス ヘルスイベントの処理を開始するまでに、最大で 24 時間かかることがあります。