Как автоматически экспортировать журналы аудита AWS RDS в экземпляр корзины S3?

Опубликовано: 2022-03-05

Export RDS logs to S3 Bucket

Прежде чем мы узнаем, как автоматически экспортировать журналы аудита RDS в S3, знаете ли вы, что AWS CloudWatch автоматически сохраняет журналы БД RDS? Да, они это делают, но они хранят только общие журналы для вашего экземпляра БД. А что, если вы хотите найти конкретный запрос или данные из журнала? Какой пользователь выполнил конкретный запрос или с какого IP-адреса? Кто удалил определенные записи из ваших таблиц БД?

Кроме того, каким-то образом вам удалось экспортировать все журналы аудита вашего экземпляра RDS в CloudWatch, и это здорово. Но знаете ли вы? CloudWatch будет хранить эти журналы только в течение 30 дней! Чтобы сохранить их в течение более длительного периода, необходимо экспортировать журналы CloudWatch в корзину S3. Вы можете сделать это вручную с панели управления CloudWatch. Но что, если вы хотите, чтобы для этого была автоматизация?

Это руководство проведет вас через все шаги, необходимые для автоматической регистрации всех таких событий!!

Ищете ЭКСПЕРТОВ AWS? ЗАКАЗАТЬ ЗДЕСЬ

Это руководство включает в себя:

1) Настройте параметры RDS для отправки журналов аудита в CloudWatch.
2) Создайте корзину S3 (для хранения журналов аудита CloudWatch)
3) Создайте роль IAM (мы будем использовать ее для автоматизации Lambda)
4) Lambda (функция для автоматизации экспорта журналов CloudWatch в S3)

Давайте начнем!

Настройте параметры RDS для отправки журналов аудита в CloudWatch

Прежде всего, нам нужно настроить RDS для отправки определенных журналов в CloudWatch. Для этого мы создадим одну группу параметров и одну группу параметров.

Создать группу параметров

⇒ Посетите панель управления Amazon RDS.
⇒ Перейдите в группу опций.
⇒ Нажмите кнопку «Создать группу».

Create an Option Group

⇒ Введите имя и описание для этой группы.
⇒ Выберите Engine: mysql и Engine Version: 8.0. Нажмите «Создать».

Create an Option Group

⇒ Нажмите на созданную вами группу опций.
⇒ В разделе «Параметры» нажмите кнопку «Добавить».
⇒ В разделе «SERVER_AUDIT_EVENTS*» введите значения, которые вы хотите проверить, например, CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Если вы хотите регистрировать все запросы, выполняемые к вашим таблицам, просто введите QUERY в это поле.
⇒ Установите «Да» для «Применить немедленно». Нажмите «Добавить вариант».

Option Group Settings

Ищете ЭКСПЕРТОВ AWS? ЗАКАЗАТЬ ЗДЕСЬ

Создать группу параметров

⇒ Давайте откроем панель инструментов Amazon RDS.
⇒ Нажмите на группу параметров.
⇒ Нажмите кнопку «Создать группу параметров».

Create Parameter Group

⇒ Выберите «Семейство групп параметров»: mysql8.0
⇒ Выберите «Тип»: Группа параметров БД
⇒ Введите имя и описание группы. Нажмите «Создать».

Create Parameter Group

⇒ Теперь нажмите на группу параметров, которую вы создали.
⇒ В разделе «Параметры» мы отредактируем определенные параметры и установим следующие значения:
⇒ Отредактируйте параметр: «log_output» ⇒ Измените его значение с ТАБЛИЦА на ФАЙЛ.
⇒ Отредактируйте параметр: «slow_query_log» ⇒ Измените его значение с BLANK на 1.
⇒ Отредактируйте параметр: «general_log» ⇒ Измените его значение с BLANK на 1

Теперь у нас все готово с нашей группой параметров и группой параметров. Теперь давайте выделим эти группы для нашего RDS.

⇒ Перейдите на панель управления RDS.
⇒ Нажмите на созданную вами RDS.
⇒ Нажмите «Изменить».
⇒ Прокрутите страницу вниз и перейдите в раздел «Параметры базы данных».
⇒ В разделе «Группа параметров БД» выберите созданную вами группу параметров.
⇒ В разделе «Группа опций» выберите созданную вами группу опций.

Tweak RDS Settings

Теперь у нас все готово с RDS. После того, как вы выполните описанные выше шаги, подождите 20-30 минут, чтобы заполнить данные в CloudWatch (ПРИМЕЧАНИЕ. Это может занять больше времени в зависимости от размера журналов).

После того как CloudWatch соберет все журналы, вы увидите журналы аудита на панели управления CloudWatch. Это будет выглядеть следующим образом:

CloudWatch Log Groups

Ищете ЭКСПЕРТОВ AWS? ЗАКАЗАТЬ ЗДЕСЬ

Создание корзины S3 (для хранения журналов аудита CloudWatch)

⇒ Перейдите на панель инструментов Amazon S3.
⇒ Создайте новый сегмент.
⇒ Создав корзину, откройте ее и перейдите на вкладку «Разрешения».
⇒ Нам нужно разрешить CloudWatch помещать объекты в корзину (доступ для записи)
⇒ Нажмите кнопку «Изменить» для политики корзины. Введите следующий код:

