Configurare l'accesso a livello di campo

Questo documento descrive i controlli di 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 singoli campi LogEntry agli utenti di un progetto Google Cloud, fornendo un modo più granulare di controllare i dati dei log a cui un utente può accedere.

Panoramica

Logging utilizza il controllo dell'accesso a livello di campo per nascondere i campi LogEntry agli utenti di un progetto Google Cloud che non dispongono delle autorizzazioni necessarie per visualizzarli. Rispetto alle visualizzazioni dei log, che nascondono l'intero LogEntry, i controlli di accesso a livello di campo nascondono i singoli campi di LogEntry. Puoi impostare controlli dell'accesso a livello di campo e autorizzazioni di visualizzazione 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 del log:

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

Logging controlla le autorizzazioni IAM quando un utente esegue query ai log da un bucket per cui sono impostati campi con restrizioni. Tutti i campi con ACL configurati vengono rifiutati agli utenti senza il valore logging.FieldAccessor corrispondente per quel campo, il che significa che:

  • L'utente riceve un errore di autorizzazione negata se tenta di eseguire direttamente una query sui campi con restrizioni.
  • Le ricerche globali non prendono in considerazione i contenuti dei campi negati.
  • Tutti i risultati LogEntry restituiti omettono i campi con restrizioni.

Campi con restrizioni

Puoi limitare l'accesso a qualsiasi combinazione dei seguenti campi LogEntry:

Campo LogEntry Campi nidificati del campo LogEntry principale
jsonPayload definito dall'utente
textPayload Nessuna esperienza
protoPayload servizio specifico
httpRequest httpRequest campi nidificati
labels definito dall'utente
sourceLocation sourceLocation campi nidificati

La limitazione dell'accesso a un campo con campi nidificati (come jsonPayload o specifici percorsi secondari di jsonPayload) limita anche l'accesso a qualsiasi percorso nidificato.

Prima di iniziare

Prima di iniziare a impostare i controlli dell'accesso a livello di campo, segui questi passaggi:

Impostazione controllo dell'accesso a livello di campo

Le restrizioni a livello di campo sono configurate a livello di bucket e possono essere applicate a un bucket esistente o durante la creazione di un nuovo bucket.

Limitare i campi in un nuovo bucket

Per limitare i campi di log durante la creazione di un nuovo bucket di log, esegui il seguente comando gcloud CLI:

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

Comando di esempio:

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

Limitazione dei campi in un bucket esistente

Per limitare i campi di log in un bucket di log esistente, esegui il seguente comando gcloud CLI:

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

Comando di esempio:

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 includere nuovamente l'intero insieme di campi con restrizioni. Partendo dall'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 avrebbe questo aspetto:

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 appena elencato jsonPayload.data.entryDate, sia jsonPayload.data.ssn sia httpRequest.status verranno rimossi come campi con restrizioni.

Gestione dell'accesso ai campi con restrizioni

Per impostazione predefinita, Logging nasconde tutti i campi con restrizioni agli utenti che non hanno il ruolo logging.fieldAccessor o un ruolo con autorizzazioni simili. Logging espone i campi con restrizioni 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 con restrizioni a utenti specifici.

Concessione dell'autorizzazione in tutti i campi con restrizioni

Per concedere agli utenti l'autorizzazione per tutti i campi con restrizioni, assegna agli utenti il ruolo logging.fieldAccessor o un ruolo personalizzato contenente il ruolo logging.fieldAccessor.

Console

Per assegnare agli utenti il ruolo logging.fieldAccessor utilizzando la console Google Cloud, completa i seguenti passaggi:

  1. Nel riquadro Modifica autorizzazioni, seleziona Accessotore di accesso campo log.
  2. Seleziona Aggiungi condizione.

    Aggiungi l'autorizzazione della funzione di accesso ai campi del log.

  3. Inserisci un titolo e una descrizione nei campi Title e Description.

  4. Seleziona la scheda Editor condizioni e inserisci la seguente espressione:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
    

    Aggiungi condizione all'autorizzazione.

  5. Seleziona Salva.

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

gcloud

