Activer Personalized Service Health pour tous les projets d'une organisation ou d'un dossier

Ce document décrit un script qui permet à chaque projet d'une organisation ou d'un dossier de traiter les événements d'état des services. Il accorde au principal Identity and Access Management (IAM) spécifié le rôle Lecteur de l'état des services, qui vous permet d'afficher les événements et d'activer l'API Service Health.

Avant de commencer

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

Assurez-vous de disposer des autorisations suivantes pour exécuter le script :

  • Autorisation de lister les projets sous le parent : resourcemanager.projects.list.
  • Autorisation d'ajouter IAM (rôle Lecteur de l'état du service) pour le principal IAM spécifié : resourcemanager.projects.setIamPolicy.
  • Autorisation d'activer les services Google Cloud  : serviceusage.services.enable.

Pour obtenir ces autorisations, vous pouvez demander à un administrateur de vous attribuer un rôle approprié. Recherchez les autorisations dans la section Rôles prédéfinis de la page de référence sur les rôles IAM de base et prédéfinis. Les rôles disposant des autorisations s'affichent.

Exécuter le script

Le script accepte les paramètres suivants :

  • PARENT_ID : ID du parent des projets. Il peut s'agir de l'ID d'une organisation ou d'un dossier. Le service d'état personnalisé sera activé pour tous les projets du parent.
  • (facultatif) IAM_PRINCIPAL : identifiant du compte principal ou du membre auquel le rôle Lecteur de l'état des services sera attribué. Il se présente généralement sous la forme suivante : PRINCIPAL_TYPE:ID. Exemple : user:my-user@example.com.

    Pour obtenir la liste complète des valeurs acceptées, consultez la section Attribuer un rôle unique de la page "Gérer l'accès aux projets, aux dossiers et aux organisations".

Pour exécuter le script, procédez comme suit :

  1. Choisissez le API VERSION : v1 ou v1beta.
  2. Collez le script suivant dans un fichier :

    #!/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. Exécutez le script. Les exemples suivants supposent que le script se trouve dans un fichier nommé activateProjects.sh :

    • Pour activer tous les projets de l'ID d'organisation 345678901 et accorder à l'utilisateur user:test-user@gmail.com le rôle roles/servicehealth.viewer, exécutez la commande suivante :

      bash activateProjects.sh 345678901 "user:test-user@gmail.com"
      
    • Pour activer tous les projets dans l'ID d'organisation 345678901 et accorder au compte de service serviceAccount:test-proj1@example.domain.com le rôle roles/servicehealth.viewer, exécutez la commande suivante :

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

Il faut jusqu'à 24 heures pour que Personalized Service Health commence à traiter les événements liés à l'état des services.