Habilitar Personalized Service Health en todos los proyectos de una organización o una carpeta

En este documento se describe una secuencia de comandos que habilita el procesamiento de eventos de estado del servicio en cada proyecto de una organización o carpeta. Concede al principal de Gestión de Identidades y Accesos (IAM) especificado el rol Lector de estado del servicio, que te permite ver eventos y habilitar la API Service Health.

Antes de empezar

Verify that billing is enabled for your Google Cloud project.

Asegúrate de que tienes los siguientes permisos para ejecutar la secuencia de comandos:

  • Permiso para enumerar los proyectos de la organización superior: resourcemanager.projects.list.
  • Permiso para añadir IAM (rol Lector de estado de los servicios) al principal de IAM especificado: resourcemanager.projects.setIamPolicy.
  • Permiso para habilitar Google Cloud servicios: serviceusage.services.enable.

Una forma de obtener estos permisos es pedirle a un administrador que te asigne un rol adecuado. Busca los permisos en la sección Roles predefinidos de la página de referencia de roles básicos y predefinidos de gestión de identidades y accesos. Aparecerán los roles que tienen los permisos.

Ejecutar la secuencia de comandos

La secuencia de comandos acepta los siguientes parámetros:

  • PARENT_ID: ID del elemento superior de los proyectos. El ID puede ser de una organización o de una carpeta. Todos los proyectos secundarios tendrán habilitado el servicio personalizado de estado.
  • (Opcional) IAM_PRINCIPAL: identificador de la entidad o el miembro al que se le concederá el rol Lector de estado del servicio. Suele tener el siguiente formato: PRINCIPAL_TYPE:ID. Ejemplo:user:my-user@example.com

    Para ver la lista completa de valores admitidos, consulta la sección Asignar un solo rol de la página Administra el acceso a proyectos, carpetas y organizaciones.

Para ejecutar la secuencia de comandos:

  1. Decide el API VERSION: v1 o v1beta.
  2. Pega la siguiente secuencia de comandos en un archivo:

    #!/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. Ejecuta la secuencia de comandos. En los siguientes ejemplos se da por hecho que la secuencia de comandos se encuentra en un archivo llamado activateProjects.sh:

    • Para activar todos los proyectos de la organización con el ID 345678901 y conceder al usuario user:test-user@gmail.com el rol roles/servicehealth.viewer, ejecuta el siguiente comando:

      bash activateProjects.sh 345678901 "user:test-user@gmail.com"
      
    • Para activar todos los proyectos de la organización con el ID 345678901 y conceder a la cuenta de servicio serviceAccount:test-proj1@example.domain.com el rol roles/servicehealth.viewer, ejecuta el siguiente comando:

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

Personalized Service Health tardará hasta 24 horas en empezar a procesar los eventos de estado del servicio.