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 de los usuarios de un proyecto de Google Cloud, lo que te proporciona una forma más detallada de controlar los datos de registro a los que tiene acceso un usuario.
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 Google Cloud que no tienen los permisos necesarios para verlos. 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 registro en un bucket de Logging. Restringe y administras el control de acceso a nivel de campo con Google Cloud CLI.
Para restringir el acceso a los campos de registro, sigue estos pasos:
- Configura los campos
LogEntry
restringidos en un bucket de registro. - Otorga 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 desde un bucket que tiene configurados campos restringidos. Cualquier campo con 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 consideran el contenido de los campos denegados.
- Los resultados de
LogEntry
que se muestran 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 |
Ninguna |
protoPayload |
específica del servicio |
httpRequest |
campos anidados httpRequest |
labels |
Definido por el usuario |
sourceLocation |
campos anidados sourceLocation |
La restricción del acceso a un campo con campos anidados (como jsonPayload
o subrutas jsonPayload
específicas) también restringe el acceso a cualquiera de sus rutas 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 posterior.Para instalar la versión más reciente de gcloud CLI, ejecuta el siguiente comando de
update
:gcloud components update
Si quieres obtener instrucciones para instalar gcloud CLI, consulta Instala Google Cloud CLI.
Verifica que tengas una de las siguientes funciones de IAM 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 del campo
Las restricciones a nivel de campo se configuran a nivel de bucket y se pueden aplicar a un bucket existente o cuando se crea uno nuevo.
Restringe campos en un bucket nuevo
Para restringir los campos de registro cuando creas un nuevo bucket de registros, 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 bucket de registros 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 mostrar la lista de todo el conjunto de campos restringidos. A partir 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 solo enumeraste jsonPayload.data.entryDate
, se quitarán jsonPayload.data.ssn
y httpRequest.status
como campos restringidos.
Administra el acceso a campos restringidos
De forma predeterminada, Logging oculta todos los campos restringidos de 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 permiso para ver los registros en el bucket y la función 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, otórgales la función logging.fieldAccessor
o una personalizada que contenga la función logging.fieldAccessor
.
Consola
Para otorgar a los usuarios la función logging.fieldAccessor
con la consola de Google Cloud, completa los siguientes pasos:
- En el panel Editar permisos, selecciona Descriptor de acceso del campo de registro.
Selecciona Agregar condición.
Ingresa un título y una descripción en los campos Title y Description.
Selecciona la pestaña Editor de condiciones (Condition Editor) e ingresa la siguiente expresión:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
Selecciona Save.
Los permisos de Identity and Access Management se actualizan de inmediato.
gcloud
Para otorgar a los usuarios la función logging.fieldAccessor
con la
gcloud CLI, completa los siguientes pasos:
Edita el archivo
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
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" } ]
Vinculación de ejemplo:
"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 Identity and Access Management 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 los usuarios pueden acceder cuando les otorgues la función logging.fieldAccessor
o cuando configuren una función personalizada que contenga la logging.fieldAccessor
.
Ten en cuenta lo siguiente:
La ortografía y el uso de mayúsculas del campo restringido como aparecen 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 configuras el campo restringido como
jsonPayload
, debes otorgar permiso en el campojsonPayload
, no en el campoJsonpayload
.Las rutas de campo, incluidas las strings de claves de mapa, distinguen mayúsculas de minúsculas, pero las rutas de los campos de protobuf se pueden expresar como snake case sin distinción entre mayúsculas y minúsculas (snake_case) o como mayúsculas mediales (camelCase).
Por ejemplo,
logName
es un campo en el protobufLogEntry
;log_name
hace referencia al mismo campo. El campojsonPayload.fooBar
hace referencia a un campo diferente dejsonPayload.foo_bar
, ya que los nombres de campo debajo dejsonPayload
son claves de string de mapa. Sin embargo, sí hace referencia ajson_payload.fooBar
.Incluso si las rutas de los campos son referencias válidas para el mismo campo, debes coincidir con la ortografía, el uso de mayúsculas y minú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 parajsonPayload.foo
y no parajson_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 mediante la consola de Google Cloud, sigue estos pasos:
- En el panel Editar permisos, selecciona Descriptor de acceso del campo de registro.
Selecciona Agregar condición.
Ingresa un título y una descripción en los campos Title y Description.
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"
Selecciona Save.
Los permisos de Identity and Access Management se actualizan de inmediato.
gcloud
Para otorgar a los usuarios acceso a un campo restringido mediante gcloud CLI, completa los siguientes pasos:
Edita el archivo
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
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" } ]
Vinculación de ejemplo:
"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 Identity and Access Management se actualizan de inmediato.
Resultado de ejemplo
En los siguientes ejemplos, se muestra cómo se muestra un LogEntry
a 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
En el caso de los usuarios con permiso para acceder a todos los campos restringidos, LogEntry
se verá de la siguiente manera:
En el caso de los usuarios con permiso para acceder solo al campo restringido LogEntry
de jsonPayload
, LogEntry
se ve de la siguiente manera:
En el caso de los usuarios sin permiso para ver ninguno de los campos restringidos, LogEntry
se verá de la siguiente manera:
Si un usuario ingresa una restricción global que mostraría un LogEntry
con un campo restringido, Logging
ocultará el LogEntry
completo en lugar de solo el campo.
Cómo mostrar una lista de 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 por cada bucket de registros.
- Tamaño de los campos restringidos: La ruta de acceso del campo restringido debe ser inferior a 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.