Как автоматически экспортировать журналы аудита AWS RDS в экземпляр корзины S3?
Опубликовано: 2022-03-05Прежде чем мы узнаем, как автоматически экспортировать журналы аудита RDS в S3, знаете ли вы, что AWS CloudWatch автоматически сохраняет журналы БД RDS? Да, они это делают, но они хранят только общие журналы для вашего экземпляра БД. А что, если вы хотите найти конкретный запрос или данные из журнала? Какой пользователь выполнил конкретный запрос или с какого IP-адреса? Кто удалил определенные записи из ваших таблиц БД?
Кроме того, каким-то образом вам удалось экспортировать все журналы аудита вашего экземпляра RDS в CloudWatch, и это здорово. Но знаете ли вы? CloudWatch будет хранить эти журналы только в течение 30 дней! Чтобы сохранить их в течение более длительного периода, необходимо экспортировать журналы CloudWatch в корзину S3. Вы можете сделать это вручную с панели управления CloudWatch. Но что, если вы хотите, чтобы для этого была автоматизация?
Это руководство проведет вас через все шаги, необходимые для автоматической регистрации всех таких событий!!
Это руководство включает в себя:
1) Настройте параметры RDS для отправки журналов аудита в CloudWatch.
2) Создайте корзину S3 (для хранения журналов аудита CloudWatch)
3) Создайте роль IAM (мы будем использовать ее для автоматизации Lambda)
4) Lambda (функция для автоматизации экспорта журналов CloudWatch в S3)
Давайте начнем!
Настройте параметры RDS для отправки журналов аудита в CloudWatch
Прежде всего, нам нужно настроить RDS для отправки определенных журналов в CloudWatch. Для этого мы создадим одну группу параметров и одну группу параметров.
Создать группу параметров
⇒ Посетите панель управления Amazon RDS.
⇒ Перейдите в группу опций.
⇒ Нажмите кнопку «Создать группу».
⇒ Введите имя и описание для этой группы.
⇒ Выберите Engine: mysql и Engine Version: 8.0. Нажмите «Создать».
⇒ Нажмите на созданную вами группу опций.
⇒ В разделе «Параметры» нажмите кнопку «Добавить».
⇒ В разделе «SERVER_AUDIT_EVENTS*» введите значения, которые вы хотите проверить, например, CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Если вы хотите регистрировать все запросы, выполняемые к вашим таблицам, просто введите QUERY в это поле.
⇒ Установите «Да» для «Применить немедленно». Нажмите «Добавить вариант».
Создать группу параметров
⇒ Давайте откроем панель инструментов Amazon RDS.
⇒ Нажмите на группу параметров.
⇒ Нажмите кнопку «Создать группу параметров».
⇒ Выберите «Семейство групп параметров»: mysql8.0
⇒ Выберите «Тип»: Группа параметров БД
⇒ Введите имя и описание группы. Нажмите «Создать».
⇒ Теперь нажмите на группу параметров, которую вы создали.
⇒ В разделе «Параметры» мы отредактируем определенные параметры и установим следующие значения:
⇒ Отредактируйте параметр: «log_output» ⇒ Измените его значение с ТАБЛИЦА на ФАЙЛ.
⇒ Отредактируйте параметр: «slow_query_log» ⇒ Измените его значение с BLANK на 1.
⇒ Отредактируйте параметр: «general_log» ⇒ Измените его значение с BLANK на 1
Теперь у нас все готово с нашей группой параметров и группой параметров. Теперь давайте выделим эти группы для нашего RDS.
⇒ Перейдите на панель управления RDS.
⇒ Нажмите на созданную вами RDS.
⇒ Нажмите «Изменить».
⇒ Прокрутите страницу вниз и перейдите в раздел «Параметры базы данных».
⇒ В разделе «Группа параметров БД» выберите созданную вами группу параметров.
⇒ В разделе «Группа опций» выберите созданную вами группу опций.
Теперь у нас все готово с RDS. После того, как вы выполните описанные выше шаги, подождите 20-30 минут, чтобы заполнить данные в CloudWatch (ПРИМЕЧАНИЕ. Это может занять больше времени в зависимости от размера журналов).
После того как CloudWatch соберет все журналы, вы увидите журналы аудита на панели управления CloudWatch. Это будет выглядеть следующим образом:
Создание корзины 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» и нажмите «Создать роль».
Lambda (функция для автоматизации экспорта журналов CloudWatch в S3)
Лямбда-функция позволяет вам поместить свой код в функцию и запускать ее на триггерах. Вам не нужно иметь какой-либо сервер или настроить для этого. Очень легко и эффективно!
⇒ Переключитесь на панель мониторинга AWS Lambda.
⇒ Нажмите «Функции», а затем нажмите кнопку «Создать функцию».
⇒ Оставьте выбранным «Автор для нуля».
⇒ Установите «Имя функции»: Export-RDS-CloudWatch-Logs-To-S3.
⇒ В разделе «Время выполнения» выберите Python 3.x.
⇒ В разделе «Разрешения» выберите «Использовать существующую роль» и выберите роль IAM, которую мы создали на предыдущем шаге.
⇒ Нажмите на функцию «Создать», перейдите к представлению «Код» и введите следующий скрипт:
импорт бото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
⇒ ПРЕФИКС: экспортированные журналы
⇒ Хорошо, теперь все готово. Сохраните функцию.
Теперь давайте настроим автоматизацию для запуска этой лямбда-функции.
⇒ Теперь перейдите на панель инструментов CloudWatch.
⇒ Перейдите в События ⇒ Правила.
⇒ Нажмите «Создать правило».
⇒ В разделе «Источник события» выберите «Расписание».
⇒ Установите фиксированную скорость или выражение cron для автоматического запуска нашей лямбда-функции.
⇒ В разделе «Цель» выберите «Лямбда-функция».
⇒ В разделе «Функция» выберите функцию, которую мы создали на предыдущем шаге.
Это все. Теперь вы настроили среду для автоматического экспорта журналов RDS в S3. Вы можете хранить журналы столько, сколько хотите. Но, если вы все еще сталкиваетесь с какой-либо проблемой, не стесняйтесь оставлять комментарии здесь. Мы были бы рады получить известия от вас!!