En este documento se describen los controles de acceso a nivel de campo y cómo configurarlos en un segmento de registro.
Los controles de acceso a nivel de campo te permiten ocultar campos LogEntry
concretos a los usuarios de un Google Cloud proyecto, lo que te ofrece una forma más granular de controlar los datos de registro a los que puede acceder un usuario.
Información general
El registro usa el control de acceso a nivel de campo para ocultar los campos LogEntry
a los usuarios de un proyecto Google Cloud que no tengan 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 concretos del LogEntry
. Puedes definir controles de acceso a nivel de campo y permisos de vistas de registro en un segmento de Logging. Puedes restringir y gestionar el control de acceso a nivel de campo mediante Google Cloud CLI.
Para restringir el acceso a los campos de registro, sigue estos pasos:
- Configura los campos
LogEntry
restringidos en un segmento de registro. - Solo debes asignar el rol de gestión de identidades y accesos
logging.fieldAccessor
a los usuarios que necesiten ver los campos restringidos, o bien un rol que contenga permisos similares.
El registro comprueba los permisos de IAM cuando un usuario consulta los registros de un segmento que tiene campos restringidos. Los campos con
ACLs configuradas se deniegan a los usuarios que no tengan el
logging.FieldAccessor
correspondiente a ese campo, lo que significa que:
- 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 de
LogEntry
que se devuelvan omitirán los campos restringidos.
Campos restringidos
Puedes restringir el acceso al campo jsonPayload
, lo que también restringe el acceso a sus rutas 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 empezar
Antes de empezar a configurar los controles de acceso a nivel de campo, haz lo siguiente:
Comprueba que
gcloud --version
informa de la versión 362.0.0 o una posterior.Para instalar la versión más reciente de la CLI de gcloud, ejecuta el comando
gcloud components update
:gcloud components update
Para obtener instrucciones sobre cómo instalar gcloud CLI, consulta Instalar Google Cloud CLI.
Ejecuta
gcloud config set
para configurar el proyectoGoogle Cloud predeterminado de los comandos de la CLI de Google Cloud. Antes de ejecutar el comando, haz la siguiente sustitución:- PROJECT_ID: identificador del proyecto.
Comando:
gcloud config set project PROJECT_ID
Comprueba que tienes uno de los siguientes roles de gestión de identidades y accesos en el proyecto Google Cloud que contiene el contenedor:
Para obtener información sobre cómo definir roles de gestión de identidades y accesos, consulta la guía de control de acceso de Logging.
Configurar el control de acceso a nivel de campo
Las restricciones a nivel de campo se configuran a nivel del contenedor de registro y se pueden aplicar a un contenedor de registro que ya tengas o al crear uno.
Restringir campos en un nuevo contenedor
Para restringir los campos de registro al crear un nuevo bucket de registro, ejecuta el comando
gcloud logging buckets create
.
Antes de ejecutar el comando, haz las siguientes sustituciones:
- BUCKET_ID: nombre o ID del segmento de registro.
- LOCATION: la ubicación del segmento de registro.
- DESCRIPTION: la descripción del segmento de registro.
- RESTRICTED_FIELDS: lista separada por comas de los campos que se van a restringir.
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"
Restringir campos en un segmento
Para restringir los campos de registro en un bucket de registro, 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 añadir campos a las restricciones que ya tienes, el comando de actualización debe volver a enumerar todo el conjunto de campos restringidos. Siguiendo el ejemplo anterior, si quieres restringir el acceso al campo jsonPayload.data.entryDate
, además de a los campos jsonPayload.data.ssn
y httpRequest.status
, que ya están restringidos, el comando sería el siguiente:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"
Si no has vuelto a incluir los campos que ya estaban restringidos y solo has incluido jsonPayload.data.entryDate
, se eliminarían tanto jsonPayload.data.ssn
como httpRequest.status
como campos restringidos.
Gestionar el acceso a campos con restricciones
De forma predeterminada, Logging oculta todos los campos restringidos a los usuarios que no tienen el rol logging.fieldAccessor
u otro con permisos similares.
El registro expone los campos restringidos a los usuarios que tienen permiso para ver los registros del contenedor y el rol logging.fieldAccessor
.
Puedes modificar el comportamiento predeterminado para limitar subconjuntos de campos restringidos a usuarios específicos.
Conceder permiso en todos los campos restringidos
Para conceder a los usuarios permiso para acceder a todos los campos restringidos, asígnale el rol logging.fieldAccessor
o un rol personalizado que lo incluya.logging.fieldAccessor
Consola
Para asignar el rol logging.fieldAccessor
a los usuarios mediante la consola Google Cloud , sigue estos pasos:
-
En la Google Cloud consola, ve a la página Gestión de identidades y accesos:
Ve a Gestión de identidades y accesos.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo sea IAM y administrador.
- Selecciona el principal y haz clic en Editar.
- En el panel Editar permisos, selecciona Accessor de campo de registro para el rol.
- Selecciona Añadir condición de IAM.
- Escribe un título y una descripción en los campos Título y Descripción.
Seleccione la pestaña Editor de condiciones e introduzca la siguiente expresión:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
Selecciona Guardar.
Los permisos de Gestión de Identidades y Accesos se actualizan inmediatamente.
gcloud
Para asignar el rol logging.fieldAccessor
a los usuarios mediante la
CLI de gcloud, sigue estos pasos:
Para guardar la información de la política de IAM actual 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
.Actualiza el archivo
policy.json
con enlaces adicionales.En el siguiente ejemplo, el campo
expression
solo muestra un segmento de registro. Por lo tanto, los principales que se indican en la secciónmembers
pueden acceder a todos los campos de las entradas de registro almacenadas en ese segmento de registros."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: identificador de la cuenta principal a la que quieres asignar el rol. Los identificadores principales suelen tener el siguiente formato:
PRINCIPAL-TYPE:ID
. Por ejemplo,user:my-user@example.com
. Para ver una lista completa de los formatos que puede tenerPRINCIPAL
, consulta Identificadores principales. En el campomembers
del archivopolicy.json
, usa el formato"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: descripción de la condición.
- TITLE: título de la condición.
- PRINCIPAL: identificador de la cuenta principal a la que quieres asignar el rol. Los identificadores principales suelen tener el siguiente formato:
Para aplicar el archivo
policy.json
actualizado, ejecuta el comandogcloud projects set-iam-policy
:gcloud projects set-iam-policy PROJECT_ID policy.json
Los permisos de Gestión de Identidades y Accesos se actualizan inmediatamente.
Conceder permisos en un subconjunto de campos restringidos
Para conceder permisos a los usuarios en un subconjunto de los campos restringidos, define los campos a los que pueden acceder los usuarios cuando les asignes el rol logging.fieldAccessor
o cuando definas un rol personalizado que contenga el rol logging.fieldAccessor
.
Ten en cuenta lo siguiente:
La ortografía y el uso de mayúsculas y minúsculas del campo restringido tal como aparece en la configuración del segmento deben coincidir con la ortografía y el uso de mayúsculas y minúsculas del campo restringido en el nombre del permiso de gestión de identidades y accesos. Por ejemplo, si defines el campo restringido como
jsonPayload
, debes conceder permiso en el campojsonPayload
, no en el campoJsonpayload
.Las rutas de campo, incluidas las cadenas de claves de mapa, distinguen entre mayúsculas y minúsculas, pero las rutas de campo de protobuf se pueden expresar en formato snake_case (sin distinguir entre mayúsculas y minúsculas) o camelCase (distinguiendo entre mayúsculas y minúsculas).
Por ejemplo,
logName
es un campo del protobufLogEntry
;log_name
hace referencia al mismo campo. El campojsonPayload.fooBar
hace referencia a un campo distinto dejsonPayload.foo_bar
, ya que los nombres de los campos dejsonPayload
son claves de cadena de mapa. Sin embargo, sí hace referencia ajson_payload.fooBar
.Aunque las rutas de los campos sean referencias válidas al mismo campo, debes respetar la ortografía, el uso de mayúsculas y minúsculas y el formato al configurar las restricciones y los permisos de gestión de identidades y accesos. Por ejemplo, si especifica una restricción en
jsonPayload.foo
, debe configurar los permisos de IAM parajsonPayload.foo
y no parajson_payload.foo
.
Para obtener más información sobre los tipos de campos de registro válidos, consulta Lenguaje de consulta de registro: valores y conversiones.
Consola
Para dar acceso a los usuarios a un campo restringido mediante la consola Google Cloud , sigue estos pasos:
-
En la Google Cloud consola, ve a la página Gestión de identidades y accesos:
Ve a Gestión de identidades y accesos.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo sea IAM y administrador.
- Selecciona el principal y haz clic en Editar.
- En el panel Editar permisos, selecciona Accessor de campo de registro para el rol.
- Selecciona Añadir condición de IAM.
- Escribe un título y una descripción en los campos Título y Descripción.
Seleccione la pestaña Editor de condiciones e introduzca la siguiente expresión:
resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
Selecciona Guardar.
Los permisos de Gestión de Identidades y Accesos se actualizan inmediatamente.
gcloud
Para dar acceso a los usuarios a un campo restringido mediante la CLI de gcloud, sigue estos pasos:
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
.Actualiza el archivo
policy.json
con enlaces adicionales.A continuación, el campo
expression
enumera campos específicos. Por lo tanto, solo las entidades de seguridad que se incluyan en la secciónmembers
tendrán acceso a los campos de las entradas de registro que se almacenen en el segmento de registro 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: identificador de la cuenta principal a la que quieres asignar el rol. Los identificadores principales suelen tener el siguiente formato:
PRINCIPAL-TYPE:ID
. Por ejemplo,user:my-user@example.com
. Para ver una lista completa de los formatos que puede tenerPRINCIPAL
, consulta Identificadores principales. En el campomembers
del archivopolicy.json
, usa el formato"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: descripción de la condición.
- TITLE: título de la condición.
- PRINCIPAL: identificador de la cuenta principal a la que quieres asignar el rol. Los identificadores principales suelen tener el siguiente formato:
Para aplicar el archivo
policy.json
actualizado, ejecuta el comandogcloud projects set-iam-policy
:gcloud projects set-iam-policy PROJECT_ID policy.json
Los permisos de Gestión de Identidades y Accesos se actualizan inmediatamente.
Ejemplo
Supongamos que un contenedor de registro 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:
Los usuarios que tengan permiso para acceder a todos los campos restringidos podrán ver todos los campos de una entrada de registro.
Los usuarios que solo tengan permiso para acceder al campo
jsonPayload
LogEntry
restringido podrán ver todos los campos sin restricciones y el campojsonPayload
.Los usuarios que no tengan permiso para ver ninguno de los campos restringidos solo podrán ver los campos sin restricciones.
Si un usuario escribe una consulta con una restricción global, se omitirán de la respuesta las entradas de registro que contengan un campo restringido.
Listar campos restringidos
Para enumerar los campos restringidos de un registro, 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:
- Número de campos restringidos: puede restringir hasta 20 campos por cada contenedor de registro.
- Tamaño de los campos restringidos: la ruta del campo restringido debe tener una longitud inferior a 800 B.
Para obtener más información sobre los límites que se pueden aplicar al uso de Cloud Logging, consulta Cuotas y límites.