Configura el acceso a nivel de campo

Este documento describe los controles de acceso a nivel de campo y cómo configurarlos en un Bucket de Logging. Los controles de acceso a nivel del campo te permiten ocultar a los usuarios campos individuales de LogEntry de un proyecto de Google Cloud, lo que te brinda una forma más detallada de controlar los registros datos a los que puede acceder un usuario.

Descripción general

Logging usa control de acceso a nivel de campo para ocultar LogEntry campos de los usuarios de un proyecto de Google Cloud que no cuenten con los campos permisos para ver los campos. Comparado con vistas de registros, que ocultan todo el LogEntry, los controles de acceso a nivel de campo ocultan campos individuales de LogEntry. Puedes establecer controles de acceso a nivel de campo y permisos de vistas de registro en un bucket de Logging. Restringes y administras el acceso a nivel de campo con Google Cloud CLI.

Para restringir el acceso a los campos de registro, haz lo siguiente:

  • Configura los campos LogEntry restringidos en un bucket de registro.
  • Proporciona únicamente el acceso a los campos restringidos a aquellos usuarios que necesitan visualizarlos. logging.fieldAccessor rol de IAM para esa ruta de campo, o un rol que contiene permisos similares.

Logging verifica los permisos de IAM cuando un usuario consulta de un bucket que tiene configurados campos restringidos. Cualquier campo con Las LCA configuradas se rechazan a los usuarios sin las LCA logging.FieldAccessor para ese campo, lo que significa lo siguiente:

  • El usuario recibe un error de denegación de permisos si intenta directamente consultar los campos restringidos.
  • Las búsquedas globales no tienen en cuenta el contenido de los campos denegados.
  • Cualquier resultado de LogEntry que se muestra omite los campos restringidos.

Campos restringidos

Puedes restringir el acceso al campo jsonPayload, que también restringe el acceso a sus rutas anidadas.

También puedes restringir el acceso a los campos de hoja de lo siguiente:

Por ejemplo, puedes restringir el acceso al campo labels.check_id.

Antes de comenzar

Antes de comenzar a configurar los controles de acceso a nivel de campo, haz lo siguiente: lo siguiente:

  • Verifica que gcloud --version informe la versión 362.0.0 o una posterior.

    Para instalar la versión más reciente de gcloud CLI, ejecuta el siguiente comando: gcloud components update :

    gcloud components update
    

    Para obtener instrucciones sobre cómo instalar gcloud CLI, consulta Instala Google Cloud CLI.

  • Ejecuta gcloud config set. para configurar la configuración Proyecto de Google Cloud para tus comandos de Google Cloud CLI. Antes de ejecutar el comando, realiza el siguiente reemplazo:

    • PROJECT_ID: Es el identificador del proyecto.

    Comando:

    gcloud config set project PROJECT_ID
    
  • Verifica que tengas una de las siguientes opciones de IAM roles para el proyecto de Google Cloud que contiene el bucket:

    Para obtener información sobre los roles de IAM, consulta la Guía de control de acceso de Logging.

Establece el control de acceso a nivel de campo

Las restricciones a nivel de campo se configuran bucket de registros y se puede aplicar a un bucket bucket de registros o cuando crees uno nuevo.

Restringe campos en un bucket nuevo

Para restringir los campos de registro cuando creas un nuevo bucket de registros, ejecuta el comando gcloud logging buckets create kubectl. Antes de ejecutar el comando, realiza los siguientes reemplazos:

  • BUCKET_ID: Es el nombre o el ID del bucket de registros.
  • LOCATION: Es la ubicación del bucket de registros.
  • DESCRIPTION: Es la descripción del bucket de registros.
  • RESTRICTED_FIELDS: Es la lista de campos que se restringirán separados por comas.

Comando:

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

Comando de ejemplo:

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

Restringe campos en un bucket existente

Para restringir los campos de registro en un bucket de registros existente, ejecuta el comando gcloud logging buckets update :

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

Comando de ejemplo:

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

Si quieres agregar campos a tus restricciones existentes, tu comando update debe volver a enumerar todo el conjunto de campos restringidos. Sobre la base del modelo anterior por ejemplo, si quieres restringir el acceso al campo jsonPayload.data.entryDate además de los campos ya restringidos jsonPayload.data.ssn y httpRequest.status, tu comando se vería así: esto:

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

