Configurare l'accesso a livello di campo

Questo documento descrive i controlli di accesso a livello di campo e come impostarli su una 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, 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 gli campi LogEntry agli utenti di un progetto Google Cloud che non dispongono delle autorizzazioni necessarie per visualizzarli. Rispetto a visualizzazioni di log, che nascondono tutti i dati di LogEntry, i controlli di accesso a livello di campo nascondono i singoli campi di LogEntry. Puoi imposta sia i controlli dell'accesso a livello di campo sia le autorizzazioni delle visualizzazioni log su un di Logging. Puoi limitare e gestire l'accesso a livello di campo utilizzando Google Cloud CLI.

Per limitare l'accesso ai campi di log:

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

Logging controlla le autorizzazioni IAM quando un utente esegue query di un bucket in cui sono impostati campi con restrizioni. Tutti i campi con ACL configurate sono negati agli utenti senza il corrispondente logging.FieldAccessor per quel campo, ovvero:

  • L'utente riceve un errore di autorizzazione negata se tenta di eseguire query direttamente sui campi con limitazioni.
  • Le ricerche globali non prendono in considerazione i contenuti dei campi vietati.
  • Nei risultati di LogEntry restituiti non vengono inseriti i campi con restrizioni.

Campi con restrizioni

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 di accesso a livello di campo, segui questi passaggi: seguenti:

Imposta il controllo dell'accesso a livello di campo

Le restrizioni a livello di campo sono configurate bucket di log e può essere applicato a un modello esistente bucket di log o di creazione di un nuovo bucket di log.

Limita i campi in un nuovo bucket

Per limitare i campi dei log quando crei un nuovo bucket di log, esegui 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 di log.
  • DESCRIPTION: la descrizione del bucket di log.
  • RESTRICTED_FIELDS: l'elenco dei campi soggetti a restrizioni separati da virgole.

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 dei log in un bucket di log esistente, esegui 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 di nuovo l'intero insieme di campi con limitazioni. Basandosi sulla precedente Ad esempio, se vuoi limitare l'accesso al campo, jsonPayload.data.entryDate oltre ai campi già limitati jsonPayload.data.ssn e httpRequest.status, il tuo comando avrebbe questo aspetto questo:

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

Se non hai rimesso in elenco i campi già soggetti a limitazioni e hai elencato solo jsonPayload.data.entryDate, sia jsonPayload.data.ssn sia httpRequest.status verranno rimossi come campi con limitazioni.

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 hanno sia il ruolo per visualizzare i log nel bucket e il 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 limitazioni, assegna loro il ruolo logging.fieldAccessor o un ruolo personalizzato che lo contenga.

Console

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

  1. Nella console Google Cloud, 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 Console di amministrazione.

  2. Seleziona l'entità e fai clic su Modifica.
  3. Nel riquadro Modifica autorizzazioni, seleziona Accesso ai campi 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 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 l'interfaccia a riga di comando gcloud, completa i seguenti passaggi:

  1. Per salvare le informazioni sui criteri IAM correnti in un file, esegui il comando gcloud projects get-iam-policy 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 associazioni aggiuntive.

    Di seguito, il campo expression elenca solo un bucket di log. Pertanto, tutti i campi per le voci di log archiviate in quel bucket di log sono accessibili ai principali elencati 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à da utilizzare concedere 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à. 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 :

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

Le autorizzazioni di Identity and Access Management vengono aggiornate immediatamente.

Concessione delle autorizzazioni per un sottoinsieme di campi con restrizioni

Per concedere agli utenti le autorizzazioni per un sottoinsieme di campi con restrizioni, imposta i campi gli utenti possono accedere quando viene loro concesso il ruolo logging.fieldAccessor o quando L'impostazione di un ruolo personalizzato che contenga logging.fieldAccessor.

Tieni presente quanto segue:

  • L'ortografia e la combinazione di maiuscole e minuscole del campo con restrizioni così come vengono visualizzate nel configurazione del bucket deve corrispondere all'ortografia e alle maiuscole del limitato nel nome dell'autorizzazione IAM. Ad esempio, se impostate il campo con limitazioni su jsonPayload, dovete concedere l'autorizzazione al campo jsonPayload, non al campo Jsonpayload.

  • I percorsi dei campi, incluse le stringhe chiave mappa, sono sensibili alle maiuscole, ma i percorsi dei campi protobuf possono essere espressi in snake case (snake_case) senza distinzione tra maiuscole e minuscole o in camel case (camelCase) con distinzione tra maiuscole e minuscole.

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

    Anche se i percorsi dei campi sono riferimenti validi allo stesso campo, devi devono corrispondere all'ortografia, alle lettere maiuscole e alle maiuscole quando configuri le limitazioni e autorizzazioni IAM. Ad esempio, se specifichi una limitazione per 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 di query di log: 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. Nella console Google Cloud, 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 Accesso ai campi 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 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 concedere agli utenti l'accesso a un campo limitato utilizzando gcloud CLI, completa i seguenti passaggi:

  1. Per salvare le informazioni IAM in un file, esegui il comando gcloud projects get-iam-policy 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 ulteriori associazioni.

    Di seguito, il campo expression elenca campi specifici. Pertanto, solo i principali elencati nella sezione members hanno accesso ai campi delle voci di log archiviati nel bucket dei 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. 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 Identificatori principali. 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 comando gcloud projects set-iam-policy:

    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 uno specifico campo secondario httpRequest. Quando un utente esamina le voci di log, si verifica quanto segue

  • Per gli utenti che dispongono dell'autorizzazione per accedere a tutti i campi con restrizioni, tutti i campi in una voce di log sono visibili.

  • Per gli utenti che hanno l'autorizzazione ad accedere solo al campo con restrizioni jsonPayload LogEntry, tutti i campi senza restrizioni sono visibili, e il campo jsonPayload è visibile.

  • Per gli utenti che non dispongono dell'autorizzazione per visualizzare i campi con limitazioni, sono visibili solo i campi senza restrizioni.

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

Campi limitati per la scheda

Per elencare i campi con restrizioni in un bucket di log, esegui questo comando 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 imposti e utilizzi il 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 limitati: il percorso del campo limitato deve essere inferiore a 800 B di lunghezza.

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