Configurare l'accesso a livello di campo

Questo documento descrive i controlli dell'accesso a livello di campo e come impostarli in un bucket di Logging. I controlli dell'accesso a livello di campo ti consentono di nascondere i singoli campi LogEntry agli utenti di un Google Cloud progetto, fornendoti un modo più granulare per controllare i dati dei log a cui un utente può accedere.

Panoramica

Logging utilizza il controllo dell'accesso a livello di campo per nascondere LogEntry campi agli utenti di un Google Cloud progetto che non dispongono delle autorizzazioni necessarie per visualizzare i campi. Rispetto alle visualizzazioni dei log, che nascondono l'intero LogEntry, i controlli dell'accesso a livello di campo nascondono i singoli campi di LogEntry. Puoi impostare sia i controlli dell'accesso a livello di campo sia le autorizzazioni delle visualizzazioni dei log in un bucket di Logging. Puoi limitare e gestire il controllo dell'accesso a livello di campo utilizzando Google Cloud CLI.

Per limitare l'accesso ai campi dei log:

  • Configura i campi LogEntry limitati in un bucket di log.
  • Assegna solo agli utenti che devono visualizzare i campi limitati il ruolo IAM logging.fieldAccessor per quel percorso del campo o un ruolo che contenga autorizzazioni simili.

Logging controlla le autorizzazioni IAM quando un utente esegue query sui log da un bucket con campi limitati impostati. L'accesso a tutti i campi con ACL configurate viene negato agli utenti senza il logging.FieldAccessor corrispondente per quel campo, il che significa che:

  • L'utente riceve un errore di autorizzazione negata se tenta di eseguire query direttamente sui campi limitati.
  • Le ricerche globali non tengono conto dei contenuti dei campi negati.
  • Tutti i risultati LogEntry restituiti omettono i campi limitati.

Campi limitati

Puoi limitare l'accesso al campo jsonPayload, che limita anche l'accesso ai relativi percorsi nidificati.

Puoi anche limitare l'accesso ai campi foglia di:

Ad esempio, puoi limitare l'accesso al campo labels.check_id.

Prima di iniziare

Prima di iniziare a impostare i controlli dell'accesso a livello di campo:

  • Verifica che gcloud --version riporti la versione 362.0.0 o successive.

    Per installare l'ultima versione di gcloud CLI, esegui il gcloud components update comando:

    gcloud components update
    

    Per istruzioni su come installare gcloud CLI, consulta Installare Google Cloud CLI.

  • Esegui gcloud config set per configurare il progetto predefinito Google Cloud per i comandi di Google Cloud CLI. Prima di eseguire il comando, effettua la seguente sostituzione:

    • PROJECT_ID: l'identificatore del progetto.

    Comando:

    gcloud config set project PROJECT_ID
    
  • Verifica di disporre di uno dei seguenti ruoli IAM per il Google Cloud progetto che contiene il bucket:

    Per informazioni sull'impostazione dei ruoli IAM, consulta la guida Controllo dell'accesso aLogging.

Impostare il controllo dell'accesso a livello di campo

Le limitazioni a livello di campo vengono configurate a livello di bucket di log e possono essere applicate a un bucket di log esistente o durante la creazione di un nuovo bucket di log.

Limitare i campi in un nuovo bucket

Per limitare i campi dei log durante la creazione di un nuovo bucket di log, esegui il gcloud logging buckets create comando. Prima di eseguire il comando, effettua le seguenti sostituzioni:

  • BUCKET_ID: il nome o l'ID del bucket di log.
  • LOCATION: la località del bucket di log.
  • DESCRIPTION: la descrizione del bucket di log.
  • RESTRICTED_FIELDS: l'elenco separato da virgole dei campi limitati.

Comando:

gcloud logging buckets create BUCKET_ID --location=LOCATION  \
--description=DESCRIPTION --restricted-fields=RESTRICTED_FIELDS

Esempio di comando:

gcloud logging buckets create new-log-bucket --location=global \
--description="New bucket with restricted fields" --restricted-fields="jsonPayload.data.ssn,httpRequest.status"

Limitare i campi in un bucket esistente

Per limitare i campi dei log in un bucket di log esistente, esegui il gcloud logging buckets update comando:

gcloud logging buckets update BUCKET_ID --location=LOCATION  \
--restricted-fields=RESTRICTED_FIELDS

Esempio di comando:

gcloud logging buckets update my-existing-log-bucket --location=global \
--restricted-fields="jsonPayload.data.ssn,httpRequest.status"

