Configura i sink di log con account di servizio gestiti dall'utente

In questa pagina viene descritto come eseguire il routing dei log creando sink configurati con account di servizio gestiti dall'utente. Per impostazione predefinita, Logging utilizza un account di servizio di logging per tutti i sink in una risorsa. Tuttavia, se i sink dei log si trovano in progetti diversi, puoi creare e gestire il tuo account di servizio gestito dall'utente, che ti consente di gestire centralmente le autorizzazioni di Identity and Access Management dal progetto che contiene l'account di servizio gestito dall'utente.

Puoi creare un sink che utilizza un account di servizio gestito dall'utente solo quando la destinazione sink è un bucket di log.

Prima di iniziare

  1. Per utilizzare gli esempi a riga di comando in questa guida, installa e configura Google Cloud CLI.

  2. Assicurati di avere un account di servizio gestito dall'utente. Per informazioni su come creare un account di servizio, vedi Creare gli account di servizio.

  3. Per utilizzare i comandi in questo documento, identifica i seguenti valori:

    • DESTINATION_PROJECT_ID: l'ID del progetto che contiene il tuo bucket di log.

    • CUSTOM_SA_PROJECT_ID: L'ID del progetto che contiene il tuo account di servizio gestito dall'utente.

    • SINK_PROJECT_ID: l'ID del progetto in cui prevedi di creare il sink di log.

    • CUSTOM_SA: il tuo account di servizio gestito dall'utente. Per informazioni su come creare gli account di servizio, vedi Creare gli account di servizio.

      Il formato di un account di servizio gestito dall'utente è il seguente:

      SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    • LOGGING_SA: l'account di servizio di logging predefinito. Per ricevere questa email, esegui il comando seguente:

         gcloud logging settings describe --project=SINK_PROJECT_ID
      

      L'output include le seguenti informazioni sul tuo account di servizio:

      loggingServiceAccountId: serviceAccount:[email protected]

    • BUCKET_NAME: il nome del tuo bucket di log.

      Il percorso di destinazione del sink per un bucket di log è simile al seguente:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME

  4. Nel progetto che contiene il tuo account di servizio gestito dall'utente, assicurati che non venga applicato il vincolo booleano del criterio dell'organizzazione iam.disableCrossProjectServiceAccountUsage. Per impostazione predefinita, questo vincolo viene applicato. Per disabilitare questo vincolo in modo da poter collegare un account di servizio a una risorsa in un altro progetto, esegui il comando seguente:

      gcloud resource-manager org-policies disable-enforce \
      iam.disableCrossProjectServiceAccountUsage \
      --project=CUSTOM_SA_PROJECT_ID
    

    Per ulteriori informazioni sull'abilitazione degli account di servizio nei progetti, consulta Abilitare il collegamento degli account di servizio nei progetti.

Concedi ruoli IAM

Questa sezione descrive i prerequisiti per creare un sink che utilizza un account di servizio gestito dall'utente.

Nel progetto che contiene il bucket di log che è la destinazione dei sink di log, procedi nel seguente modo:

  1. Concedi il ruolo Writer bucket di log (roles/logging.bucketWriter) all'account di servizio gestito dall'utente. Questo ruolo consente all'account di servizio gestito dall'utente di scrivere log nel bucket di log:

     gcloud projects add-iam-policy-binding DESTINATION_PROJECT_ID \
     --member="serviceAccount:CUSTOM_SA" \
     --role="roles/logging.bucketWriter"
    

Nel progetto Google Cloud per cui vuoi creare sink di log che utilizzano l'account di servizio gestito dall'utente, procedi nel seguente modo:

  1. Concedi il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) all'account di servizio Cloud Logging nell'account di servizio gestito dall'utente:

      gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
      --project=CUSTOM_SA_PROJECT_ID \
      --member="serviceAccount:LOGGING_SA" \
      --role="roles/iam.serviceAccountTokenCreator"
    

    Il comando precedente consente all'account di servizio Logging di impersonare l'account di servizio gestito dall'utente utilizzando il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).

    L'impersonificazione degli account di servizio comporta due entità: l'account di servizio, privo delle autorizzazioni per accedere a una risorsa, e l'account di servizio con privilegi che dispone delle autorizzazioni per accedere a una risorsa. In questo caso, l'account di servizio gestito dall'utente è l'account con privilegi privilegiati perché ha la possibilità di scrivere log in un bucket di log nel progetto di destinazione. L'account di servizio di Logging dispone dei privilegi necessari per instradare i log.

    Per ulteriori informazioni sul ruolo Creatore token account di servizio, consulta Ruoli per la gestione e il furto d'identità degli account di servizio: ruolo Creatore token account di servizio.

    Per ulteriori informazioni sul furto d'identità degli account di servizio, consulta Informazioni sul furto d'identità degli account di servizio.

  2. Concedi il ruolo Utente account di servizio (roles/iam.serviceAccountUser) all'entità che crea i sink di log. Nello specifico, un'entità ha bisogno dell'autorizzazione iam.serviceAccounts.actAs sull'account di servizio:

     gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
     --member 'user:[email protected]' \
     --role "roles/iam.serviceAccountUser"
    

    Il comando precedente consente a un utente di eseguire operazioni come account di servizio gestito dall'utente.

    Per ulteriori informazioni sul ruolo Utente account di servizio, consulta Ruoli per la gestione e il furto d'identità degli account di servizio: ruolo Utente account di servizio.

Crea un sink di log che utilizza un account di servizio gestito dall'utente

gcloud

Per creare un sink con un account di servizio gestito dall'utente, sostituisci le variabili con le tue informazioni ed esegui il comando gcloud logging sinks create con il flag --custom-writer-identity:

    gcloud logging sinks create SINK_NAME logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
    --custom-writer-identity=serviceAccount:CUSTOM_SA \
    --project=SINK_PROJECT_ID

API

  1. Per creare un sink di log nel progetto Google Cloud, utilizza projects.sinks.create nell'API Logging. Nell'oggetto LogSink, passa il parametro customWriterIdentity e fornisci i valori obbligatori appropriati nel corpo della richiesta del metodo:

    • name: un identificatore del sink. Tieni presente che, dopo aver creato il sink, non puoi rinominare il sink, ma puoi eliminarlo e crearne uno nuovo.
    • destination: il bucket di log in cui vuoi eseguire il routing dei log. Il percorso di destinazione ha il seguente formato:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
      
  2. Chiama projects.sinks.create per creare il sink.

Per maggiori informazioni sulla creazione di sink utilizzando l'API Logging, consulta la documentazione di riferimento di LogSink.

Verifica che il sink instrada i log

In questa sezione utilizzerai lgcloud CLI per scrivere e leggere una voce di log per verificare che il sink instrada correttamente i log.

Per verificare che il sink instrada correttamente i log, procedi nel seguente modo:

  1. Sostituisci le variabili con le tue informazioni e scrivi una voce di log di esempio utilizzando il comando gcloud logging write:

    gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
    

    Il comando precedente restituisce il seguente messaggio:

    Created log entry.

  2. Per leggere la voce di log appena scritta, esegui questo comando:

    gcloud logging read 'textPayload="Test log entry"' \
    --bucket=BUCKET_NAME --location=LOCATION \
    --view=_AllLogs --project=SINK_PROJECT_ID
    

Passaggi successivi