¿Cómo exportar automáticamente los registros de auditoría de AWS RDS a la instancia de S3 Bucket?

Publicado: 2022-03-05

Export RDS logs to S3 Bucket

Antes de aprender a exportar automáticamente los registros de auditoría de RDS a S3, ¿sabía que AWS CloudWatch almacena automáticamente los registros de la base de datos de RDS? Sí, lo hacen, pero solo almacenan los registros generales de su instancia de base de datos. Ahora, ¿qué sucede si desea encontrar una consulta o datos específicos del registro? ¿Qué usuario realizó una consulta en particular o desde qué dirección IP? ¿Quién eliminó ciertos registros de sus tablas de base de datos?

Además, de alguna manera ha logrado exportar todos los registros de auditoría de su instancia de RDS a CloudWatch, lo cual es excelente. Pero, ¿sabes? ¡CloudWatch conservará esos registros solo durante 30 días! Para conservarlos durante un período más largo, debe exportar los registros de CloudWatch al depósito de S3. Puede hacerlo manualmente desde el panel de CloudWatch. Pero, ¿y si quieres tener automatización para esto?

¡Esta guía lo guiará a través de todos los pasos necesarios para registrar todos esos eventos automáticamente!

¿Busca EXPERTOS DE AWS? VER AQUÍ

Esta guía incluye:

1) Modifique la configuración de RDS para enviar registros de auditoría a CloudWatch
2) Cree un depósito S3 (para almacenar registros de auditoría de CloudWatch)
3) Crear rol de IAM (lo usaremos para la automatización de Lambda)
4) Lambda (Función para automatizar la exportación de CloudWatch Logs a S3)

¡Vamos a empezar!

Modifique la configuración de RDS para enviar registros de auditoría a CloudWatch

En primer lugar, debemos modificar el RDS para enviar registros específicos a CloudWatch. Para ello, crearemos un Grupo de opciones y un Grupo de parámetros.

Crear grupo de opciones

⇒ Visite su panel de control de Amazon RDS.
⇒ Vaya al Grupo de opciones.
⇒ Haga clic en el botón Crear grupo.

Create an Option Group

⇒ Ingrese el Nombre y la Descripción para este grupo.
⇒ Seleccione Motor: mysql y Versión del motor: 8.0. Haga clic en Crear.

Create an Option Group

⇒ Haga clic en el Grupo de opciones que ha creado.
⇒ En la sección Opciones, haga clic en el botón Agregar opción.
⇒ En la opción "SERVER_AUDIT_EVENTS*", ingrese los valores que desea auditar, es decir, CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Si desea registrar todas las consultas ejecutadas en sus tablas, simplemente ingrese CONSULTA en este campo.
⇒ Establezca “Sí” para Aplicar inmediatamente. Haga clic en Agregar opción.

Option Group Settings

¿Busca EXPERTOS DE AWS? VER AQUÍ

Crear grupo de parámetros

⇒ Abramos el Panel de control de Amazon RDS.
⇒ Haga clic en el Grupo de parámetros.
⇒ Haga clic en el botón Crear grupo de parámetros.

Create Parameter Group

⇒ Seleccione “Familia de grupos de parámetros”: mysql8.0
⇒ Seleccione “Tipo”: Grupo de parámetros DB
⇒ Ingrese el nombre y la descripción del grupo. Haga clic en Crear.

Create Parameter Group

⇒ Ahora, haga clic en el grupo de parámetros que ha creado.
⇒ En Parámetro, editaremos ciertos parámetros y estableceremos los siguientes valores:
⇒ Editar parámetro: “log_output” ⇒ Cambiar su valor de TABLE a FILE
⇒ Editar parámetro: “slow_query_log” ⇒ Cambiar su valor de BLANK a 1
⇒ Editar parámetro: “general_log” ⇒ Cambiar su valor de BLANK a 1

Ahora, estamos listos con nuestro Grupo de opciones y Grupo de parámetros. Ahora, asignemos estos grupos a nuestro RDS.

⇒ Vaya a su panel de RDS.
⇒ Haga clic en el RDS que ha creado.
⇒ Haga clic en Modificar.
⇒ Desplácese hacia abajo en la página y vaya a la sección "Opciones de la base de datos".
⇒ En “Grupo de parámetros DB”, seleccione el grupo de parámetros que ha creado.
⇒ En “Grupo de opciones”, seleccione el grupo de opciones que ha creado.

Tweak RDS Settings

Ahora estamos listos con el RDS. Una vez que haya terminado con los pasos anteriores, espere entre 20 y 30 minutos para completar los datos en CloudWatch (NOTA: puede llevar más tiempo según el tamaño de los registros).

Una vez que CloudWatch haya recopilado todos los registros, verá los registros de auditoría en su panel de CloudWatch. Se verá como la siguiente imagen:

CloudWatch Log Groups

¿Busca EXPERTOS DE AWS? VER AQUÍ

Crear un depósito de S3 (para almacenar registros de auditoría de CloudWatch)

⇒ Vaya al panel de control de Amazon S3.
⇒ Crear un nuevo Cubo.
⇒ Una vez que haya creado un depósito, ábralo y vaya a la pestaña Permisos.
⇒ Tendremos que permitir que CloudWatch coloque objetos en el depósito (acceso de escritura)
⇒ Haga clic en el botón Editar para la política de depósito. Introduce el siguiente código:

{
“Versión”: “2012-10-17”,
"Declaración": [
{
“Efecto”: “Permitir”,
"Principal": {
“Servicio”: “logs.YOUR-REGION.amazonaws.com” // es decir, logs.us-east-1.amazonaws.com
},
“Acción”: “s3:GetBucketAcl”,
“Recurso”: “arn:aws:s3:::BUCKET_NAME_HERE”
},
{
“Efecto”: “Permitir”,
"Principal": {
“Servicio”: “logs.SU-REGIÓN.amazonaws.com”
},
“Acción”: “s3:PonerObjeto”,
“Recurso”: “arn:aws:s3:::BUCKET_NAME_HERE/*”,
"Condición": {
“Cadena Igual”: {
“s3:x-amz-acl”: “control total del propietario del depósito”
}
}
}
] }

Crear rol de IAM (lo usaremos para la automatización de Lambda)

Ahora, crearemos el rol de IAM que se usará en la configuración de la función Lambda. El servicio AWS Lambda requerirá permiso para registrar eventos y escribir en el depósito S3 que hemos creado.

Crearemos el rol de IAM "Export-RDS-CloudWatch-to-S3-Lambda" con las políticas "AmazonS3FullAccess", "CloudWatchLogsFullAccess" y "CloudWatchEventsFullAccess".

⇒ Abra su panel de IAM de AWS.
⇒ Cambie a Roles y haga clic en el botón Create Role.
⇒ En “Caso de uso”, seleccione Lambda y haga clic en Siguiente.
⇒ Busque “AmazonS3FullAccess” y selecciónelo.
⇒ Busque “CloudWatchLogsFullAccess” y selecciónelo.
⇒ Busque “CloudWatchEventsFullAccess” y selecciónelo.
⇒ Establezca el nombre de la función: "Exportar-RDS-CloudWatch-to-S3-Lambda" y haga clic en Crear función.

¿Busca EXPERTOS DE AWS? VER AQUÍ

Lambda (Función para automatizar la exportación de CloudWatch Logs a S3)

La función Lambda le permite poner su código debajo de la función y ejecutarlo en disparadores. No es necesario tener ningún servidor o configurar para esto. ¡Muy fácil y eficiente!

⇒ Cambie al panel de AWS Lambda.
⇒ Haga clic en Funciones y luego haga clic en el botón Crear función.

Create Lambda Function

⇒ Mantenga seleccionado “Autor para Scratch”.
⇒ Configure el "Nombre de la función": Exportar-RDS-CloudWatch-Logs-To-S3
⇒ En “Tiempo de ejecución”, seleccione Python 3.x.
⇒ En "Permisos", seleccione "Usar un rol existente" y seleccione el rol de IAM que creamos en el paso anterior.

Configure Lambda Function

⇒ Haga clic en la función Crear y navegue hasta la vista Código e ingrese el siguiente script:

importar boto3
importar sistema operativo
importar fecha y hora

NOMBRE_GRUPO = os.environ['NOMBRE_GRUPO'] DESTINATION_BUCKET = os.environ['DESTINATION_BUCKET'] PREFIJO = os.environ['PREFIX'] NDAYS = os.environ['NDAYS'] nDays = int(NDAYS)

horaActual = fechahora.fechahora.ahora()
FechaInicio = horaActual – fechahora.timedelta(días=nDías)
FechaFinal = horaActual – fechahora.timedelta(días=nDías – 1)

fromDate = int(StartDate.timestamp() * 1000)
hasta la fecha = int (fecha de finalización. marca de tiempo () * 1000)

BUCKET_PREFIX = os.path.join(PREFIX, StartDate.strftime('%Y{0}%m{0}%d').format(os.path.sep))

def lambda_handler(evento, contexto):
cliente = boto3.cliente('registros')
cliente.create_export_task(
logGroupName=NOMBRE_GRUPO,
fromTime=fromDate,
hasta = hasta la fecha,
destino=DESTINO_CUBO,
prefijodestino=BUCKET_PREFIX
)

⇒ Ahora, haga clic en Configuración ⇒ Variables de entorno.
⇒ Necesitamos crear 4 variables:
⇒ DESTINATION_BUCKET: <Nombre de su depósito S3>
⇒ GROUP_NAME: <Nombre del grupo de registros que está exportando>
⇒ DÍAS: 1
⇒ PREFIJO: registros exportados

Lambda Environment Variables

⇒ Muy bien, ya está listo. Guarde la función.

Ahora, configuremos la automatización para ejecutar esta función lambda.

⇒ Ahora, visite su panel de CloudWatch.
⇒ Ir a Eventos ⇒ Reglas.
⇒ Haga clic en Crear regla.
⇒ En Origen del evento, seleccione Programar.
⇒ Configure la tasa fija o la expresión cron para ejecutar automáticamente nuestra función lambda.
⇒ En Objetivo, seleccione Función Lambda.
⇒ En Función, seleccione la función que hemos creado en el paso anterior.

Cron to Execute Lambda Function

Esto es todo. Ahora, ha configurado un entorno para exportar registros de RDS a S3 automáticamente. Puede conservar los registros todo el tiempo que desee. Pero, si aún tiene algún problema, no dude en publicar un comentario aquí. ¡¡Nos encantaría saber de ti!!

¿Busca EXPERTOS DE AWS? VER AQUÍ