Se vuoi aggiungere campi alle limitazioni esistenti, il comando di aggiornamento deve elencare di nuovo l'intero insieme di campi limitati. Basandoti sull'esempio precedente, se volessi limitare l'accesso al campo jsonPayload.data.entryDate oltre ai campi già limitati jsonPayload.data.ssn e httpRequest.status, il comando sarebbe il seguente:

gcloud logging buckets update my-existing-log-bucket --location=global \
--restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"

Se non hai elencato di nuovo i campi già limitati e hai elencato solo jsonPayload.data.entryDate, sia jsonPayload.data.ssn sia httpRequest.status verranno rimossi come campi limitati.

Gestire l'accesso ai campi limitati

Per impostazione predefinita, Logging nasconde tutti i campi limitati agli utenti che non dispongono del ruolo logging.fieldAccessor o di un ruolo con autorizzazioni simili. Logging espone i campi limitati agli utenti che dispongono sia dell'autorizzazione per visualizzare i log nel bucket sia del ruolo logging.fieldAccessor.

Puoi modificare il comportamento predefinito per limitare i sottoinsiemi di campi limitati a utenti specifici.

Concedere l'autorizzazione a tutti i campi limitati

Per concedere agli utenti l'autorizzazione a tutti i campi limitati, assegna agli utenti il ruolo logging.fieldAccessor o un ruolo personalizzato che contenga il ruolo logging.fieldAccessor.

Console

Per assegnare agli utenti il ruolo logging.fieldAccessor utilizzando la Google Cloud console, segui questi passaggi:

  1. Nella Google Cloud console vai alla pagina IAM:

    Vai a IAM

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e amministrazione.

  2. Seleziona l'entità e fai clic su Modifica.
  3. Nel riquadro Modifica autorizzazioni, seleziona Accessore ai campi dei log per il ruolo.
  4. Seleziona Aggiungi condizione IAM.
  5. Inserisci un titolo e una descrizione nei campi Titolo e Descrizione.
  6. Seleziona la scheda Editor di condizioni e inserisci la seguente espressione:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
    
  7. Seleziona Salva.

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

gcloud

