Работа с механизмом логирования действий с бакетом
Чтобы отслеживать работу с бакетом, включите механизм логирования. Подробная информация о запросах к исходному бакету будет сохранена в объекте в целевом бакете. Однако Object Storage не гарантирует полноту и своевременность записи логов.
По умолчанию механизм логирования отключен. После его включения, Object Storage будет записывать информацию о действиях с бакетом раз в час.
Включите механизм логирования
Чтобы логировать обращения к бакету:
-
Используйте существующий или создайте новый целевой бакет. В этот бакет будут записываться логи.
Как создать бакетМинимально необходимая роль для создания бакета —
storage.editor
. См. описание роли.Консоль управленияYandex Cloud CLIAWS CLITerraformAPI- В консоли управления
выберите каталог, в котором хотите создать бакет. - Выберите сервис Object Storage.
- Нажмите кнопку Создать бакет.
- На странице создания бакета:
-
Введите имя бакета в соответствии с правилами именования.
По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
-
При необходимости ограничьте максимальный размер бакета.
Размер
0
означает отсутствие ограничений и аналогичен включенной опции Без ограничения. -
Выберите тип доступа.
-
Выберите класс хранилища по умолчанию.
-
При необходимости добавьте метки:
- Нажмите кнопку Добавить метку.
- Введите метку в формате
ключ: значение
. - Нажмите Enter.
-
Нажмите кнопку Создать бакет для завершения операции.
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.-
Посмотрите описание команды CLI для создания бакета:
yc storage bucket create --help
-
Создайте бакет в каталоге по умолчанию:
yc storage bucket create \ --name <имя_бакета> \ --default-storage-class <класс_хранилища> \ --max-size <максимальный_размер_бакета> \ --public-read \ --public-list \ --public-config-read
Где:
-
--name
— имя бакета. Подробнее см. Правила именования бакетов.По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
-
--default-storage-class
— класс хранилища. Доступные значения:standard
— стандартное хранилище;cold
— холодное хранилище;ice
— ледяное хранилище.
-
--max-size
— максимальный размер бакета в байтах.0
— без ограничений. -
--public-read
— флаг для включения публичного доступа на чтение объектов в бакете. -
--public-list
— флаг для включения публичного доступа на просмотр списка объектов в бакете. -
--public-config-read
— флаг для включения публичного доступа на чтение настроек в бакете.
name
— обязательный парметр. Остальные параметры необязательны. По умолчанию значение параметра--max-size
—0
, публичный доступ к бакету выключен.Результат:
name: <имя_бакета> folder_id: b1gmit33ngp6******** anonymous_access_flags: read: false list: false default_storage_class: STANDARD versioning: VERSIONING_DISABLED max_size: "53687091200" acl: {} created_at: "2022-12-16T14:05:12.196007Z"
-
Если у вас еще нет интерфейса командной строки AWS CLI, установите и сконфигурируйте его.
В терминале выполните команду, указав имя бакета и эндпоинт Object Storage:
aws --endpoint-url=https://storage.yandexcloud.net \ s3 mb s3://<имя_бакета>
Примечание
По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage. Подробнее см. Правила именования бакетов.
Terraform
позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ей с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Business Source License .Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
или в зеркале .При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
terraform { required_providers { yandex = { source = "yandex-cloud/yandex" } } required_version = ">= 0.13" } provider "yandex" { token = "<IAM-_или_OAuth-токен>" cloud_id = "<идентификатор_облака>" folder_id = "<идентификатор_каталога>" zone = "ru-central1-a" } resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" } // Назначение роли сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "sa-editor" { folder_id = "<идентификатор_каталога>" role = "storage.editor" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" } // Создание бакета с использованием ключа resource "yandex_storage_bucket" "test" { access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key bucket = "<имя_бакета>" }
Где:
yandex_iam_service_account
— описание сервисного аккаунта, который создаст бакет и будет работать с ним:name
— имя сервисного аккаунта.
yandex_storage_bucket
— описание бакета:bucket
— имя бакета.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
- В командной строке перейдите в папку, где вы создали конфигурационный файл.
- Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Чтобы создать бакет, воспользуйтесь методом REST API create для ресурса Bucket, вызовом gRPC API BucketService/Create или методом S3 API create.
Примечание
Чтобы записывать логи в целевой бакет, для которого настроена политика доступа, добавьте в нее правило, разрешающее всем учетным записям выполнять действие
PutObject
, а в качестве ресурса укажите префикс ключа для объектов с логами, напримерlogs/
. - В консоли управления
-
Включите механизм логирования в исходном бакете, который вы хотите отслеживать.
Консоль управленияAWS CLITerraformAPI- В консоли управления
выберите каталог, где находится исходный бакет. - Выберите сервис Object Storage.
- Перейдите на вкладку Логирование.
- Включите опцию Запись логов.
- Выберите Бакет для хранения логов.
- В поле Префикс укажите префикс, с которым будут сохраняться логи.
- Нажмите кнопку Сохранить.
Чтобы включить логирование с помощью AWS CLI:
-
Создайте файл с настройками логирования в формате JSON. Например:
{ "LoggingEnabled": { "TargetBucket": "<имя_целевого_бакета>", "TargetPrefix": "<префикс_ключа>" } }
Где:
TargetBucket
— имя целевого бакета, в который будут записываться логи.TargetPrefix
— префикс ключа для объектов с логами, например,logs/
.
-
Включите логирование в бакете:
aws s3api put-bucket-logging \ --bucket <имя_исходного_бакета> \ --endpoint-url https://storage.yandexcloud.net \ --bucket-logging-status file://<путь_к_файлу_настроек>
Где:
--bucket
— имя исходного бакета, для которого нужно включить логирование действий.--bucket-logging-status
— путь к файлу с настройками логирования.
Чтобы включить механизм логирования в бакете, который вы хотите отслеживать:
-
Откройте файл конфигурации Terraform и добавьте блок
logging
во фрагмент с описанием бакета.resource "yandex_storage_bucket" "log_bucket" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_бакета_для_хранения_логов>" } resource "yandex_storage_bucket" "bucket" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_исходного_бакета>" acl = "private" logging { target_bucket = yandex_storage_bucket.log_bucket.id target_prefix = "log/" } }
Где:
access_key
— идентификатор статического ключа доступа.secret_key
— значение секретного ключа доступа.target_bucket
— указание на бакет для хранения логов.target_prefix
— префикс ключа для объектов с логами, напримерlogs/
.
Более подробную информацию о параметрах ресурса
yandex_storage_bucket
в Terraform см. в документации провайдера .-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.
Чтобы включить механизм логирования в бакете, воспользуйтесь методом S3 API putBucketLogging.
Пример тела HTTP-запроса:
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01"> <LoggingEnabled> <TargetBucket>имя целевого бакета</TargetBucket> <TargetPrefix>префикс ключа</TargetPrefix> </LoggingEnabled> </BucketLoggingStatus>
Где:
TargetBucket
– имя целевого бакета;TargetPrefix
– префикс ключа для объектов с логами, напримерlogs/
.
- В консоли управления
Получите настройки логирования
Чтобы получить имя целевого бакета и префикс ключа объекта с логами, выполните следующее действие:
- В консоли управления
перейдите в исходный бакет. - Перейдите на вкладку Логирование.
- В списке Бакет для хранения логов содержится имя целевого бакета.
- В поле Префикс содержится префикс, с которым сохраняются логи.
Чтобы получить настройки логирования с помощью AWS CLI:
Выполните команду:
aws s3api get-bucket-logging \
--bucket <имя_бакета> \
--output json \
--endpoint-url https://storage.yandexcloud.net
Результат:
{
"LoggingEnabled": {
"TargetBucket": "<имя_бакета>",
"TargetPrefix": "<префикс_ключа>"
}
}
Чтобы получить настройки логирования в бакете, который вы хотите отслеживать:
-
Откройте файл конфигурации Terraform и найдите блок
logging
в фрагменте с описанием бакета.resource "yandex_storage_bucket" "log_bucket" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_бакета_для_хранения_логов>" } resource "yandex_storage_bucket" "bucket" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_исходного_бакета>" acl = "private" logging { target_bucket = yandex_storage_bucket.log_bucket.id target_prefix = "log/" } }
Где:
access_key
— идентификатор статического ключа доступа.secret_key
— значение секретного ключа доступа.target_bucket
— указание на бакет для хранения логов.target_prefix
— префикс ключа для объектов с логами, напримерlogs/
.
Более подробную информацию о параметрах ресурса
yandex_storage_bucket
в Terraform см. в документации провайдера .
Воспользуйтесь методом S3 API getBucketLogging.
Пример тела HTTP-ответа:
HTTP/1.1 200
<?xml version="1.0" encoding="UTF-8"?>
<BucketLoggingStatus>
<LoggingEnabled>
<TargetBucket>имя целевого бакета</TargetBucket>
<TargetPrefix>logs/</TargetPrefix>
</LoggingEnabled>
</BucketLoggingStatus>
Получите логи
Чтобы получить логи, скачайте из целевого бакета объект с префиксом logs/
:
- В консоли управления
выберите каталог, где находится целевой бакет с логами. - Выберите сервис Object Storage.
- Выберите целевой бакет с логами.
- Перейдите в папку
logs/
. - Напротив объекта с логами, который вы хотите скачать, нажмите
и выберите Скачать.
Чтобы получить логи с помощью AWS CLI, скачайте объекты с префиксом logs/
, следуя инструкции.
Воспользуйтесь методом S3 API get сервиса Object.
Выключить механизм логирования
Чтобы выключить логирование, выполните следующее действие:
- В консоли управления
выберите каталог, где находится исходный бакет. - Выберите сервис Object Storage.
- Перейдите на вкладку Логирование.
- Выключите опцию Запись логов.
- Нажмите кнопку Сохранить.
Чтобы выключить логирование с помощью AWS CLI, воспользуйтесь командой:
aws s3api put-bucket-logging \
--bucket <имя_бакета> \
--endpoint-url https://storage.yandexcloud.net \
--bucket-logging-status {}
Где --bucket
— имя исходного бакета, для которого нужно выключить логирование действий.
Чтобы выключить механизм логирования:
-
В файле конфигураций Terraform удалите блок
logging
во фрагменте с описанием бакета.Пример описания бакета в конфигурации Terraform... resource "yandex_storage_bucket" "log_bucket" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_бакета_для_хранения_логов>" } resource "yandex_storage_bucket" "bucket" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_исходного_бакета>" acl = "private" logging { target_bucket = yandex_storage_bucket.log_bucket.id target_prefix = "log/" } } ...
-
Примените изменения в конфигурации:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
Проверить изменения можно в консоли управления
Воспользуйтесь методом S3 API putBucketLogging. В теле запроса передайте параметр <BucketLoggingStatus>
с пустым значением.
Пример тела HTTP-запроса:
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01" />