Si no volviste a incluir los campos que ya están restringidos, pero acabas de enumerarlos jsonPayload.data.entryDate; luego, jsonPayload.data.ssn y httpRequest.status se quitaría como campos restringidos.

Administra el acceso a campos restringidos

De forma predeterminada, Logging oculta todos los campos restringidos a los usuarios que No tienen el rol logging.fieldAccessor o uno con permisos similares. Logging expone los campos restringidos a los usuarios que tienen permiso para ver los registros del bucket y el rol logging.fieldAccessor

Puedes modificar el comportamiento predeterminado para limitar los subconjuntos de campos restringidos a usuarios específicos.

Otorga permisos en todos los campos restringidos

Para otorgar a los usuarios permiso para todos los campos restringidos, debes darles la logging.fieldAccessor o un rol personalizado que contenga el logging.fieldAccessor.

Console

Para otorgar a los usuarios el rol logging.fieldAccessor con la consola de Google Cloud, sigue estos pasos: completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página IAM:

    Ir a IAM

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es IAM y administrador.

  2. Selecciona la principal y haz clic en Editar.
  3. En el panel Editar permisos, selecciona Acceso a campos de registro. para el puesto.
  4. Selecciona Agregar condición de IAM.
  5. Ingresa un título y una descripción en Título y Descripción. .
  6. Selecciona la pestaña Editor de condiciones (Condition Editor) e ingresa la siguiente expresión:

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

Los permisos de Identity and Access Management se actualizan de inmediato.

gcloud

Para darles a los usuarios el rol logging.fieldAccessor con el gcloud CLI, completa los siguientes pasos:

  1. Para guardar la información de la política de IAM actual en un archivo, ejecuta gcloud projects get-iam-policy y guarda el resultado en un archivo:

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

    El comando anterior guarda la información en un archivo llamado policy.json

  2. Actualiza el archivo policy.json con vinculaciones adicionales.

    A continuación, el campo expression solo enumera un bucket de registros. Por lo tanto, todos los campos de entradas de registro almacenados accesible para las principales que se indican en la sección members.

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

    En el ejemplo anterior, los campos tienen los siguientes significados:

    • PRINCIPAL: Un identificador para la principal que deseas a la que otorgas el rol. Los identificadores principales suelen tener el siguiente formato: PRINCIPAL-TYPE:ID Por ejemplo, user:my-user@example.com. Para obtener una lista completa de los formatos que puede tener PRINCIPAL, consulta Identificadores principales. En el campo members de la policy.json, usa el formato "PRINCIPAL-TYPE":"ID"
    • DESCRIPTION: Es una descripción de la condición.
    • TITLE: Es un título para la condición.
  3. Para aplicar el archivo policy.json actualizado, ejecuta el siguiente comando: gcloud projects set-iam-policy :

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

Los permisos de Identity and Access Management se actualizan de inmediato.

Cómo otorgar permisos sobre un subconjunto de campos restringidos

Para otorgar permisos a los usuarios sobre un subconjunto de los campos restringidos, configura los campos podrán acceder los usuarios cuando les otorguen el rol logging.fieldAccessor o cuando establecer un rol personalizado que contenga el logging.fieldAccessor

Ten en cuenta lo siguiente:

  • La ortografía y el uso de mayúsculas del campo restringido tal como aparece en la configuración del bucket debe coincidir con la ortografía y el uso de mayúsculas de restringido en el nombre del permiso de IAM. Por ejemplo, Si estableces el campo restringido como jsonPayload, debes otorgar permiso el campo jsonPayload, no el campo Jsonpayload.

  • Las rutas de campo, incluidas las cadenas map-key, distinguen mayúsculas de minúsculas, pero protobuf Las rutas de campo se pueden expresar como Snake case, que no distingue mayúsculas de minúsculas. (snake_case) o que distingue mayúsculas de minúsculas (camelCase).

    Por ejemplo, logName es un campo en el protobuf LogEntry. log_name hace referencia al mismo campo. El campo jsonPayload.fooBar hace referencia al un campo diferente al de jsonPayload.foo_bar, ya que los nombres de los campos debajo jsonPayload son claves de cadena de mapa. pero sí se refiere a json_payload.fooBar

    Incluso si las rutas de campo son referencias válidas para el mismo campo, debes deben coincidir con la ortografía, el uso de mayúsculas y las mayúsculas y minúsculas cuando configures restricciones y permisos de IAM. Si, por ejemplo, especificas una en jsonPayload.foo, debes configurar IAM permisos para jsonPayload.foo y no para json_payload.foo.

