Questo documento descrive i controlli dell'accesso a livello di campo e come impostarli su un
bucket Logging.
I controlli dell'accesso a livello di campo consentono di nascondere i singoli campi LogEntry agli utenti di un progetto Google Cloud , offrendoti un modo più granulare per controllare i dati dei log a cui un utente può accedere.
Panoramica
La registrazione utilizza il controllo dell'accesso a livello di campo per nascondere
LogEntry
i campi agli utenti di un progetto Google Cloud 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 del LogEntry. Puoi impostare sia i controlli dell'accesso a livello di campo sia le autorizzazioni di visualizzazione dei log in un bucket 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
LogEntrycon limitazioni in un bucket di log. - Concedi solo agli utenti che devono visualizzare i campi con limitazioni il ruolo IAM
logging.fieldAccessorper quel percorso del campo o un ruolo che contenga autorizzazioni simili.
Logging controlla le autorizzazioni IAM quando un utente esegue query
sui log di un bucket con campi con restrizioni impostati. Qualsiasi campo con
ACL configurate viene negato agli utenti senza il corrispondente
logging.FieldAccessor per quel campo, il che significa che:
- L'utente riceve un errore di autorizzazione negata se tenta di eseguire query direttamente sui campi con restrizioni.
- Le ricerche globali non prendono in considerazione i contenuti dei campi rifiutati.
- I risultati
LogEntryrestituiti omettono i campi con limitazioni.
Campi con limitazioni
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 quanto segue:
Ad esempio, puoi limitare l'accesso al campo labels.check_id.
Prima di iniziare
Prima di iniziare a impostare i controlli degli accessi a livello di campo, svolgi le seguenti operazioni:
Verifica che
gcloud --versionriporti la versione 362.0.0 o successive.Per installare l'ultima versione di gcloud CLI, esegui il comando
gcloud components update:gcloud components updatePer istruzioni su come installare gcloud CLI, vedi Installazione di Google Cloud CLI.
Esegui
gcloud config setper configurare il progetto Google Cloud predefinito per i comandi Google Cloud CLI. Prima di eseguire il comando, effettua la seguente sostituzione:- PROJECT_ID: l'identificatore del progetto.
Comando:
gcloud config set project PROJECT_IDVerifica 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.
Impostare 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 di log durante la creazione di un nuovo bucket di log, esegui il comando
gcloud logging buckets create.
Prima di eseguire il comando, effettua le seguenti sostituzioni:
- BUCKET_ID: il nome o l'ID del bucket dei log.
- LOCATION: la posizione del bucket dei log.
- DESCRIPTION: la descrizione del bucket di log.
- RESTRICTED_FIELDS: l'elenco separato da virgole dei campi con limitazioni.
Comando:
gcloud logging buckets create BUCKET_ID --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"
Limitare i campi in un bucket esistente
Per limitare i campi di log in un bucket di log esistente, esegui il comando gcloud logging buckets update:
gcloud logging buckets update BUCKET_ID --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 elencare nuovamente l'intero insieme di campi con limitazioni. 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 il seguente
aspetto:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"
Se non hai reinserito i campi già limitati e hai elencato solo
jsonPayload.data.entryDate, sia jsonPayload.data.ssn che
httpRequest.status verranno rimossi come campi con limitazioni.
Gestire l'accesso ai campi con restrizioni
Per impostazione predefinita, la registrazione nasconde tutti i campi con limitazioni agli utenti che
non dispongono del ruolo logging.fieldAccessor o di un ruolo con autorizzazioni simili.
La registrazione espone i campi con limitazioni 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.
Concessione dell'autorizzazione per tutti i campi con limitazioni
Per concedere agli utenti l'autorizzazione per tutti i campi con limitazioni, 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 console Google Cloud ,
completa i seguenti passaggi:
-
Nella console Google Cloud vai alla pagina IAM:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e amministrazione.
- Seleziona il principal e fai clic su Modifica.
- Nel riquadro Modifica autorizzazioni, seleziona Log Field Accessor per il ruolo.
- Seleziona Aggiungi condizione IAM.
- Inserisci un titolo e una descrizione nei campi Titolo e Descrizione.
Seleziona la scheda Editor delle condizioni e inserisci la seguente espressione:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"Seleziona Salva.
Le autorizzazioni Identity and Access Management vengono aggiornate immediatamente.
gcloud
Per assegnare agli utenti il ruolo logging.fieldAccessor utilizzando
gcloud CLI, completa i seguenti passaggi:
Per salvare le informazioni sui criteri IAM correnti in un file, esegui il comando
gcloud projects get-iam-policye salva l'output in un file:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonIl comando precedente salva le informazioni in un file denominato
policy.json.Aggiorna il file
policy.jsoncon binding aggiuntivi.Di seguito, il campo
expressionelenca solo un bucket di log. Pertanto, tutti i campi delle voci di log archiviate in questo bucket di log sono accessibili ai principal elencati nella sezionemembers."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
concedere il ruolo. Gli identificatori principali in genere hanno il seguente formato:
PRINCIPAL-TYPE:ID. Ad esempio:user:my-user@example.com. Per un elenco completo dei formati che può averePRINCIPAL, consulta Identificatori delle entità. Nel campomembersdel filepolicy.json, utilizza il formato"PRINCIPAL-TYPE":"ID". - DESCRIPTION: una descrizione della condizione.
- TITLE: un titolo per la condizione.
- PRINCIPAL: un identificatore per l'entità a cui vuoi
concedere il ruolo. Gli identificatori principali in genere hanno il seguente formato:
Per applicare il file
policy.jsonaggiornato, esegui il comandogcloud projects set-iam-policy:gcloud projects set-iam-policy PROJECT_ID policy.json
Le autorizzazioni Identity and Access Management vengono aggiornate immediatamente.
Concessione di autorizzazioni su un sottoinsieme di campi con limitazioni
Per concedere agli utenti le autorizzazioni su un sottoinsieme dei campi con limitazioni, 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 l'uso delle maiuscole e minuscole del campo con limitazioni così come appare nella configurazione del bucket devono corrispondere all'ortografia e all'uso delle maiuscole e minuscole del campo con limitazioni nel nome dell'autorizzazione IAM. Ad esempio, se imposti il campo con limitazioni come
jsonPayload, devi concedere l'autorizzazione per il campojsonPayload, non per il campoJsonpayload.I percorsi dei campi, incluse le stringhe delle chiavi della mappa, fanno distinzione tra maiuscole e minuscole, ma i percorsi dei campi protobuf possono essere espressi come snake case senza distinzione tra maiuscole e minuscole (snake_case) o camel case con distinzione tra maiuscole e minuscole (camelCase).
Ad esempio,
logNameè un campo nel protobufLogEntry;log_namefa riferimento allo stesso campo. Il campojsonPayload.fooBarsi riferisce a un campo diverso dajsonPayload.foo_bar, poiché i nomi dei campi sottojsonPayloadsono chiavi stringa della mappa; tuttavia, si riferisce ajson_payload.fooBar.Anche se i percorsi dei campi sono riferimenti validi allo stesso campo, devi corrispondere l'ortografia, l'uso delle maiuscole e minuscole quando configuri le limitazioni e le autorizzazioni IAM. Se, ad esempio, specifichi una limitazione per
jsonPayload.foo, devi configurare le autorizzazioni IAM perjsonPayload.fooe non perjson_payload.foo.
Per ulteriori informazioni sui tipi di campi di log validi, consulta Linguaggio di query di logging: valori e conversioni.
Console
Per concedere agli utenti l'accesso a un campo con limitazioni utilizzando la console Google Cloud , completa i seguenti passaggi:
-
Nella console Google Cloud vai alla pagina IAM:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e amministrazione.
- Seleziona il principal e fai clic su Modifica.
- Nel riquadro Modifica autorizzazioni, seleziona Log Field Accessor per il ruolo.
- Seleziona Aggiungi condizione IAM.
- Inserisci un titolo e una descrizione nei campi Titolo e Descrizione.
Seleziona la scheda Editor delle condizioni e inserisci la seguente espressione:
resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"Seleziona Salva.
Le autorizzazioni Identity and Access Management vengono aggiornate immediatamente.
gcloud
Per concedere agli utenti l'accesso a un campo con limitazioni utilizzando gcloud CLI, completa i seguenti passaggi:
Per salvare le informazioni IAM in un file, esegui il comando
gcloud projects get-iam-policye salva l'output in un file:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonIl comando precedente salva le informazioni in un file denominato
policy.json.Aggiorna il file
policy.jsoncon binding aggiuntivi.Di seguito, il campo
expressionelenca campi specifici. Pertanto, solo le entità elencate nella sezionemembershanno accesso ai campi delle voci di log archiviati 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
concedere il ruolo. Gli identificatori principali in genere hanno il seguente formato:
PRINCIPAL-TYPE:ID. Ad esempio:user:my-user@example.com. Per un elenco completo dei formati che può averePRINCIPAL, consulta Identificatori delle entità. Nel campomembersdel filepolicy.json, utilizza il formato"PRINCIPAL-TYPE":"ID". - DESCRIPTION: una descrizione della condizione.
- TITLE: un titolo per la condizione.
- PRINCIPAL: un identificatore per l'entità a cui vuoi
concedere il ruolo. Gli identificatori principali in genere hanno il seguente formato:
Per applicare il file
policy.jsonaggiornato, esegui il comandogcloud projects set-iam-policy:gcloud projects set-iam-policy PROJECT_ID policy.json
Le autorizzazioni 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,
Per gli utenti con l'autorizzazione di accedere a tutti i campi con restrizioni, tutti i campi di una voce di log sono visibili.
Per gli utenti con l'autorizzazione ad accedere solo al campo
jsonPayloadLogEntrycon limitazioni, tutti i campi senza limitazioni sono visibili e il campojsonPayloadè visibile.Per gli utenti che non dispongono dell'autorizzazione per visualizzare uno dei campi con limitazioni, sono visibili solo i campi senza limitazioni.
Se un utente scrive una query con una limitazione globale, le voci di log che contengono un campo con limitazioni vengono omesse dalla risposta.
Elenco dei campi con restrizioni
Per elencare i campi con limitazioni in un bucket di log, esegui il seguente
gcloud logging buckets describe:
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 limitazioni: puoi limitare fino a 20 campi per ogni bucket di log.
- Dimensione dei campi con limitazioni: il percorso del campo con limitazioni deve essere inferiore a 800 B di lunghezza.
Per saperne di più sui limiti che potrebbero essere applicati al tuo utilizzo di Cloud Logging, consulta Quote e limiti.