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

スクリプトの実行に使用できるロールを確認するには:

  1. IAM の基本ロールと事前定義ロールのリファレンス ページの事前定義ロールセクションに移動します。
  2. 必要な権限を検索します。権限を持つロールが表示されます。

スクリプトを実行する

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

  • 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 1111111111 のすべてのプロジェクトを有効にして、ユーザー user:test-user@gmail.comroles/servicehealth.viewer のロールを付与するには、次のコマンドを実行します。

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

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

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