Per assegnare agli utenti il ruolo logging.fieldAccessor utilizzando gcloud CLI, segui questi passaggi:

  1. Per salvare le informazioni sulla policy IAM corrente in un file, esegui il gcloud projects get-iam-policy comando e salva l'output in un file:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    Il comando precedente salva le informazioni in un file denominato policy.json.

  2. Aggiorna il file policy.json con altri binding.

    Di seguito, il campo expression elenca solo un bucket di log. Pertanto, tutti i campi delle voci di log archiviati in quel bucket di log sono accessibili alle entità elencate nella sezione members.

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'",
            "title": "TITLE"
          },
          "members": [
            PRINCIPAL
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    Nell'esempio precedente, i campi hanno i seguenti significati:

    • PRINCIPAL: un identificatore per l'entità a cui vuoi assegnare il ruolo. Gli identificatori principali hanno in genere il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio, user:my-user@example.com. Per un elenco completo dei formati che PRINCIPAL può avere, consulta Identificatori delle entità. Nel campo members del policy.json file, utilizza il formato "PRINCIPAL-TYPE":"ID".
    • DESCRIPTION: una descrizione della condizione.
    • TITLE: un titolo per la condizione.
  3. Per applicare il file policy.json aggiornato, esegui il gcloud projects set-iam-policy comando:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

Concedere autorizzazioni a un sottoinsieme di campi limitati

Per concedere agli utenti le autorizzazioni a un sottoinsieme di campi limitati, imposta i campi a cui gli utenti possono accedere quando concedi loro il ruolo logging.fieldAccessor o quando imposti un ruolo personalizzato che contiene logging.fieldAccessor.

Tieni presente quanto segue:

  • L'ortografia e le maiuscole del campo limitato così come appaiono nella configurazione del bucket devono corrispondere all'ortografia e alle maiuscole del campo limitato nel nome dell'autorizzazione IAM. Ad esempio, se imposti il campo limitato come jsonPayload, devi concedere l'autorizzazione al campo jsonPayload, non al campo Jsonpayload.

  • I percorsi dei campi, incluse le stringhe delle chiavi delle mappe, fanno distinzione tra maiuscole e minuscole, ma i percorsi dei campi protobuf possono essere espressi come snake case (snake_case) senza distinzione tra maiuscole e minuscole o come camel case (camelCase) con distinzione tra maiuscole e minuscole.

    Ad esempio, logName è un campo nel LogEntry protobuf; log_name si riferisce allo stesso campo. Il campo jsonPayload.fooBar si riferisce a un campo diverso da jsonPayload.foo_bar, poiché i nomi dei campi sotto jsonPayload sono chiavi di stringa della mappa; tuttavia, si riferisce a json_payload.fooBar.

    Anche se i percorsi dei campi sono riferimenti validi allo stesso campo, devi corrispondere all'ortografia, alle maiuscole e alle minuscole quando configuri le limitazioni e le autorizzazioni IAM. Se, ad esempio, specifichi una limitazione su jsonPayload.foo, devi configurare le autorizzazioni IAM per jsonPayload.foo e non per json_payload.foo.

Per ulteriori informazioni sui tipi di campi dei log validi, consulta Linguaggio di query di Logging: valori e conversioni.

Console

Per consentire agli utenti di accedere a un campo limitato utilizzando la Google Cloud console, segui questi passaggi:

  1. Nella Google Cloud console vai alla pagina IAM:

    Vai a IAM

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e amministrazione.

  2. Seleziona l'entità e fai clic su Modifica.
  3. Nel riquadro Modifica autorizzazioni, seleziona Accessore ai campi dei log per il ruolo.
  4. Seleziona Aggiungi condizione IAM.
  5. Inserisci un titolo e una descrizione nei campi Titolo e Descrizione.
  6. Seleziona la scheda Editor di condizioni e inserisci la seguente espressione:

    resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
    
  7. Seleziona Salva.

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

gcloud

Per consentire agli utenti di accedere a un campo limitato utilizzando gcloud CLI, segui questi passaggi:

  1. Per salvare le informazioni IAM in un file, esegui il gcloud projects get-iam-policy comando e salva l'output in un file:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    Il comando precedente salva le informazioni in un file denominato policy.json.

  2. Aggiorna il file policy.json con altri binding.

    Di seguito, il campo expression elenca campi specifici. Pertanto, solo le entità elencate nella sezione members hanno accesso a questi campi delle voci di log archiviate nel bucket di log specificato.

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_ID/fields/{field}\") == 'RESTRICTED_FIELDS'",
            "title": "TITLE"
          },
          "members": [
            PRINCIPAL
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    Nell'esempio precedente, i campi hanno i seguenti significati:

    • PRINCIPAL: un identificatore per l'entità a cui vuoi assegnare il ruolo. Gli identificatori principali hanno in genere il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio, user:my-user@example.com. Per un elenco completo dei formati che PRINCIPAL può avere, consulta Identificatori delle entità. Nel campo members del policy.json file, utilizza il formato "PRINCIPAL-TYPE":"ID".
    • DESCRIPTION: una descrizione della condizione.
    • TITLE: un titolo per la condizione.
  3. Per applicare il file policy.json aggiornato, esegui il gcloud projects set-iam-policy comando:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

Esempio

Supponiamo che un bucket di log limiti il campo jsonPayload, un'etichetta specifica e un sottocampo httpRequest specifico. Quando un utente esamina le voci di log, si verifica quanto segue:

  • Per gli utenti con l'autorizzazione ad accedere a tutti i campi limitati, tutti i campi di una voce di log sono visibili.

  • Per gli utenti con l'autorizzazione ad accedere solo al campo LogEntry jsonPayload limitato, tutti i campi non limitati sono visibili e il campo jsonPayload è visibile.

  • Per gli utenti senza l'autorizzazione a visualizzare nessuno dei campi limitati, sono visibili solo i campi non limitati.

Se un utente scrive una query con una limitazione globale, le voci di log che contengono un campo limitato vengono omesse dalla risposta.

Elencare i campi limitati

Per elencare i campi limitati in un bucket di log, esegui il seguente gcloud logging buckets describe:

gcloud logging buckets describe BUCKET_ID --location=LOCATION

Esempio di comando:

gcloud logging buckets describe my-log-bucket --location=global

Quote e limiti

Quando configuri e utilizzi il controllo dell'accesso a livello di campo, tieni presente quanto segue:

  • Numero di campi limitati: puoi limitare fino a 20 campi per ogni bucket di log.
  • Dimensione dei campi limitati: il percorso del campo limitato deve essere inferiore a 800 B.

Per ulteriori informazioni sui limiti che potrebbero essere applicati al tuo utilizzo di Cloud Logging, consulta Quote e limiti.