Control de acceso a nivel de campo

Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

En este documento, se describen los controles de acceso a nivel de campo y cómo configurarlos en un bucket de Logging. Los controles de acceso a nivel de campo te permiten ocultar campos LogEntry individuales a los usuarios de un proyecto de Google Cloud, lo que proporciona una forma más detallada de controlar los datos de registros a los que puede acceder un usuario.

Si configuras controles de acceso a nivel de campo en un bucket de registros, no puedes actualizar el bucket de registros para usar estadísticas de registros. Del mismo modo, no puedes configurar los controles de acceso a nivel de campo en los buckets de registros que se actualizaron para usar las estadísticas de registros.

Descripción general

Logging usa el control de acceso a nivel de campo para ocultar los campos LogEntry de los usuarios de un proyecto de Cloud que no tienen los permisos necesarios para ver los campos. En comparación con las vistas de registros, que ocultan todo el LogEntry, los controles de acceso a nivel de campo ocultan campos individuales de LogEntry. Puedes configurar controles de acceso a nivel de campo y permisos de vistas de registro en un bucket de Logging. Restringe y administra el control de acceso a nivel de campo mediante 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.
  • Otorga solo a los usuarios que necesitan ver los campos restringidos la función de IAM logging.fieldAccessor para esa ruta de campo o una función que contenga permisos similares.

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

  • El usuario recibe un error de permiso denegado si intenta consultar directamente los campos restringidos.
  • Las búsquedas globales no tienen en cuenta el contenido de los campos denegados.
  • Los resultados LogEntry que se muestren omiten los campos restringidos.

Campos restringidos

Puedes restringir el acceso a cualquier combinación de los siguientes campos LogEntry:

Campo LogEntry Campos anidados del campo superior LogEntry
jsonPayload Definido por el usuario
textPayload Ninguno
protoPayload específico del servicio
httpRequest campos anidados httpRequest
labels Definido por el usuario
sourceLocation campos anidados sourceLocation

Restringir el acceso a un campo con campos anidados (como jsonPayload o subrutas de acceso específicas de jsonPayload) también restringe el acceso a cualquiera de sus rutas de acceso anidadas.

Antes de comenzar

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

  • Verifica que gcloud --version informe la versión de Google Cloud CLI como versión 362.0.0 o superior.

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

    gcloud components update

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

  • Verifica que tengas una de las siguientes funciones de IAM para el proyecto de Cloud que contiene el depósito:

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

Configura el control de acceso a nivel de campo

Las restricciones a nivel de campo se configuran a nivel de bucket y se pueden aplicar a un bucket existente o cuando creas uno nuevo.

Restringe campos en un bucket nuevo

Para restringir los campos de registro cuando creas un depósito de registro nuevo, ejecuta el siguiente comando de la CLI de gcloud:

gcloud logging buckets create BUCKET_NAME --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 depósito de registro existente, ejecuta el siguiente comando de la CLI de gcloud:

gcloud logging buckets update BUCKET_NAME --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 deseas agregar campos a tus restricciones existentes, el comando de actualización debe volver a enumerar todo el conjunto de campos restringidos. Sobre la base del ejemplo anterior, si deseas 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á de la siguiente manera:

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

Si no volviste a enumerar los campos ya restringidos y acabas de enumerar jsonPayload.data.entryDate, jsonPayload.data.ssn y httpRequest.status se quitarán como campos restringidos.

Administra el acceso a los campos restringidos

De forma predeterminada, Logging oculta todos los campos restringidos a los usuarios que no tienen la función logging.fieldAccessor o una función con permisos similares. Logging expone los campos restringidos a los usuarios que tienen el permiso para ver los registros en el depósito y la función logging.fieldAccessor.

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

Otorga permisos en todos los campos restringidos

Para otorgar permisos a todos los campos restringidos, otorga a los usuarios la función logging.fieldAccessor o una función personalizada que contenga la función logging.fieldAccessor.

