Обзор
В Object Storage вы можете отслеживать и анализировать все действия с бакетом и объектами в нем. Информация об этих действиях записывается в логи.
Логирование помогает:
- контролировать доступ пользователей к данным, выявлять подозрительные действия и принимать необходимые меры:
- анализировать взаимодействие сайтов и приложений с Object Storage;
- собирать статистику использования Object Storage.
Принцип работы
По умолчанию логирование в бакетах отключено. Прежде чем его активировать, нужно:
- Создать целевой бакет, в котором будут храниться логи.
- Указать префикс для логов в целевом бакете.
Внимание
Если для целевого бакета настроена политика доступа, нужно добавить в нее правило, которое разрешает всем учетным записям выполнять операцию PutObject.
В качестве ресурса нужно указать префикс, используемый для логов.
Когда в бакете включено логирование и пользователь выполняет какую-либо операцию с этим бакетом:
- Object Storage фиксирует все детали (кто, когда, что и как запрашивал);
- запись о запросе сохраняется в целевом бакете с указанным префиксом (например,
logs/). Имя лога включает дату в форматеГГГГ-ДД-ЧЧ-ММ-ССи идентификатор, напримерlogs/2025-01-15-13-34-34-1f12b0a2-eea3-464c-b655-2dc4d6df2cfb.
Логи сохраняются в формате JSON. Одна запись в логе соответствует одной операции с бакетом.
Сохраненные таким образом логи можно анализировать как вручную, так и с помощью специализированных инструментов (Splunk, Elasticsearch и т.п.).
Для удобства работы к логам можно применять правила жизненного цикла: например, устанавливать срок, по прошествии которого логи будут удаляться.
Cтруктура лога
Пример записи
{
"bucket": "bucket",
"bytes_received": 0,
"bytes_send": 285,
"handler": "REST.GET.OBJECT",
"http_referer": "",
"ip": "<IP-адрес, с которого был выполнен запрос>",
"method": "GET",
"object_key": "logs/2025-01-08-13-04-34-849cace2-11fa-4528-82be-eada4ebc7fd0",
"protocol": "HTTP/2",
"range": "",
"requester": "projects/<имя проекта>serviceAccounts/<имя сервисного аккаунта>",
"request_args": "x-id=GetObject",
"request_id": "9bfbacc1-245f-4857-a380-61220c3f5fd6",
"request_path": "/logs/2025-01-08-13-04-34-849cace2-11fa-4528-82be-eada4ebc7fd0?x-id=GetObject",
"request_time": 51,
"scheme": "https",
"ssl_protocol": "TLSv1.3",
"status": 200,
"storage_class": "",
"timestamp": "2025-01-08T13:15:33Z",
"user_agent": "aws-sdk-go-v2/1.32.6 ua/2.1 os/linux lang/go#1.23.4 md/GOOS#linux md/GOARCH#amd64 api/s3#1.71.0 m/E",
"version_id": "",
"vhost": "bucket.storage.mwsapis.ru"
}Поля лога
| Параметр | Тип | Значение |
|---|---|---|
bucket | String | Имя бакета, к которому был выполнен запрос |
bytes_received | Int64 | Объем данных, полученных от клиента в запросе |
bytes_send | Int64 | Объем данных, отправленных клиенту в ответе на запрос |
handler | String | HTTP-метод, использованный в запросе (в формате REST.<метод>.<объект операции>) |
http_referer | String | Источник запроса - например, URL, с которого был выполнен запрос |
ip | String | IP-адрес, с которого был выполнен запрос |
method | String | HTTP-метод, использованный в запросе (в формате REST.<метод>.<объект операции>) |
object_key | String | Ключ запрошенного объекта |
protocol | String | Версия HTTP-протокола, использованная в запросе клиента |
range | String | Диапазон байтов, запрошенный клиентом (например, при частичной загрузке объекта) |
requester | String | Идентификатор, который указывает, кто именно выполнил запрос. Это может быть сервисный аккаунт, пользователь или приложение |
request_id | String | Уникальный идентификатор запроса |
request_args | String | Аргументы запроса |
request_path | String | Полный путь запроса (включая ключ объекта и параметры строки запроса) |
request_time | Int64 | Время выполнения запроса в миллисекундах |
status | Int64 | Код ответа |
storage_class | String | Класс хранения запрошенного объекта (значение этого поля будет пустым) |
scheme | String | Тип протокола HTTP (http или https) |
ssl_protocol | String | Версия протокола обеспечения безопасности |
timestamp | String | Дата и время выполнения операции в формате ISO 8601 |
user_agent | String | Клиентское приложение, выполнившее запрос |
version_id | String | Идентификатор запрошенной версии объекта |
vhost | String | Виртуальный хост, использованный в запросе. Как правило, это URL бакета |
Методы и операции в запросах к бакету
| Метод | Объект операции | Описание |
|---|---|---|
PUT | BUCKET | Создание бакета |
GET | BUCKET_LIST_V2 | Получение списка объектов в бакете |
DELETE | BUCKET | Удаление бакета |
GET | BUCKET_VERSIONING | Получение информации о статусе версионирования в бакете |
PUT | BUCKET_VERSIONING | Включение или приостановка версионирования в бакете |
GET | BUCKET_TAGGING | Получение списка тегов бакета |
PUT | BUCKET_TAGGING | Добавление тегов бакета |
DELETE | BUCKET_TAGGING | Удаление тегов бакета |
GET | BUCKET_POLICY | Просмотр текущей политики бакета |
PUT | BUCKET_POLICY | Добавление политики бакета |
DELETE | BUCKET_POLICY | Удаление политики бакета |
PUT | OBJECT | Загрузка объекта с помощью утилит командной строки, API, SDK |
POST | OBJECT | Загрузка объекта через веб-консоль |
GET | OBJECT | Скачивание объекта |
DELETE | OBJECT | Удаление объекта |
COPY | OBJECT | Cоздание копии объекта |
HEAD | OBJECT | Получение метаданных объекта |
DELETE | OBJECT_TAGGING | Удаление тегов объектов |
GET | OBJECT_TAGGING | Получение тегов объекта |
PUT | OBJECT_TAGGING | Назначение тегов объекта |
GET | MULTIPART | Получение списка текущих составных загрузок |
POST | INIT_MULTIPART | Инициация составной загрузки: получение идентификатора для выполнения всех последующих операций |
POST | COMPLETE_MULTIPART | Завершение составной загрузки |
DELETE | ABORT_MULTIPART | Остановка составной загрузки |
PUT | UPLOAD_PART | Загрузка части объекта при составной загрузке |
GET | UPLOAD_PART | Получение списка загруженных во время составной загрузки частей объекта |
Особенности и ограничения
- Информация о запросах к объектам в бакете записывается в логи с задержкой до нескольких часов.
- Полнота логирования не гарантируется. Не все операции отражаются в логах.
- Если для бакета настроены правила жизненного цикла, все действия, выполняемые в рамках этих правил, не логируются. Например, если правила предписывают удалять объекты по истечении установленного срока, операция удаления не будет отражены в логах.
- Для хранения логов можно использовать только бакеты, в которых выключена блокировка объектов. При попытке выбрать бакет с включенной блокировкой выводится сообщение об ошибке.
- Настройки логирования после изменения вступают в силу не моментально, а через некоторое время (от нескольких минут до нескольких часов). Если вы изменили в настройках логирования целевой бакет, логи в течение некоторого времени будут сохраняться в старом целевом бакете.