{
«Версия»: «2012-10-17»,
"Заявление": [
{
«Эффект»: «Разрешить»,
"Главный": {
«Сервис»: «logs.ВАШ-РЕГИОН.amazonaws.com» // т.е. logs.us-east-1.amazonaws.com
},
«Действие»: «s3: GetBucketAcl»,
«Ресурс»: «arn:aws:s3:::BUCKET_NAME_HERE»
},
{
«Эффект»: «Разрешить»,
"Главный": {
«Сервис»: «logs.YOUR-REGION.amazonaws.com»
},
«Действие»: «s3:PutObject»,
«Ресурс»: «arn:aws:s3:::BUCKET_NAME_HERE/*»,
"Условие": {
«StringEquals»: {
«s3:x-amz-acl»: «владелец-сегмента-полный-контроль»
}
}
}
] }

Создайте роль IAM (мы будем использовать ее для автоматизации Lambda)

Теперь мы создадим роль IAM, которая будет использоваться при настройке функции Lambda. Сервису AWS Lambda потребуется разрешение на регистрацию событий и запись в созданную нами корзину S3.

Мы создадим роль IAM «Export-RDS-CloudWatch-to-S3-Lambda» с политиками «AmazonS3FullAccess», «CloudWatchLogsFullAccess» и «CloudWatchEventsFullAccess».

⇒ Откройте панель инструментов AWS IAM.
⇒ Переключитесь на роли и нажмите кнопку «Создать роль».
⇒ В разделе «Сценарий использования» выберите «Лямбда» и нажмите «Далее».
⇒ Найдите «AmazonS3FullAccess» и выберите его.
⇒ Найдите «CloudWatchLogsFullAccess» и выберите его.
⇒ Найдите «CloudWatchEventsFullAccess» и выберите его.
⇒ Задайте имя роли: «Export-RDS-CloudWatch-to-S3-Lambda» и нажмите «Создать роль».

Ищете ЭКСПЕРТОВ AWS? ЗАКАЗАТЬ ЗДЕСЬ

Lambda (функция для автоматизации экспорта журналов CloudWatch в S3)

Лямбда-функция позволяет вам поместить свой код в функцию и запускать ее на триггерах. Вам не нужно иметь какой-либо сервер или настроить для этого. Очень легко и эффективно!

⇒ Переключитесь на панель мониторинга AWS Lambda.
⇒ Нажмите «Функции», а затем нажмите кнопку «Создать функцию».

Create Lambda Function

⇒ Оставьте выбранным «Автор для нуля».
⇒ Установите «Имя функции»: Export-RDS-CloudWatch-Logs-To-S3.
⇒ В разделе «Время выполнения» выберите Python 3.x.
⇒ В разделе «Разрешения» выберите «Использовать существующую роль» и выберите роль IAM, которую мы создали на предыдущем шаге.

Configure Lambda Function

⇒ Нажмите на функцию «Создать», перейдите к представлению «Код» и введите следующий скрипт:

импорт бото3
импорт ОС
импорт даты и времени

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

текущее время = datetime.datetime.now()
StartDate = текущее время – datetime.timedelta (дни = nDays)
EndDate = текущее время — datetime.timedelta (дни = 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 (событие, контекст):
клиент = boto3.client('журналы')
client.create_export_task(
logGroupName=ГРУППА_ИМЯ,
отВремени=отДаты,
до = до даты,
пункт назначения = DESTINATION_BUCKET,
дестинативный префикс = BUCKET_PREFIX
)

⇒ Теперь нажмите Конфигурация ⇒ Переменные среды.
⇒ Нам нужно создать 4 переменные:
⇒ DESTINATION_BUCKET: <Имя корзины S3>
⇒ GROUP_NAME: <имя экспортируемой группы журналов>
⇒ ДНИ: 1
⇒ ПРЕФИКС: экспортированные журналы

Lambda Environment Variables

⇒ Хорошо, теперь все готово. Сохраните функцию.

Теперь давайте настроим автоматизацию для запуска этой лямбда-функции.

⇒ Теперь перейдите на панель инструментов CloudWatch.
⇒ Перейдите в События ⇒ Правила.
⇒ Нажмите «Создать правило».
⇒ В разделе «Источник события» выберите «Расписание».
⇒ Установите фиксированную скорость или выражение cron для автоматического запуска нашей лямбда-функции.
⇒ В разделе «Цель» выберите «Лямбда-функция».
⇒ В разделе «Функция» выберите функцию, которую мы создали на предыдущем шаге.

Cron to Execute Lambda Function

Это все. Теперь вы настроили среду для автоматического экспорта журналов RDS в S3. Вы можете хранить журналы столько, сколько хотите. Но, если вы все еще сталкиваетесь с какой-либо проблемой, не стесняйтесь оставлять комментарии здесь. Мы были бы рады получить известия от вас!!

Ищете ЭКСПЕРТОВ AWS? ЗАКАЗАТЬ ЗДЕСЬ