Configurare i sink di log con gli account di servizio gestiti dall'utente

Questa pagina descrive 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 Logging per tutti i sink in una risorsa. Tuttavia, se i sink di log si trovano in progetti diversi, puoi creare e gestire il tuo account di servizio gestito dall'utente, in modo da gestire centralmente le autorizzazioni di Identity and Access Management del progetto che contiene il tuo account di servizio gestito dall'utente.

Puoi creare un sink solo che utilizza un account di servizio gestito dall'utente quando la destinazione del sink è un bucket di log o un progetto Google Cloud. L'esempio in questo documento illustra come configurare un sink che utilizza un account di servizio gestito dall'utente in cui la destinazione è un bucket di log.

Prima di iniziare

  1. Per utilizzare gli esempi di 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, consulta Creare 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 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 account di servizio, consulta Creare account di servizio.

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

      SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    • LOGGING_SA: l'account di servizio di Logging predefinito. Per ricevere questa email, esegui questo comando:

         gcloud logging settings describe --project=SINK_PROJECT_ID
      

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

      loggingServiceAccountId: serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com

    • BUCKET_NAME: il nome del 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 in modo forzato il vincolo booleano del criterio dell'organizzazione iam.disableCrossProjectServiceAccountUsage. Per impostazione predefinita, questo vincolo viene applicato in modo forzato. Per disabilitare questo vincolo in modo da poter collegare un account di servizio a una risorsa in un altro progetto, esegui questo comando:

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

    Per saperne di più sull'abilitazione degli account di servizio tra progetti, consulta Abilitare il collegamento degli account di servizio tra progetti.

Concedi ruoli IAM

Questa sezione descrive i prerequisiti per la creazione di 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, segui questi passaggi:

  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 in cui vuoi creare sink di log che utilizzino l'account di servizio gestito dall'utente, segui questi passaggi:

  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 coinvolge due entità: l'account di servizio privo delle autorizzazioni per accedere a una risorsa e l'account di servizio che utilizza i privilegi che dispone delle autorizzazioni per accedere a una risorsa. In questo caso, l'account di servizio gestito dall'utente è l'account che utilizza i privilegi perché può scrivere log in un bucket di log nel progetto di destinazione. L'account di servizio Logging dispone dei privilegi per il routing dei log.

    Per ulteriori informazioni sul ruolo Creatore token account di servizio, consulta Ruoli per la gestione e l'identità di 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. In particolare, un'entità richiede l'autorizzazione iam.serviceAccounts.actAs nell'account di servizio:

     gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
     --member 'user:user@example.com' \
     --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 l'identità di 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 richiesti 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 che vengano indirizzati i 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 ulteriori informazioni sulla creazione dei sink utilizzando l'API Logging, consulta la documentazione di riferimento di LogSink.

Verifica che il sink stia eseguendo il routing dei log

In questa sezione utilizzerai gcloud CLI per scrivere e leggere una voce di log per verificare che il sink stia eseguendo correttamente il routing dei log.

Per verificare che il sink esegua correttamente il routing dei log:

  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 che hai appena scritto, esegui questo comando:

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

Passaggi successivi