Ativar a integridade personalizada de serviço para todos os projetos em uma organização ou pasta

Este documento descreve um script que ativa cada projeto em uma organização ou pasta para o processamento de eventos de integridade do serviço. Ele concede à principal do Identity and Access Management (IAM) especificada o papel de leitor do Service Health, que permite visualizar eventos e ativar a API Service Health.

Antes de começar

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

Verifique se você tem as seguintes permissões para executar o script:

  • Permissão para listar projetos no pai: resourcemanager.projects.list.
  • Permissão para adicionar o IAM (papel de visualizador da integridade do serviço) para a principal do IAM especificada: resourcemanager.projects.setIamPolicy.
  • Permissão para ativar os serviços do Google Cloud : serviceusage.services.enable.

Uma maneira de receber essas permissões é pedir a um administrador para conceder a você um papel adequado. Pesquise as permissões na seção Papéis predefinidos da página de referência de papéis básicos e predefinidos do IAM. Os papéis com as permissões vão aparecer.

Executar o script

O script aceita os seguintes parâmetros:

  • PARENT_ID: ID do pai dos projetos. O ID pode ser de uma organização ou uma pasta. Todos os projetos no pai terão o Serviço de integridade personalizado ativado.
  • (opcional) IAM_PRINCIPAL: um identificador do principal ou membro que receberá o papel de leitor do Service Health. Normalmente, ele tem o seguinte formato: PRINCIPAL_TYPE:ID. Exemplo:user:my-user@example.com.

    Para conferir a lista completa de valores aceitos, consulte a seção Conceder um único papel na página "Gerenciar o acesso a projetos, pastas e organizações".

Para executar o script, siga as etapas a seguir:

  1. Decida o API VERSION: v1 ou v1beta.
  2. Cole o script a seguir em um arquivo:

    #!/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. Execute o script. Os exemplos a seguir pressupõem que o script esteja em um arquivo chamado activateProjects.sh:

    • Para ativar todos os projetos no ID da organização 345678901 e conceder ao usuáriouser:test-user@gmail.com o papel deroles/servicehealth.viewer, execute:

      bash activateProjects.sh 345678901 "user:test-user@gmail.com"
      
    • Para ativar todos os projetos no ID da organização 345678901 e conceder à conta de serviço serviceAccount:test-proj1@example.domain.com o papel de roles/servicehealth.viewer, execute:

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

O Personalized Service Health leva até 24 horas para começar a processar eventos de integridade do serviço.