Per concedere agli utenti il ruolo logging.fieldAccessor utilizzando gcloud CLI, completa i seguenti passaggi:

  1. Modifica il file policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. Aggiorna il file policy.json con altre associazioni:

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

    Esempio di associazione:

    "bindings": [
      {
        "condition": {
          "description": "Grants access to all restricted fields in a log bucket",
          "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'log-bucket-with-sensitive-data'",
          "title": "Log bucket condition for restricted fields"
        },
        "members": [
          "user":"222larabrown@gmail.com"
        ],
        "role": "roles/logging.fieldAccessor"
      }
    ]
    

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

Concessione di autorizzazioni per un sottoinsieme di campi con restrizioni

Per concedere agli utenti le autorizzazioni per un sottoinsieme di campi con restrizioni, imposta i campi a cui gli utenti possono accedere quando assegnano loro il ruolo logging.fieldAccessor o quando impostano un ruolo personalizzato contenente logging.fieldAccessor.

Tieni presente quanto segue:

  • L'ortografia e le lettere maiuscole del campo limitato così come vengono visualizzate nella configurazione del bucket devono corrispondere a quelle del campo con restrizioni 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 della chiave della mappa, sono sensibili alle maiuscole, ma i percorsi dei campi protobuf possono essere espressi come maiuscole e minuscole (snake_case) o come maiuscole e minuscole (camelCase).

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

    Anche se i percorsi dei campi sono riferimenti validi allo stesso campo, quando configuri limitazioni e autorizzazioni IAM devi associare ortografia, lettere maiuscole e minuscole. 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 di log validi, consulta Lingua delle query di Logging: valori e conversioni.

Console

Per concedere agli utenti l'accesso a un campo con restrizioni utilizzando la console Google Cloud, completa i seguenti passaggi:

  1. Nel riquadro Modifica autorizzazioni, seleziona Accessotore di accesso campo log.
  2. Seleziona Aggiungi condizione.

    Aggiungi l'autorizzazione della funzione di accesso ai campi del log.

  3. Inserisci un titolo e una descrizione nei campi Title e Description.

  4. Seleziona la scheda Editor condizioni e inserisci la seguente espressione:

    resource.name.extract("locations/global/buckets/BUCKET_ID /fields/{field}") == "RESTRICTED_FIELD"
    

    Aggiungi un sottoinsieme dei campi con restrizioni.

  5. Seleziona Salva.

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

gcloud

Per consentire agli utenti di accedere a un campo con restrizioni utilizzando gcloud CLI, completa questi passaggi:

  1. Modifica il file policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. Aggiorna il file policy.json con altre associazioni:

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_NAME/fields/{field}\") == 'RESTRICTED_FIELD'",
            "title": "TITLE"
          },
          "members": [
            "user":"USER_ID@DOMAIN.com"
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    Esempio di associazione:

    "bindings": [
      {
        "condition": {
          "description": "Give access to one restricted field that contains sensitive information",
          "expression": "resource.name.extract(\"locations/global/buckets/my-log-bucket/fields/{field}\") == 'jsonPyaload.data.ssn'",
          "title": "Access to restricted field"
        },
        "members": [
          "user":"222larabrown@gmail.com"
        ],
        "role": "roles/logging.fieldAccessor"
      }
    ]
    

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

Output di esempio

I seguenti esempi mostrano come viene visualizzato un LogEntry per gli utenti a cui è stato imposto l'accesso a un sottoinsieme di campi LogEntry.

Supponiamo che in un bucket siano stati limitati i seguenti campi:

  • jsonPayload
  • httpRequest
  • labels

Per gli utenti autorizzati ad accedere a tutti i campi con restrizioni, il valore LogEntry ha il seguente aspetto:

Tutti i campi del log visualizzati.

Per gli utenti autorizzati ad accedere solo al campo jsonPayload LogEntry con restrizioni, il valore LogEntry ha il seguente aspetto:

Mostrato solo il campo jsonPayload.

Per gli utenti non autorizzati a visualizzare i campi con restrizioni, il LogEntry ha il seguente aspetto:

Tutti i campi sono limitati.

Se un utente inserisce una restrizione globale che restituirebbe un LogEntry con un campo limitato, Logging nasconde l'intero LogEntry anziché solo il campo.

Elenco dei campi con restrizioni

Per elencare i campi con restrizioni in un bucket di log, esegui il seguente comando gcloud CLI:

gcloud logging buckets describe  BUCKET_ID  --location=LOCATION

Comando di esempio:

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

Quote e limiti

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

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

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