Para obtener más información sobre los tipos de campos de registro válidos, consulta Lenguaje de consulta de Logging: valores y conversiones.

Console

Para otorgar a los usuarios acceso a un campo restringido con la consola de Google Cloud, sigue estos pasos: completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página IAM:

    Ir a IAM

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es IAM y administrador.

  2. Selecciona la principal y haz clic en Editar.
  3. En el panel Editar permisos, selecciona Acceso a campos de registro. para el puesto.
  4. Selecciona Agregar condición de IAM.
  5. Ingresa un título y una descripción en Título y Descripción. .
  6. Selecciona la pestaña Editor de condiciones (Condition Editor) e ingresa la siguiente expresión:

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

Los permisos de Identity and Access Management se actualizan de inmediato.

gcloud

Para otorgar a los usuarios acceso a un campo restringido con gcloud CLI, completa los siguientes pasos:

  1. Para guardar la información de IAM en un archivo, ejecuta el comando gcloud projects get-iam-policy y guarda el resultado en un archivo:

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

    El comando anterior guarda la información en un archivo llamado policy.json

  2. Actualiza el archivo policy.json con vinculaciones adicionales.

    A continuación, el campo expression enumera campos específicos. Por lo tanto, solo las principales que se indican en la sección members tienen acceso a los campos de las entradas de registro que se almacenan en el bucket de registros especificado.

    "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"
        }
    ]
    

    En el ejemplo anterior, los campos tienen los siguientes significados:

    • PRINCIPAL: Un identificador para la principal que deseas a la que otorgas el rol. Los identificadores principales suelen tener el siguiente formato: PRINCIPAL-TYPE:ID Por ejemplo, user:my-user@example.com. Para obtener una lista completa de los formatos que puede tener PRINCIPAL, consulta Identificadores principales. En el campo members de la policy.json, usa el formato "PRINCIPAL-TYPE":"ID"
    • DESCRIPTION: Es una descripción de la condición.
    • TITLE: Es un título para la condición.
  3. Para aplicar el archivo policy.json actualizado, ejecuta el siguiente comando: gcloud projects set-iam-policy :

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

Los permisos de Identity and Access Management se actualizan de inmediato.

Ejemplo

Supongamos que un bucket de registros restringe el campo jsonPayload, una etiqueta específica, y un subcampo httpRequest específico. Lo siguiente ocurre cuando un usuario examina sus entradas de registro

  • Para los usuarios con permiso para acceder a todos los campos restringidos, de una entrada de registro sean visibles.

  • Para usuarios con permiso para acceder solo a la jsonPayload restringida LogEntry, todos los campos sin restricciones son visibles, y el campo jsonPayload es visible.

  • Para los usuarios que no tienen permiso para ver ninguno de los campos restringidos, solo son visibles los campos sin restricciones.

Si un usuario escribe una consulta con un restricción global, Luego, las entradas de registro que contienen un campo restringido se omiten de la respuesta.

Muestra una lista de campos restringidos

Para enumerar los campos restringidos en un bucket de registros, ejecuta el siguiente comando: gcloud logging buckets describe:

gcloud logging buckets describe BUCKET_ID --location=LOCATION

Comando de ejemplo:

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

Cuotas y límites

Cuando configures y uses el control de acceso a nivel de campo, ten en cuenta lo siguiente:

  • Cantidad de campos restringidos: Puedes restringir hasta 20 para cada bucket de registros.
  • Tamaño de los campos restringidos: La ruta del campo restringido debe ser menor que 800 B de longitud.

Para obtener más información sobre los límites que podrían aplicarse a tu uso de Cloud Logging, consulta Cuotas y límites.