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:
Verifica che
gcloud --version
segnali la versione di Google Cloud CLI come versione 362.0.0 o successive.Per installare la versione più recente di gcloud CLI, esegui questo comando
update
:aggiornamento componenti gcloud
Per istruzioni su come installare gcloud CLI, consulta Installazione di Google Cloud CLI.
Verifica di disporre di uno dei seguenti ruoli IAM per il progetto Google Cloud che contiene il bucket:
Per informazioni sull'impostazione dei ruoli IAM, consulta la guida al controllo dell'accesso di Logging.
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:
- Nel riquadro Modifica autorizzazioni, seleziona Accessotore di accesso campo log.
Seleziona Aggiungi condizione.
Inserisci un titolo e una descrizione nei campi Title e Description.
Seleziona la scheda Editor condizioni e inserisci la seguente espressione:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
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:
Modifica il file
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
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 campojsonPayload
, non al campoJsonpayload
.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 protobufLogEntry
;log_name
si riferisce allo stesso campo. Il campojsonPayload.fooBar
fa riferimento a un campo diverso dajsonPayload.foo_bar
, in quanto i nomi dei campi sottojsonPayload
sono chiavi di stringa della mappa; tuttavia, fa riferimento ajson_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 perjsonPayload.foo
e non perjson_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:
- Nel riquadro Modifica autorizzazioni, seleziona Accessotore di accesso campo log.
Seleziona Aggiungi condizione.
Inserisci un titolo e una descrizione nei campi Title e Description.
Seleziona la scheda Editor condizioni e inserisci la seguente espressione:
resource.name.extract("locations/global/buckets/BUCKET_ID /fields/{field}") == "RESTRICTED_FIELD"
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:
Modifica il file
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
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:
Per gli utenti autorizzati ad accedere solo al campo jsonPayload
LogEntry
con restrizioni, il valore LogEntry
ha il seguente aspetto:
Per gli utenti non autorizzati a visualizzare i campi con restrizioni,
il LogEntry
ha il seguente aspetto:
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.