En este documento, se describen los controles de acceso a nivel del 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 Google Cloud , lo que te proporciona una forma más detallada de controlar los datos de registros a los que puede acceder un usuario.
Descripción general
Logging usa el control de acceso a nivel de campo para ocultar los campos de LogEntry a los usuarios de un proyecto de Google 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 del campo ocultan campos individuales del LogEntry. Puedes establecer controles de acceso a nivel de campo y permisos de vistas de registro en un bucket de Logging. Puedes restringir y administrar el control de acceso a nivel del campo con Google Cloud CLI.
Para restringir el acceso a los campos de registro, haz lo siguiente:
- Configura los campos
LogEntryrestringidos en un bucket de registro. - Otorga el rol de IAM
logging.fieldAccessorpara esa ruta de campo, o un rol que contenga permisos similares, solo a los usuarios que necesiten ver los campos restringidos.
El registro verifica los permisos de IAM cuando un usuario consulta los registros de un bucket que tiene campos restringidos establecidos. Los campos con ACL configuradas se rechazan para los usuarios que no tienen 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 rechazados.
- Los resultados de
LogEntryque 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 de acceso anidadas.
También puedes restringir el acceso a los campos hoja de los siguientes elementos:
Por ejemplo, puedes restringir el acceso al campo labels.check_id.
Antes de comenzar
Antes de comenzar a establecer controles de acceso a nivel de campo, haz lo siguiente:
Verifica que
gcloud --versioninforme la versión 362.0.0 o posterior.Para instalar la versión más reciente de gcloud CLI, ejecuta el comando
gcloud components update:gcloud components updatePara obtener instrucciones sobre cómo instalar gcloud CLI, consulta Instala Google Cloud CLI.
Ejecuta
gcloud config setpara configurar el proyectoGoogle Cloud 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_IDVerifica que tengas uno de los siguientes roles de IAM para el proyecto 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.
Cómo establecer el control de acceso a nivel de campo
Las restricciones a nivel del 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 crees un bucket de registros nuevo, ejecuta el comando gcloud logging buckets create.
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 separados por comas 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 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 deseas agregar campos a tus restricciones existentes, el comando de actualización debe volver a incluir en la lista todo el conjunto de campos restringidos. Si deseas restringir el acceso al campo jsonPayload.data.entryDate, además de los campos jsonPayload.data.ssn y httpRequest.status que ya están restringidos, tu comando se vería así:
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 ya restringidos y solo incluiste jsonPayload.data.entryDate, se quitarían jsonPayload.data.ssn y httpRequest.status como campos restringidos.
Administra el acceso a los campos restringidos
De forma predeterminada, el registro oculta todos los campos restringidos a los usuarios que no tienen el rol de logging.fieldAccessor o un rol con permisos similares.
El registro expone los campos restringidos a los usuarios que tienen permiso para ver los registros en el bucket y el rol de logging.fieldAccessor.
Puedes modificar el comportamiento predeterminado para limitar subconjuntos de campos restringidos a usuarios específicos.
Cómo otorgar permiso en todos los campos restringidos
Para otorgar a los usuarios permiso para acceder a todos los campos restringidos, asígnales el rol de logging.fieldAccessor o un rol personalizado que contenga el rol de logging.fieldAccessor.
Console
Para otorgar a los usuarios el rol de logging.fieldAccessor con la consola de Google Cloud , completa los siguientes pasos:
-
En la consola de Google Cloud , ve a la página IAM:
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es IAM y administrador.
- Selecciona el principal y haz clic en Editar.
- En el panel Editar permisos, selecciona Log Field Accessor para el rol.
- Selecciona Agregar condición de IAM.
- Ingresa un título y una descripción en los campos Título y Descripción.
Selecciona la pestaña Editor de condiciones (Condition Editor) e ingresa la siguiente expresión:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"Selecciona Guardar.
Los permisos de Identity and Access Management se actualizan de inmediato.
gcloud
Para otorgar a los usuarios el rol de logging.fieldAccessor con gcloud CLI, completa los siguientes pasos:
Para guardar la información actual de la política de IAM en un archivo, ejecuta el comando
gcloud projects get-iam-policyy guarda el resultado en un archivo:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonEl comando anterior guarda la información en un archivo llamado
policy.json.Actualiza el archivo
policy.jsoncon vinculaciones adicionales.A continuación, el campo
expressionsolo enumera 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 entidades principales que se enumeran en la secciónmembers."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]En la muestra anterior, los campos tienen los siguientes significados:
- PRINCIPAL: Es un identificador de 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 tenerPRINCIPAL, consulta Identificadores de principal. En el campomembersdel archivopolicy.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.
- PRINCIPAL: Es un identificador de la principal a la que deseas otorgar el rol. Los identificadores principales suelen tener el siguiente formato:
Para aplicar el archivo
policy.jsonactualizado, ejecuta el comandogcloud 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 en un subconjunto de campos restringidos
Para otorgar permisos a los usuarios en un subconjunto de los campos restringidos, establece los campos a los que los usuarios pueden acceder cuando les otorgas el rol de logging.fieldAccessor o cuando configuras un rol personalizado que contiene el rol de 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 configuras el campo restringido como
jsonPayload, debes otorgar permiso en el campojsonPayload, no en el campoJsonpayload.Las rutas de acceso a los campos, incluidas las cadenas de claves de mapa, distinguen mayúsculas de minúsculas, pero las rutas de acceso a los campos 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 sí distinguen mayúsculas de minúsculas.
Por ejemplo,
logNamees un campo en el protobufLogEntry;log_namehace referencia al mismo campo. El campojsonPayload.fooBarhace referencia a un campo diferente dejsonPayload.foo_bar, ya que los nombres de los campos debajo dejsonPayloadson claves de cadena de mapa; sin embargo, sí hace referencia ajson_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 minúsculas cuando configures restricciones y permisos de IAM. Por ejemplo, si especificas una restricción en
jsonPayload.foo, debes configurar los permisos de IAM parajsonPayload.fooy 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.
Console
Para otorgar a los usuarios acceso a un campo restringido con la consola de Google Cloud , completa los siguientes pasos:
-
En la consola de Google Cloud , ve a la página IAM:
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es IAM y administrador.
- Selecciona el principal y haz clic en Editar.
- En el panel Editar permisos, selecciona Log Field Accessor para el rol.
- Selecciona Agregar condición de IAM.
- Ingresa un título y una descripción en los campos Título y Descripción.
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"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:
Para guardar la información de IAM en un archivo, ejecuta el comando
gcloud projects get-iam-policyy guarda el resultado en un archivo:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonEl comando anterior guarda la información en un archivo llamado
policy.json.Actualiza el archivo
policy.jsoncon vinculaciones adicionales.A continuación, el campo
expressionenumera campos específicos. Por lo tanto, solo las entidades principales que se indican en la secciónmemberstienen 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 la muestra anterior, los campos tienen los siguientes significados:
- PRINCIPAL: Es un identificador de 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 tenerPRINCIPAL, consulta Identificadores de principal. En el campomembersdel archivopolicy.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.
- PRINCIPAL: Es un identificador de la principal a la que deseas otorgar el rol. Los identificadores principales suelen tener el siguiente formato:
Para aplicar el archivo
policy.jsonactualizado, ejecuta el comandogcloud 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
En el caso de los usuarios que tienen permiso para acceder a todos los campos restringidos, todos los campos de una entrada de registro son visibles.
En el caso de los usuarios con permiso para acceder solo al campo restringido
jsonPayload, todos los campos sin restricciones son visibles, y el campojsonPayloadtambién lo es.LogEntryPara los usuarios que no tienen permiso para ver ninguno de los campos restringidos, solo se muestran los campos no restringidos.
Si un usuario escribe una búsqueda con una restricción global, las entradas de registro que contengan un campo restringido se omitirán de la respuesta.
Cómo enumerar 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 por bucket de registros.
- Tamaño de los campos restringidos: La ruta de acceso 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.