Ative o estado de saúde do serviço personalizado para todos os projetos numa organização ou numa pasta

Este documento descreve um script que permite o processamento de eventos de estado de funcionamento do serviço para cada projeto numa organização ou pasta. Concede ao principal de gestão de identidade e de acesso (IAM) especificado a função de leitor do Service Health, que lhe permite ver eventos e ativar a API Service Health.

Antes de começar

Verify that billing is enabled for your Google Cloud project.

Certifique-se de que tem as seguintes autorizações para executar o script:

  • Autorização para listar projetos na organização principal: resourcemanager.projects.list.
  • Autorização para adicionar o IAM (função de visualizador do estado do serviço) para o principal do IAM especificado: resourcemanager.projects.setIamPolicy.
  • Autorização para ativar os Google Cloud serviços: serviceusage.services.enable.

Uma forma de obter estas autorizações é pedir a um administrador que lhe conceda uma função adequada. Pesquise as autorizações na secção Funções predefinidas da página de referência de funções básicas e predefinidas do IAM. São apresentadas as funções que têm as autorizações.

Execute o script

O script aceita os seguintes parâmetros:

  • PARENT_ID: ID do elemento principal dos projetos. O ID pode ser de uma organização ou de uma pasta. Todos os projetos na organização principal têm o estado de saúde do serviço personalizado ativado.
  • (opcional) IAM_PRINCIPAL: um identificador para o principal ou o membro ao qual vai ser concedida a função de leitor do estado de funcionamento do serviço. Normalmente, tem o seguinte formato: PRINCIPAL_TYPE:ID. Exemplo:user:my-user@example.com.

    Para ver a lista completa de valores suportados, consulte a secção Conceda uma única função da página Faça a gestão do acesso a projetos, pastas e organizações.

Para executar o script:

  1. Decida sobre a API VERSION: v1 ou v1beta.
  2. Cole o seguinte script num ficheiro:

    #!/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 seguintes pressupõem que o script está num ficheiro com o nome activateProjects.sh:

    • Para ativar todos os projetos no ID da organização 345678901 e conceder ao utilizador user:test-user@gmail.com a função de roles/servicehealth.viewer: execute o seguinte:

      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 a função de roles/servicehealth.viewer, execute o seguinte comando:

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

O Personalized Service Health demora até 24 horas a começar a processar eventos de estado de funcionamento do serviço.