Consola

Para otorgar a los usuarios la función logging.fieldAccessor mediante Google Cloud Console, completa los siguientes pasos:

  1. En el panel Editar permisos, selecciona Descriptor de acceso de campo de registro.
  2. Selecciona Agregar condición.

    Agrega el permiso de acceso de campo de registro.

  3. Ingresa un título y una descripción en los campos Título y Descripción.

  4. Selecciona la pestaña Editor de condiciones (Condition Editor) e ingresa la siguiente expresión:

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

    Agregar condición al permiso

  5. Selecciona Save.

Los permisos de administración de identidades y accesos se actualizan de inmediato.

gcloud

Para otorgar a los usuarios la función logging.fieldAccessor mediante la CLI de gcloud, completa los siguientes pasos:

  1. Edita el archivo policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. Actualiza el archivo policy.json con vinculaciones adicionales:

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

    Ejemplo de vinculación:

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

Los permisos de administración de identidades y accesos se actualizan de inmediato.

Otorga permisos en un subconjunto de campos restringidos

Para otorgar permisos a los usuarios en un subconjunto de los campos restringidos, configura los campos a los que pueden acceder los usuarios cuando les otorgues la función logging.fieldAccessor o cuando establezcas una función personalizada 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 deben coincidir con la ortografía y el uso de mayúsculas del campo restringido en el nombre del permiso de IAM. Por ejemplo, si estableces el campo restringido como jsonPayload, debes otorgar permiso en el campo jsonPayload, no en el campo Jsonpayload.

  • Las rutas de campo, incluidas las strings de clave de mapa, distinguen entre mayúsculas y minúsculas, pero las rutas de los campos protobuf pueden expresarse como mayúsculas y minúsculas (camelCase) que no distinguen entre mayúsculas y minúsculas.

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

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

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

Consola

Para otorgar a los usuarios acceso a un campo restringido con Google Cloud Console, sigue estos pasos:

  1. En el panel Editar permisos, selecciona Descriptor de acceso de campo de registro.
  2. Selecciona Agregar condición.

    Agrega el permiso de acceso de campo de registro.

  3. Ingresa un título y una descripción en los campos Título y Descripción.

  4. 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_FIELD"
    

    Agrega un subconjunto de los campos restringidos.

  5. Selecciona Save.

Los permisos de administración de identidades y accesos se actualizan de inmediato.

gcloud

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

  1. Edita el archivo policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. Actualiza el archivo policy.json con vinculaciones adicionales:

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

    Ejemplo de vinculación:

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

Los permisos de administración de identidades y accesos se actualizan de inmediato.

Resultado de ejemplo

En los siguientes ejemplos, se muestra cómo aparece un LogEntry para los usuarios a los que se les restringió el acceso a un subconjunto de los campos LogEntry.

Supongamos que un bucket tiene los siguientes campos restringidos:

  • jsonPayload
  • httpRequest
  • labels

Para los usuarios que tienen permiso de acceso a todos los campos restringidos, LogEntry se ve de la siguiente manera:

Se muestran todos los campos de registro.

Para los usuarios que tienen permiso para acceder solo al campo restringido jsonPayload LogEntry, LogEntry se ve de la siguiente manera:

Solo se muestra el campo jsonPayload.

Para los usuarios que no tienen permiso para ver cualquiera de los campos restringidos, LogEntry se ve de la siguiente manera:

Todos los campos están restringidos.

Si un usuario ingresa una restricción global que mostraría un LogEntry con un campo restringido, Logging oculta todo el LogEntry en lugar de solo el campo.

Enumera campos restringidos

Para enumerar los campos restringidos en un bucket de registros, ejecuta el siguiente comando de la CLI de gcloud:

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 campos para cada bucket de registros.
  • Tamaño de los campos restringidos: La ruta del campo restringido debe tener menos de 800 B de longitud.

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