Como exportar automaticamente os logs de auditoria do AWS RDS para a instância do bucket do S3?

Publicados: 2022-03-05

Export RDS logs to S3 Bucket

Antes de aprendermos a exportar automaticamente os logs de auditoria do RDS para o S3, você sabia que o AWS CloudWatch armazena automaticamente os logs de banco de dados do RDS? Sim, eles fazem, mas eles armazenam apenas os logs gerais da sua instância de banco de dados. Agora, e se você quiser encontrar uma consulta ou dados específicos do log? Qual usuário executou uma consulta específica ou de qual endereço IP? Quem excluiu determinados registros de suas tabelas de banco de dados?

Além disso, de alguma forma você conseguiu exportar todos os logs de auditoria da sua instância do RDS para o CloudWatch, o que é ótimo. Mas, você sabe? O CloudWatch reterá esses logs por apenas 30 dias!! Para mantê-los por mais tempo, você precisa exportar os logs do CloudWatch para o bucket do S3. Você pode fazer isso manualmente no painel do CloudWatch. Mas, e se você quiser ter automação para isso?

Este guia o guiará por todas as etapas necessárias para registrar todos esses eventos automaticamente!

Procurando por ESPECIALISTAS da AWS? CONFIRA AQUI

Este guia inclui:

1) Ajuste as configurações do RDS para enviar logs de auditoria ao CloudWatch
2) Crie um bucket do S3 (para armazenar logs de auditoria do CloudWatch)
3) Criar função do IAM (vamos usar isso para automação do Lambda)
4) Lambda (função para automatizar a exportação do CloudWatch Logs para o S3)

Vamos começar!

Ajuste as configurações do RDS para enviar logs de auditoria ao CloudWatch

Antes de tudo, precisamos ajustar o RDS para enviar logs específicos ao CloudWatch. Para fazer isso, vamos criar um Option Group e um Parameter Group.

Criar grupo de opções

⇒ Visite o painel do Amazon RDS.
⇒ Vá para o Grupo de Opções.
⇒ Clique no botão Criar Grupo.

Create an Option Group

⇒ Insira o Nome e Descrição para este grupo.
⇒ Selecione Engine: mysql e Engine Version: 8.0. Clique em Criar.

Create an Option Group

⇒ Clique no Grupo de Opções que você criou.
⇒ Na seção Opções, clique no botão Adicionar opção.
⇒ Na opção “SERVER_AUDIT_EVENTS*”, digite os valores que você deseja auditar, ou seja, CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Se você deseja registrar todas as consultas executadas em suas tabelas, basta digitar QUERY neste campo.
⇒ Defina “Sim” para Aplicar Imediatamente. Clique em Adicionar Opção.

Option Group Settings

Procurando por ESPECIALISTAS da AWS? CONFIRA AQUI

Criar grupo de parâmetros

⇒ Vamos abrir o Amazon RDS Dashboard.
⇒ Clique no Grupo de Parâmetros.
⇒ Clique no botão Criar Grupo de Parâmetros.

Create Parameter Group

⇒ Selecione “Família do grupo de parâmetros”: mysql8.0
⇒ Selecione “Tipo”: Grupo de Parâmetros DB
⇒ Digite o Nome e a Descrição do Grupo. Clique em Criar.

Create Parameter Group

⇒ Agora, clique no grupo de parâmetros que você criou.
⇒ Em Parâmetro, editaremos determinados parâmetros e definiremos os seguintes valores:
⇒ Editar parâmetro: “log_output” ⇒ Mudar seu valor de TABLE para FILE
⇒ Editar parâmetro: “slow_query_log” ⇒ Alterar seu valor de BLANK para 1
⇒ Editar parâmetro: “general_log” ⇒ Alterar seu valor de BLANK para 1

Agora, estamos todos configurados com nosso Grupo de Opções e Grupo de Parâmetros. Agora, vamos alocar esses grupos ao nosso RDS.

⇒ Vá para o seu Painel RDS.
⇒ Clique no RDS que você criou.
⇒ Clique em Modificar.
⇒ Role a página para baixo e vá para a seção “Opções do banco de dados”.
⇒ Em “Grupo de parâmetros DB”, selecione o grupo de parâmetros que você criou.
⇒ Em “Grupo de opções”, selecione o grupo de opções que você criou.

Tweak RDS Settings

Agora estamos todos prontos com o RDS. Depois de concluir as etapas acima, aguarde de 20 a 30 minutos para preencher os dados no CloudWatch (OBSERVAÇÃO: pode levar mais tempo dependendo do tamanho dos logs).

Depois que o CloudWatch reunir todos os logs, você verá os logs de auditoria em seu painel do CloudWatch. Ficará como a imagem a seguir:

CloudWatch Log Groups

Procurando por ESPECIALISTAS da AWS? CONFIRA AQUI

Criar um bucket do S3 (para armazenar logs de auditoria do CloudWatch)

