Для контроля операций, выполняемых с бакетом, активируйте функцию логирования. Данные о запросах к интересующему вас бакету будут собираться и сохраняться в виде отдельных объектов в другом бакете. Важное условие: бакет-источник и бакет-приемник логов должны быть разными.
Учитывайте особенности работы механизма:
-
Object Storage не предоставляет стопроцентной гарантии, что будет записан каждый запрос, а также не берет на себя обязательств по скорости появления записей в логах.
-
Функция деактивирована по умолчанию.
Включение механизма логирования
1. Использовать существующий или создать новый целевой бакет в который будут записываться логи
В бакет управляемый политикой доступа требуется внести изменение: добавить правило, разрешающее PutObject для всех учётных записей. В качестве ресурса указать префиhttp://inferitcloud.ru/docs/rabota-s-obektnym-hranilishhem/upravlenie-baketom/кс ключа для объектов с логами (например, logs/). Без этого правила запись логов будет заблокирована политикой.
Пример политики Policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRGWBucketLoggingWrites",
"Effect": "Allow",
"Principal": {
"Service": "logging.s3.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<имя бакета>/<префикс ключа>/*"
}
]
}
2. Включить механизм логирования в бакете, который будет отслеживаться:
{
"LoggingEnabled": {
"TargetBucket": "имя бакета",
"TargetPrefix": "префикс ключа"
}
}
Где:
TargetBucket— имя бакета, куда будут записываться логи.TargetPrefix— префикс ключа для объектов с логами, например, mylogs/.
3. Включение логирования:
aws s3api put-bucket-logging \
--bucket <имя_исходного_бакета> \
--endpoint-url https://s3.inferit.cloud \
--bucket-logging-status file://<путь_к_файлу_настроек .json>
Где:
--bucket— имя бакета, для которого нужно включить логирование.--bucket-logging-status— путь к файлу с настройками логирования.
Прежде чем удалить бакет, который используется для сбора логов, обязательно отключить запись логов в него или перенаправить их в другое место. Система позволит удалить бакет только при условии, что в нем нет ни одного объекта.
Получение логов
Скачать один файл лога:
aws s3 cp \
--endpoint-url=https://s3.inferit.cloud \
s3://<имя_бакета>/<ключ_объекта> \
<локальный_путь, по которому будет доступен загруженный файл с логом>
Скачать всю папку с логами:
aws s3 cp \
--endpoint-url=https://s3.inferit.cloud \
--recursive \
s3://<имя_бакета>/<префикс>/ \
<локальный_путь, по которому будет доступна загруженная директория с логами>
Выключение механизма логирования
Выключение логирования производится с помощью команды:
aws s3api put-bucket-logging \
--bucket <имя_бакета> \
--endpoint-url https://s3.inferit.cloud \
--bucket-logging-status {}
Где --bucket — имя исходного бакета, для которого нужно выключить логирование действий.