Configura i sink di log con 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 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 tuo account di servizio gestito dall'utente, che ti consente di gestire centralmente Le autorizzazioni Identity and Access Management del progetto che contiene la risorsa l'account di servizio.

Puoi creare un sink che utilizza un account di servizio gestito dall'utente solo 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 servizio gestito dall'utente in cui la destinazione è un bucket di log.

Prima di iniziare

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Assicurati di avere un account di servizio gestito dall'utente, quindi imposta le seguenti variabili ai valori appropriati per account di servizio gestito dall'utente:

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

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

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

  3. Assicurati di avere un bucket di log che possa fungere da destinazione di un'area di destinazione dei log, quindi imposta le seguenti variabili su valori appropriati per il bucket di log. Se necessario, crea un bucket di log:

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

    • LOCATION: la posizione del bucket di log.

    • BUCKET_NAME: il nome del tuo bucket di log.

  4. Identifica il nome dell'account di servizio Logging che esiste nel progetto in cui prevedi di creare il sink di log, quindi imposta le seguenti variabili sui rispettivi valori:

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

    • LOGGING_SA: l'email dell'account di servizio Logging predefinito. Per ottenere questo indirizzo, esegui il seguente comando:

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      Nella risposta, la riga che inizia con loggingServiceAccountId elenca l'indirizzo email del tuo account di servizio.

  5. Nel progetto contenente il tuo account di servizio gestito dall'utente, assicurati che il vincolo booleano del criterio dell'organizzazioneiam.disableCrossProjectServiceAccountUsage non venga applicato. Per impostazione predefinita, questo vincolo viene applicato. Per disattivare questa limitazione in modo da poter collegare un account di servizio a una risorsa in un altro progetto, esegui il seguente comando:

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

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

Concedi ruoli IAM

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

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

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

Per concedere le autorizzazioni richieste all'account di servizio gestito dall'utente, concedigli il ruolo Scrittore del bucket di log (roles/logging.bucketWriter) nel progetto contenente il bucket di 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 l'impersonificazione degli account di servizio

Configura l'account di servizio Cloud Logging predefinito, LOGGING_SA, in modo da poter impersonare l'account di servizio gestito dall'utente, CUSTOM_SA. L'account di servizio Cloud Logging predefinito esiste nel progetto Google Cloud in cui vuoi creare destinazioni dei log che utilizzano l'account di servizio gestito dall'utente.

Per configurare l'usurpazione di identità dell'account di servizio, 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'

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

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

Per ulteriori informazioni sulla simulazione dell'identità degli account di servizio, vedi Informazioni sull'account di servizio furto d'identità.

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

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

Per concedere le autorizzazioni richieste, concedi al principale il ruolo Utente account di servizio (roles/iam.serviceAccountUser) nel progetto Google Cloud che memorizza l'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 assegnare il ruolo. Di solito, gli identificatori entità hanno il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio: user:my-user@example.com. Per un elenco completo dei formati che PRINCIPAL può avere, consulta gli identificatori entità.

Esegui la 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à ha bisogno Autorizzazione iam.serviceAccounts.actAs.

Per ulteriori informazioni sul ruolo Utente account di servizio, consulta la sezione Ruoli per la gestione e l'identità di account di servizio: account di servizio Ruolo utente.

Creare un'area di destinazione dei log che utilizza un account di servizio gestito dall'utente

Per creare un'area di destinazione 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 questo comando, apporta le seguenti sostituzioni:

  • SINK_NAME: il nome del sink di log.

Esegui la 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 eseguendo il routing dei log

In questa sezione utilizzi Google Cloud CLI per scrivere e leggere una voce di log per verificare che lo sink inoltri correttamente i log.

Per verificare che lo sink inoltri correttamente i log, procedi nel seguente modo:

  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 la 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 il seguente comando:

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

Passaggi successivi