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

Questa pagina descrive come instradare le voci di log creando sink configurati con service account 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, che ti consente di gestire centralmente le autorizzazioni di Identity and Access Management dal progetto che contiene il account di servizio gestito dall'utente.

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

Ti consigliamo di rivedere la configurazione del sink di log quando apporti modifiche allo spazio di archiviazione dei log. Ad esempio, se elimini la destinazione di un sink di logg, elimina anche ilsink di logg corrispondente.

Prima di iniziare

  1. Nella console Google Cloud , attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Assicurati di avere un account di servizio gestito dall'utente e poi imposta le seguenti variabili sui valori appropriati per il tuo account di servizio gestito dall'utente:

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

    • CUSTOM_SA: l'indirizzo email del account di servizio gestito dall'utente.

    Per informazioni su come creare un account di servizio, vedi Creare service account.

  3. Assicurati di avere un bucket di log che possa fungere da destinazione di un sink di log, quindi imposta le seguenti variabili sui valori appropriati per il tuo bucket di log. Se necessario, crea un bucket di log:

    • LOG_BUCKET_PROJECT_ID: L'ID progetto del progetto contenente il bucket dei log.

    • LOCATION: La posizione del bucket dei log.

    • BUCKET_NAME: il nome del bucket di log.

  4. Identifica il nome del account di servizio Logging presente nel progetto in cui prevedi di creare il sink di log, quindi imposta le seguenti variabili sui valori appropriati:

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

    • LOGGING_SA: L'indirizzo email del account di servizio Logging predefinito. Per ottenere questo indirizzo, esegui questo comando:

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      Nella risposta, la riga che inizia con loggingServiceAccountId elenca l'indirizzo email del tuoaccount di serviziot.

  5. Nel progetto contenente il account di servizio gestito dall'utente, assicurati che il vincolo booleano del criterio dell'organizzazione iam.disableCrossProjectServiceAccountUsage non venga applicato. Per impostazione predefinita, questo vincolo viene applicato. Per disattivare questo vincolo in modo da poter collegare unaccount di serviziot 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 dei service account tra progetti, consulta Abilitare l'associazione dei service account tra progetti.

Concedi ruoli IAM

Questa sezione descrive i prerequisiti per la creazione di un sink che utilizza un account di serviziot gestito dall'utente.

Consenti al account di servizio gestito dall'utente di scrivere voci di log nella destinazione sink

Concedi al account di servizio gestito dall'utente le autorizzazioni necessarie per scrivere le voci di log nella destinazione del sink che creerai in un passaggio successivo. La destinazione del sink sarà un bucket dei log memorizzato nel progetto denominato LOG_BUCKET_PROJECT_ID.

Per concedere le autorizzazioni richieste al account di servizio gestito dall'utente, assegna il ruolo Writer bucket log (roles/logging.bucketWriter) al progetto contenente il bucket log:

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

Per ulteriori informazioni sul comando precedente, consulta gcloud projects add-iam-policy-binding.

Configurare la simulazione dell'identità del account di servizio

Configura il account di servizio Cloud Logging predefinito, LOGGING_SA, in modo che possa rappresentare il account di servizio gestito dall'utente, CUSTOM_SA. Il account di servizio Cloud Logging predefinito esiste nel progetto Google Cloud in cui vuoi creare sink di log che utilizzano il account di servizio gestito dall'utente.

Per configurare l'imitazione dell'identità del account di servizio, concedi il ruolo Creatore token service account (roles/iam.serviceAccountTokenCreator) al service account Cloud Logging nel 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'

La simulazione dell'identità del service account coinvolge due entità: il account di servizio che non dispone delle autorizzazioni per accedere a una risorsa e il account di servizio con privilegi che dispone delle autorizzazioni per accedere a una risorsa. In questo caso, il account di servizio gestito dall'utente è l'account con privilegi perché ha la possibilità di scrivere voci di log nella destinazione del sink, che è un bucket di log nel progetto denominato LOG_BUCKET_PROJECT_ID. Il account di servizio Logging dispone dei privilegi per eseguire il routing delle voci di log.

Per saperne di più sul ruolo Creatore token service account, consulta Ruolo Creatore token service account.

Per saperne di più sulla simulazione dell'identità dei account di servizio, consulta Informazioni sulla account di servizio account.

Consenti all'entità di eseguire operazioni come account di servizio gestito dall'utente

Concedi all'entità che creerà il sink le autorizzazioni necessarie per eseguire operazioni come account di servizio gestito dall'utente.

Per concedere le autorizzazioni richieste, assegna all'entità il ruolo Utente service account (roles/iam.serviceAccountUser) nel progetto Google Cloud che archivia il account di servizio gestito dall'utente, CUSTOM_SA_PROJECT_ID.

Prima di eseguire il comando seguente, effettua le seguenti sostituzioni:

  • PRINCIPAL: un identificatore per l'entità a cui vuoi concedere il ruolo. Gli identificatori entità hanno in genere il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio: user:my-user@example.com. Per un elenco completo dei formati che può avere PRINCIPAL, consulta Identificatori delle entità.

Esegui il comando gcloud iam service-accounts add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/iam.serviceAccountUser'

Se utilizzi ruoli personalizzati, l'entità deve disporre dell'autorizzazione iam.serviceAccounts.actAs.

Per ulteriori informazioni sul ruolo Utente service account, consulta Ruolo Utente service account.

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

Per creare un sink con un account di servizio gestito dall'utente, esegui il comando gcloud logging sinks create e includi l'opzione --custom-writer-identity.

Prima di eseguire il comando seguente, effettua le seguenti sostituzioni:

  • SINK_NAME: il nome del sink di log.

Esegui il comando gcloud logging sinks create:

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

Verifica che il sink stia instradando le voci di log

In questa sezione, utilizzi gcloud CLI per scrivere e leggere una voce di log per verificare che il sink indirizzi correttamente le voci di log.

Per verificare che il sink indirizzi correttamente le voci di log:

  1. Esegui il comando gcloud logging write:

    Prima di eseguire il comando seguente, effettua le seguenti sostituzioni:

    • LOG_NAME: il nome del log. Ad esempio, potresti impostare questo campo su mylog.

    Esegui 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