Механизм логирования действий с бакетом
В Object Storage есть механизм логирования всех действий с бакетом. Вы можете записывать логи, например, для проведения внутреннего аудита безопасности или для уточнения информации по операциям с бакетом.
По умолчанию механизм логирования отключен. После его включения, Object Storage будет записывать информацию о действиях с бакетом в виде объекта раз в час.
Чтобы записывать логи, необходимо:
- определить исходный бакет, действия с которым необходимо логировать;
- создать целевой бакет, куда будут записываться логи;
- включить механизм логирования;
- (опционально) выбрать префикс ключа объекта.
Требования
Исходный и целевой бакеты должны находиться в одном облаке.
Формат ключа объекта с логами
Object Storage использует следующий формат ключа объекта с логами:
<префикс>/ГГГГ-ММ-ДД-ЧЧ-ММ-СС-<идентификатор>
Где:
префикс/
— префикс ключа объекта с логами. Вы можете самостоятельно указать префикс при включении механизма логирования.ГГГГ-ММ-ДД-ЧЧ-ММ-СС
— дата и время сохранения объекта с логами в целевом бакете, в формате UTC.идентификатор
— уникальный идентификатор записи, который предотвращает перезапись объекта.
Префикс ключа
Префикс ключа позволяет различать:
- Данные из разных бакетов, если логи для нескольких исходных бакетов сохраняются в один целевой.
- Действия по логированию от остальных действий с бакетом, если логи сохраняются в исходном бакете. Так как в этом случае сама операция логирования тоже будет учтена как действие с бакетом.
- Объекты с логами и другие объекты, чтобы периодически удалять логи. Вы можете настроить жизненный цикл целевого бакета так, чтобы объекты с определенным префиксом ключа удалялись автоматически.
Формат объекта с логами
Логи сохраняются в файл в формате JSON. На каждое действие с бакетом в файле появляется запись следующего формата:
Поле | Тип | Описание |
---|---|---|
bucket |
String | Имя бакета. |
bytes_received |
Int64 | Размер запроса в байтах. |
bytes_send |
Int64 | Размер ответа в байтах. |
handler |
String | Метод запроса в формате REST.<HTTP-метод>.<субъект> . |
http_referer |
String | URL-адрес источника запроса. |
ip |
String | IP-адрес пользователя. |
method |
String | Метод HTTP-запроса. |
object_key |
String | Ключ объекта, закодированный методом URL-кодировки. |
protocol |
String | Версия протокола передачи данных. |
range |
String | HTTP-заголовок, который определяет диапазон байт для загрузки из объекта. |
requester |
String | Идентификатор пользователя. |
request_args |
String | Аргументы URL-запроса. |
request_id |
String | Идентификатор запроса. |
request_path |
String | Полный путь запроса. |
request_time |
Int64 | Время обработки запроса, в миллисекундах. |
scheme |
String | Тип протокола передачи данных. Возможные значения: - http — протокол прикладного уровня передачи данных.- https — протокол прикладного уровня передачи данных с поддержкой шифрования. |
ssl_protocol |
String | Протокол обеспечения безопасности. |
status |
Int64 | HTTP-код ответа. |
storage_class |
String | Класс хранилища объекта. |
timestamp |
String | Дата и время операции с бакетом, в формате ГГГГ-ММ-ДДTЧЧ:ММ:ССZ . |
user_agent |
String | Клиентское приложение (User Agent), которое выполнило запрос. |
version_id |
String | Версия объекта. |
vhost |
String | Виртуальный хост запроса. Возможные значения: – storage.yandexcloud.net .– <имя бакета>.storage.yandexcloud.net .– website.yandexcloud.net .– <имя бакета>.website.yandexcloud.net . |
Пример записи в файле с логами:
{
"bucket": "my-bucket-example",
"bytes_received": 749,
"bytes_send": 1251,
"handler": "REST.GET.OBJECT",
"http_referer": "https://example.com/page",
"ip": "84.201.121.46",
"method": "GET",
"object_key": "path/logs/2020-11-10-14-42-11-123f57b5-1853-4120-8d7a-5bcc1e9e9b4f",
"protocol": "HTTP/1.1",
"range": "-",
"requester": "-",
"request_args": "X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=20201030T072100Z\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Expires=43200\u0026X-Amz-Credential=ZGB4EY1...\u0026X-Amz-Signature=12f350...",
"request_id": "1235efdab7445028",
"request_path": "/my-bucket-example/path/logs/2020-11-10-14-42-11-123f57b5-1853-4120-8d7a-5bcc1e9e9b4f?X-Amz-...",
"request_time":88,
"scheme": "https",
"ssl_protocol": "TLSv1.2",
"status": 200,
"storage_class": "STANDARD",
"timestamp": "2020-11-10T13:21:18Z",
"user_agent": "docker/19.03.9 go/go1.13.10 git-commit/1d238398e7 kernel/4.4.0-142-generic os/linux arch/amd64 UpstreamClient(Go-http-client/1.1)",
"version_id": "",
"vhost": "storage.yandexcloud.net"
}
Особенности механизма логирования
У механизма логирования действий с бакетом в Object Storage есть несколько особенностей.
Негарантированная доставка логов
Большинство запросов к бакету, который был корректно настроен для логирования, сохраняются в файле с логами. Большинство записей сохраняются в течение нескольких часов после фактической обработки запроса.
Однако Object Storage не гарантирует полноту и своевременность записи логов. Запись о действии с бакетом может быть сохранена в файле с логами спустя несколько часов. В некоторых случаях запись в файле может не появиться.
Файл с логами дает общее представление о характере трафика в бакете, но не предназначен для полного учета всех запросов. В платежных документах вы можете найти несколько запросов, которые не будут отражены в файле с логами.
Длительное включение механизма
Включение механизма логирования и изменение настроек занимает около часа. Первый объект с логами сохранится в бакет через пару часов после включения механизма, но иногда поставка логов может занимать больше времени.
При изменении целевого бакета некоторые логи будут доставляться в предыдущий целевой бакет, другие — в новый.
Все изменения настроек вступят в силу без дополнительных действий со стороны пользователя.
Тарификация
Для механизма логирования действуют стандартные правила тарификации Object Storage.