⇒ Vá para o Painel do Amazon S3.
⇒ Crie um novo Balde.
⇒ Depois de criar um bucket, abra-o e navegue até a guia Permissões.
⇒ Precisaremos permitir que o CloudWatch coloque objetos no bucket (Write Access)
⇒ Clique no botão Editar para Política de bucket. Digite o seguinte código:

{
“Versão”: “2012-10-17”,
"Declaração": [
{
“Efeito”: “Permitir”,
"Diretor": {
“Serviço”: “logs.YOUR-REGION.amazonaws.com” // ou seja, logs.us-east-1.amazonaws.com
},
“Ação”: “s3:GetBucketAcl”,
“Recurso”: “arn:aws:s3:::BUCKET_NAME_HERE”
},
{
“Efeito”: “Permitir”,
"Diretor": {
“Serviço”: “logs.YOUR-REGION.amazonaws.com”
},
“Ação”: “s3:ColocarObjeto”,
“Recurso”: “arn:aws:s3:::BUCKET_NAME_HERE/*”,
"Doença": {
“StringEquals”: ​​{
“s3:x-amz-acl”: “bucket-proprietário-controle total”
}
}
}
] }

Criar função do IAM (usaremos isso para automação do Lambda)

Agora, criaremos a função do IAM que será usada na configuração da função Lambda. O serviço AWS Lambda exigirá permissão para registrar eventos e gravar no bucket do S3 que criamos.

Criaremos a função do IAM “Export-RDS-CloudWatch-to-S3-Lambda” com as políticas “AmazonS3FullAccess”, “CloudWatchLogsFullAccess” e “CloudWatchEventsFullAccess”.

⇒ Abra seu AWS IAM Dashboard.
⇒ Mude para as Funções e clique no botão Criar Função.
⇒ Em “Use case”, selecione Lambda e clique em Next.
⇒ Procure por “AmazonS3FullAccess” e selecione-o.
⇒ Procure por “CloudWatchLogsFullAccess” e selecione-o.
⇒ Procure por “CloudWatchEventsFullAccess” e selecione-o.
⇒ Defina o Nome da Função: “Export-RDS-CloudWatch-to-S3-Lambda” e clique em Criar função.

Procurando por ESPECIALISTAS da AWS? CONFIRA AQUI

Lambda (função para automatizar a exportação do CloudWatch Logs para o S3)

A função Lambda permite que você coloque seu código na função e execute-o em gatilhos. Você não precisa ter nenhum servidor ou configurado para isso. Muito fácil e eficiente!

⇒ Mude para o AWS Lambda Dashboard.
⇒ Clique em Funções e depois clique no botão Criar função.

Create Lambda Function

⇒ Mantenha “Autor para Scratch” selecionado.
⇒ Defina “Nome da função”: Export-RDS-CloudWatch-Logs-To-S3
⇒ Em “Runtime”, selecione Python 3.x.
⇒ Em “Permissões”, selecione “Usar uma função existente” e selecione a função do IAM que criamos na etapa anterior.

Configure Lambda Function

⇒ Clique na função Create e navegue até Code view e digite o seguinte script:

importar boto3
importar SO
importar data e hora

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

currentTime = datetime.datetime.now()
StartDate = currentTime – datetime.timedelta(days=nDays)
EndDate = currentTime – datetime.timedelta(days=nDays – 1)

fromDate = int(StartDate.timestamp() * 1000)
toDate = int(EndDate.timestamp() * 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.client('logs')
client.create_export_task(
logGroupName=GROUP_NAME,
fromTime=fromDate,
to=toData,
destino=DESTINATION_BUCKET,
destinationPrefix=BUCKET_PREFIX
)

⇒ Agora, clique em Configuração ⇒ Variáveis ​​de Ambiente.
⇒ Precisamos criar 4 variáveis:
⇒ DESTINATION_BUCKET: <Nome do seu bucket do S3>
⇒ GROUP_NAME: <Nome do grupo de log que você está exportando>
⇒ NDAYS: 1
⇒ PREFIX: logs exportados

Lambda Environment Variables

⇒ Tudo bem, você está definido agora. Salve a função.

Agora, vamos definir a automação para executar esta função lambda.

⇒ Agora, visite seu painel do CloudWatch.
⇒ Vá para Eventos ⇒ Regras.
⇒ Clique em Criar Regra.
⇒ Em Origem do Evento, selecione Agendar.
⇒ Defina Taxa fixa ou expressão cron para executar automaticamente nossa função lambda.
⇒ Em Destino, selecione Função Lambda.
⇒ Em Função, selecione a função que criamos no passo anterior.

Cron to Execute Lambda Function

Isso é tudo. Agora, você configurou um ambiente para exportar logs do RDS para o S3 automaticamente. Você pode reter os logs pelo tempo que desejar. Mas, se você ainda enfrentar algum problema, sinta-se à vontade para postar um comentário aqui. Gostaríamos muito de ouvir de você!!

Procurando por ESPECIALISTAS da AWS? CONFIRA AQUI