Configura el acceso a nivel del campo

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 individuales LogEntry de los usuarios de un Google Cloud proyecto, lo que te proporciona una forma más detallada de controlar los datos de registro a los que puede acceder un usuario.

Descripción general

Logging usa el control de acceso a nivel de campo para ocultar LogEntry campos de los usuarios de un Google Cloud proyecto 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 del LogEntry. Puedes configurar controles de acceso a nivel de campo y permisos de vistas de registros en un bucket de Logging. Puedes restringir y administrar el control de 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.
  • Otorga solo a los usuarios que necesitan ver los campos restringidos el rol de IAM logging.fieldAccessor para esa ruta de acceso de campo o un rol que contenga permisos similares.

Logging verifica los permisos de IAM cuando un usuario consulta registros de un bucket que tiene campos restringidos establecidos. Se les niega el acceso a los usuarios a los campos con LCA configuradas 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.
  • Cualquier resultado LogEntry que se muestre omite los campos restringidos.

Campos restringidos

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

También puedes restringir el acceso a los campos 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:

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

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

    gcloud components update
    

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

  • Ejecuta el gcloud config set para configurar el Google Cloud proyecto predeterminado 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 uno de los siguientes roles de IAM para el Google Cloud proyecto 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 a nivel del bucket de registros y se pueden aplicar a un bucket de registros existente o cuando se crea uno nuevo.

Restringe campos en un bucket nuevo

Para restringir los campos de registro cuando creas un bucket de registros nuevo, ejecuta el gcloud logging buckets create comando. 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 separada por comas de los campos que se restringen.

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 gcloud logging buckets update comando:

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 deseas agregar campos a tus restricciones existentes, tu comando de actualización debe volver a enumerar todo el conjunto de campos restringidos. Según el 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ía 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 vuelves a enumerar los campos ya restringidos y solo enumeras jsonPayload.data.entryDate, se quitarán jsonPayload.data.ssn y httpRequest.status como campos restringidos.

Administra el acceso a los campos restringidos

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

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

Otorga permiso en todos los campos restringidos

Para otorgar a los usuarios permiso para todos los campos restringidos, otórgales el rol logging.fieldAccessor o un rol personalizado que contenga el rol logging.fieldAccessor.

Console

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

  1. En la Google Cloud consola de, dirígete 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 al campo de registro para el rol.
  4. Selecciona Agregar condición de IAM.
  5. Ingresa un título y una descripción en los campos 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 otorgar a los usuarios el rol logging.fieldAccessor con gcloud CLI, completa los siguientes pasos:

  1. Para guardar la información actual de la política de IAM en un archivo, ejecuta el gcloud projects get-iam-policy comando 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.

    En lo siguiente, el campo expression solo muestra un bucket de registros. Por lo tanto, todos los campos de las entradas de registro almacenadas en ese bucket de registros son accesibles para las principales que se enumeran 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: Es un identificador para la principal a la que deseas otorgar 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 de principal. En el campo members del policy.json archivo, 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 gcloud projects set-iam-policy comando:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

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

Otorga permisos en un subconjunto de campos restringidos

Para otorgar a los usuarios permisos en un subconjunto de los campos restringidos, establece los campos a los que los usuarios pueden acceder cuando les otorgas el rol logging.fieldAccessor o cuando configuras un rol personalizado que contiene 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 acceso de campo, incluidas las cadenas de claves de mapa, distinguen mayúsculas de minúsculas, pero las rutas de acceso de campo de protobuf se pueden expresar como minúsculas con guiones bajos (snake_case) que no distinguen mayúsculas de minúsculas o como mayúsculas mediales (camelCase) que distinguen mayúsculas de minúsculas.

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

    Incluso si las rutas de acceso de campo son referencias válidas al mismo campo, debes hacer coincidir la ortografía, el uso de mayúsculas y el caso cuando configuras restricciones y 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 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 Google Cloud consola, completa los siguientes pasos:

  1. En la Google Cloud consola de, dirígete 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 al campo de registro para el rol.
  4. Selecciona Agregar condición de IAM.
  5. Ingresa un título y una descripción en los campos 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 gcloud projects get-iam-policy comando 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.

    En lo siguiente, el campo expression muestra campos específicos. Por lo tanto, solo las principales que se enumeran en la sección members tienen acceso a esos 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: Es un identificador para la principal a la que deseas otorgar 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 de principal. En el campo members del policy.json archivo, 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 gcloud projects set-iam-policy comando:

    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. Cuando un usuario examina sus entradas de registro, ocurre lo siguiente:

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

  • Para los usuarios con permiso para acceder solo al campo jsonPayload LogEntry restringido, todos los campos no restringidos son visibles, y el campo jsonPayload es visible.

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

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

Enumera los campos restringidos

Para enumerar los campos restringidos en un bucket de registros, ejecuta el siguiente 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 campos para cada bucket de registros.
  • Tamaño de los campos restringidos: La ruta de acceso de campo restringida debe tener menos de 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.