Situaciones para exportar datos de registro: estadísticas de seguridad y acceso

En esta situación, se muestra cómo exportar registros de Cloud Logging a BigQuery para cumplir con los requisitos de seguridad y estadísticas del entorno de infraestructura de nube de tu organización. Las organizaciones suelen usar herramientas de estadística para contribuir a la identificación de cambios no autorizados en la configuración y accesos inapropiados a los datos. Para ayudarte a cumplir con estos requisitos de seguridad y estadísticas, Cloud Logging puede capturar dos tipos de registros de auditoría: registros de actividad de administradores y registros de acceso a los datos.

En este caso, los registros exportados se entregan a un conjunto de datos en BigQuery que configuras como parte de la exportación. Otorgas permisos para limitar el acceso a los registros según corresponda. Para simplificar la administración y la consulta de los datos, puedes organizar los datos exportados en tablas particionadas por fecha. Este enfoque puede ayudar a reducir los costos de consulta, pues reduce la cantidad de datos que se analizan como parte de las consultas. Un beneficio de la partición es que puedes configurar una fecha de vencimiento para las particiones de modo que puedas mantener los datos de registro solo mientras los consideres útiles. Por ejemplo, puedes conservar datos de registros de auditoría durante 3 años y, luego, borrarlos.

Esta situación forma parte de la serie Patrones de diseño para exportar datos de Cloud Logging.

Configura la exportación de registros

En el siguiente diagrama, se muestran los pasos para habilitar la exportación de registros a BigQuery.

  • Configura el conjunto de datos de exportación de registros en BigQuery.
  • Activa el registro de auditoría para todos los servicios de Google Cloud.
  • Configura la exportación de registros.
  • Configura los permisos de la política de IAM para el conjunto de datos de BigQuery.

Habilita la exportación de registros a BigQuery.

Configura el conjunto de datos en BigQuery

Sigue las instrucciones para configurar un conjunto de datos que alojará los registros exportados. Si usas registros agregados, el conjunto de datos de BigQuery debería estar ubicado en uno de los proyectos de Google Cloud dentro de la organización. Cuando usas exportaciones de registros para un proyecto único, el conjunto de datos de BigQuery debería estar en el mismo proyecto.

Práctica recomendada: Cuando creas la tabla, establece el vencimiento de la partición para limitar el tamaño del almacenamiento de la exportación de registros y los costos del almacenamiento acumulativos en el tiempo.

Activa registros de auditoría para todos los servicios

Los registros de auditoría de acceso a los datos se encuentran inhabilitados de forma predeterminada, excepto para BigQuery. A fin de habilitar todos los registros de auditoría, sigue las instrucciones para actualizar la política de IAM con la configuración que se detalla en la documentación de la política de auditoría. Entre los pasos se incluyen los siguientes:

  • Descarga la política de IAM actual como un archivo.
  • Agregar el objeto JSON o YAML de la política de registro de auditoría al archivo de la política actual
  • Actualizar el proyecto con el archivo de la política modificado

A continuación, se muestra un ejemplo de un objeto JSON que habilita todos los registros de auditoría para todos los servicios.

"auditConfigs": [
    {
        "service": "allServices",
        "auditLogConfigs": [
            { "logType": "ADMIN_READ" },
            { "logType": "DATA_READ"  },
            { "logType": "DATA_WRITE" },
        ]
    },
]

Cómo configurar la exportación de registros

Una vez que configures las exportaciones agregadas o la exportación de registros, debes definir mejor los filtros de registro para exportar registros de auditoría. El siguiente filtro incluye los registros de auditoría de actividad de los administradores y acceso a los datos, y los registros para tipos de recursos específicos.

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=cloudsql_database OR
resource.type=bigquery_resource

En la herramienta de línea de comandos de gcloud, usa el comando gcloud logging sinks create o la llamada a la API de organizations.sinks.create para crear un receptor con los filtros adecuados. El siguiente comando de gcloud de ejemplo crea un receptor llamado gcp_logging_sink_gcs para la organización. El receptor incluye todos los proyectos secundarios y especifica los filtros para seleccionar los registros de auditoría específicos.

gcloud logging sinks create gcp_logging_sink_bq22 \
     bigquery.googleapis.com/projects/compliance-logging-export/datasets/gcp_logging_export \
     --log-filter='logName:"/logs/cloudaudit.googleapis.com"' \
     --include-children \
     --organization=324989855333

El resultado del comando es similar al siguiente:

Created [https://logging.googleapis.com/v2/organizations/324989855333/sinks/gcp_logging_sink_bq].
Please remember to grant `serviceAccount:gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com` the WRITER role on the dataset..
More information about sinks can be found at /logging/docs/export/configure_export

En la entrada serviceAccount que muestra la llamada a la API, la identidad gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com se incluye en la respuesta. Esta identidad representa una cuenta de servicio de Google Cloud que se creó para la exportación. Hasta que no otorgues el acceso de escritura en el destino a esta identidad, las exportaciones de entradas de registro desde este receptor fallarán. A fin de obtener más información, consulta la siguiente sección o los permisos necesarios para un conjunto de datos de BigQuery.

Configura los permisos de la política de IAM para el conjunto de datos de BigQuery

Si agregas la cuenta de servicio gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com al conjunto de datos gcp_logging_export con los permisos de Editor, debes otorgar a la cuenta de servicio permiso para escribir en el destino. La exportación del receptor fallará hasta que no agregues estos permisos.

Para agregar permisos a la cuenta de servicio, sigue estos pasos:

  1. En Cloud Console, ve a BigQuery:

    IR A BigQuery

  2. Junto al conjunto de datos gcp_logging_export, haz clic en y, luego, en Compartir conjunto de datos.

  3. En el campo Add people, ingresa la cuenta de servicio.

    permisos de la política de IAM - Editor

Luego de crear la exportación de registros mediante este filtro, los archivos de registro comenzarán a propagarse en el conjunto de datos de BigQuery del proyecto configurado.

Práctica recomendada: Implementa una política de permisos mínimos según tus necesidades. Puedes configurar los permisos del conjunto de datos en función de las cuentas de usuario de Google Cloud específicas, Grupos de Google o cuentas de servicio de Google Cloud. Usa los permisos de IAM para otorgar acceso al conjunto de datos de BigQuery.

Para consultar un ejemplo de conjunto de permisos, puedes hacer lo siguiente:

  • Quita todos los usuarios que no sean esenciales de los permisos del conjunto de datos de BigQuery.
  • Agrega control total para el administrador de BigQuery.
  • Otorga al usuario de exportación permiso para escribir los registros de exportación.
  • Otorga a otros usuarios individuales acceso de visualizador a las exportaciones de registros de Google Cloud.

Puedes actualizar los permisos de IAM del conjunto de datos de forma directa en Cloud Console, a través de la utilidad de línea de comandos de gsutil o mediante la API de IAM.

Usa los registros exportados

Cuando exportas registros a un conjunto de datos de BigQuery, Cloud Logging crea tablas con fecha para contener las entradas de registro exportadas. Las entradas de registro se ubican en tablas cuyos nombres se basan en los nombres de las entradas de registro.

Tablas con fecha.

La lista de tablas aparece con el sufijo AAAAMMDD, como se muestra en el siguiente ejemplo.

Lista de tablas.

Debido a que los registros exportados son registros de auditoría, los registros de actividad de administradores y de acceso a los datos se cargan en BigQuery con el formato protoPayload.

Otorga acceso externo

Tal vez quieras otorgar a ciertos usuarios específicos acceso a los registros exportados; por ejemplo, analistas de seguridad, tu equipo de DevOps y auditores. BigQuery ofrece una variedad de opciones a fin de otorgar un acceso seguro a los registros.

Estrategias de ubicación de registros

Existen varias opciones que permiten seleccionar qué registros deben ser visibles para los usuarios en BigQuery.

  • Crear copias de los registros que quieres compartir.

    De manera manual o programática, crea una copia de una tabla de registros individual o un conjunto de tablas de registros, y ubica las copias en un conjunto de datos de BigQuery separado. Luego, usa los diferentes permisos del conjunto de datos de BigQuery para compartir registros con los usuarios específicos que corresponda.

    Ventajas: Puedes limitar la cantidad de datos que se exponen de modo que sean solo los datos copiados.

    Desventajas: Tienes que crear, compartir y administrar conjuntos de datos y permisos diferentes, lo que puede generar costos más altos.

  • Otorga acceso de solo lectura a todos los registros.

    De manera manual o programática, configura permisos de visualizador en todas las tablas de exportación de registros de BigQuery, lo que otorga acceso a todas las exportaciones de registros.

    Ventajas: Es fácil otorgar el acceso.

    Desventajas: Debes otorgar acceso a todos los registros en vez de solo a archivos de registro específicos.

Estrategias de control de acceso a usuarios

Existen varias opciones para otorgar acceso a los registros en BigQuery.

  • Usa un Grupo de Google.

    Crea un Grupo de Google, por ejemplo, auditors@example.com, con acceso de solo lectura al conjunto de datos de BigQuery de la exportación de registros. Luego, administra la lista de Cuentas de Google y agrega o quita auditores al Grupo de Google.

    Ventajas: Es fácil administrar el acceso a través de un grupo; hay un claro propósito de acceso de usuario.

    Desventajas: No se puede saber quién tiene acceso sin mirar la membresía del grupo.

  • Usa Cuentas de Google individuales.

    Otorga de forma individual acceso al conjunto de datos de BigQuery de la exportación de registros para la Cuenta de Google de cada usuario que lo requiera.

    Ventajas: Es fácil agregar cada usuario de manera manual o programática.

    Desventajas: No se puede distinguir a los usuarios de auditoría de otros visualizadores.

Preguntas y consultas de muestra

Puedes ejecutar una gran variedad de consultas en los registros de auditoría. Estas consultas realizan análisis para comprender quién accede a los datos en Google Cloud o cómo operan en el tiempo los escaladores automáticos.

¿Qué usuarios accedieron a los datos con mayor frecuencia en la última semana?

En la siguiente consulta, se usan los registros de acceso a los datos de Cloud Audit para averiguar qué cuenta de usuario aparece con más frecuencia en los registros de acceso a los datos.

SELECT
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNT(*) AS COUNTER
FROM
(TABLE_DATE_RANGE(
Logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  protopayload_auditlog.methodName = "jobservice.query"
GROUP BY
   protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNTER desc
LIMIT
  1000

¿Qué usuarios accedieron a los datos de la tabla “accounts” en el último mes?

En la siguiente consulta, se usan los registros de auditoría de acceso a los datos de Cloud para averiguar qué cuenta de usuario realizó consultas a la tabla “accounts” con más frecuencia. Reemplaza your-project-id por el ID del proyecto.

SELECT
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNT(*) AS COUNTER
FROM
(TABLE_DATE_RANGE(logging_export.cloudaudit_googleapis_com_data_access_,DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),CURRENT_TIMESTAMP()))
WHERE
  protopayload_auditlog.methodName = "jobservice.query" AND
  protopayload_auditlog.authorizationInfo.permission = "bigquery.tables.getData"
AND
  protopayload_auditlog.authorizationInfo.resource = "projects/your-project-id/datasets/bqtesting/tables/accounts"
GROUP BY
   protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNTER desc
LIMIT
  1000

¿Qué usuarios borraron máquinas virtuales en la última semana?

En la siguiente consulta, se usan los registros de auditoría de actividad de administradores de Cloud para averiguar qué cuentas de usuarios borraron máquinas virtuales en la última semana.

SELECT
  timestamp,
  resource.labels.instance_id,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.resourceName,
  protopayload_auditlog.methodName
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance"
  AND operation.first IS TRUE
  AND protopayload_auditlog.methodName = "v1.compute.instances.delete"
ORDER BY
  timestamp,
  resource.labels.instance_id
LIMIT
  1000

La consulta siguiente es una consulta de seguimiento que resume la cuenta mediante un recuento simple.

SELECT
  protopayload_auditlog.authenticationInfo.principalEmail,
  count(*) as counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance"
  AND operation.first IS TRUE
  AND protopayload_auditlog.methodName = "v1.compute.instances.delete"
GROUP BY
  protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
  protopayload_auditlog.authenticationInfo.principalEmail,
  counter
LIMIT
  1000

En la siguiente consulta, se usan los registros de auditoría de actividad de administradores de Cloud para averiguar con qué frecuencia se empleó el ajuste de escala automático en el último mes.

SELECT
  protopayload_auditlog.methodName,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance_group_manager"
GROUP BY
  protopayload_auditlog.methodName,
ORDER BY
  protopayload_auditlog.methodName
LIMIT
  1000

Si usas la consulta siguiente, puedes visualizar la tendencia de las operaciones del administrador de instancias de Compute Engine en el tiempo.

SELECT
  timestamp,
  protopayload_auditlog.methodName AS methodName,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance_group_manager"
GROUP BY
  timestamp,
  methodName
ORDER BY
  timestamp,
  methodName

Puedes usar la consulta anterior como una consulta personalizada sobre fuentes de datos en Google Data Studio para visualizar la tendencia en el tiempo, como se muestra en el siguiente grafo.

Visualización de Data Studio

Consulta el artículo Consultas personalizadas en Data Studio para obtener más información.

¿A qué conjuntos de datos se accede con más frecuencia y quién accede a ellos?

En la siguiente consulta, se usan los registros de acceso a los datos de Cloud Audit para averiguar a qué conjuntos de datos de BigQuery se accede con más frecuencia, y también se muestra la cuenta de usuario asociada junto con el recuento.

SELECT
  protopayload_auditlog.authorizationInfo.resource,
  protopayload_auditlog.authenticationInfo.principalEmail,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  protopayload_auditlog.authorizationInfo.permission = "bigquery.tables.getData"
GROUP BY
  protopayload_auditlog.authorizationInfo.resource,
  protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
  protopayload_auditlog.authorizationInfo.resource,
  protopayload_auditlog.authenticationInfo.principalEmail,
  counter DESC
LIMIT
  1000

¿Cuáles fueron las 10 consultas más realizadas en BigQuery en la última semana?

En la siguiente consulta, se usan los registros de acceso a los datos de Cloud Audit para averiguar cuáles son las consultas más comunes.

SELECT
  protopayload_auditlog.servicedata_v1_bigquery.jobQueryRequest.query,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
Logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP()))
WHERE
  protopayload_auditlog.methodName = "jobservice.query"
GROUP BY
  protopayload_auditlog.servicedata_v1_bigquery.jobQueryRequest.query
ORDER BY
  counter DESC
LIMIT
  1000

¿Cuáles son las acciones más comunes documentadas en los registros de acceso a los datos en los últimos 30 días?

En la siguiente consulta, se usan los registros de acceso a los datos de Cloud Audit para averiguar cuáles fueron las acciones más comunes documentadas en los últimos 30 días.

SELECT
  protopayload_auditlog.methodName,
  resource.type,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
GROUP BY
  protopayload_auditlog.methodName,
  resource.type
ORDER BY
  COUNTER DESC
LIMIT
  1000

Próximos pasos