Работа с механизмом логирования действий с бакетом
Чтобы отслеживать работу с бакетом, включите механизм логирования.
Подробная информация о запросах к исходному бакету будет сохранена в объекте в целевом бакете. Исходный и целевой бакеты должны различаться.
Object Storage не гарантирует полноту и своевременность записи логов.
По умолчанию механизм логирования отключен. После его включения, Object Storage будет записывать информацию о действиях с бакетом раз в час.
Включите механизм логирования
Чтобы логировать обращения к бакету:
-
Используйте существующий или создайте новый целевой бакет. В этот бакет будут записываться логи.
Как создать бакет
Чтобы создать бакет, у вас должна быть минимальная роль
storage.editor
на каталог.Консоль управленияYandex Cloud CLIAWS CLITerraformAPI- В консоли управления
выберите каталог, в котором хотите создать бакет. - Выберите сервис Object Storage.
- На панели сверху нажмите кнопку Создать бакет.
- На странице создания бакета:
-
Введите имя бакета в соответствии с правилами именования.
По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
-
При необходимости ограничьте максимальный размер бакета.
Размер
0
означает отсутствие ограничений и аналогичен включенной опции Без ограничения. -
Задайте параметры публичного доступа на чтение объектов в бакете, получение списка объектов и чтение настроек бакета:
Ограниченный
— доступ только для авторизованных пользователей Yandex Cloud.Публичный
— доступ для любых пользователей.
Важно
Публичный доступ предоставляется неограниченному кругу анонимных пользователей. Используйте его только в случае, когда нет возможности применить другие механизмы предоставления доступа.
-
Выберите класс хранилища по умолчанию:
Стандартное
.Холодное
.Ледяное
.
Более «холодные» классы предназначены для длительного хранения объектов, работать с которыми планируется реже. Чем «холоднее» хранилище, тем дешевле хранить в нем данные, но тем дороже их читать и записывать.
-
При необходимости добавьте метки:
- Нажмите кнопку Добавить метку.
- Введите метку в формате
ключ: значение
. - Нажмите Enter.
-
Нажмите кнопку Создать бакет для завершения операции.
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.-
Посмотрите описание команды CLI для создания бакета:
yc storage bucket create --help
-
Создайте бакет в каталоге по умолчанию:
yc storage bucket create --name <имя_бакета>
Где
--name
— имя бакета. Обязательный параметр. Подробнее см. Правила именования бакетов.По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
Результат:
name: example 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"
Опциональные параметры
-
--default-storage-class
— класс хранилища. Доступные значения:standard
— стандартное хранилище. Устанавливается по умолчанию.cold
— холодное хранилище.ice
— ледяное хранилище.
Более
холодные
классы предназначены для длительного хранения объектов, работать с которыми планируется реже. Чемхолоднее
хранилище, тем дешевле хранить в нем данные, но тем дороже их читать и записывать. -
--max-size
— максимальный размер бакета в байтах. Значение по умолчанию —0
(без ограничений). -
Параметры для включения публичного доступа к бакету:
--public-read
— включить публичный доступ на чтение объектов в бакете.--public-list
— включить публичный доступ на просмотр списка объектов в бакете.--public-config-read
— включить публичный доступ на чтение настроек в бакете.
По умолчанию публичный доступ к бакету выключен.
Важно
Публичный доступ предоставляется неограниченному кругу анонимных пользователей. Используйте его только в случае, когда нет возможности применить другие механизмы предоставления доступа.
-
Параметры для настройки ACL бакета:
-
--acl
— предопределенный ACL. Список возможных значений см. в разделе Предопределенные ACL. Нельзя использовать одновременно с параметром--grants
. -
--grants
— настройки разрешений для отдельных пользователей, сервисных аккаунтов, групп пользователей и публичных групп (группа всех пользователей интернета, группа всех аутентифицированных пользователей Yandex Cloud). Нельзя использовать одновременно с параметром--acl
. Значение параметра указывается в формате:grant-type=<тип_получателя_разрешения>,grantee-id=<идентификатор_получателя>,permission=<тип_разрешения>
, где:grant-type
— тип получателя разрешения. Возможные значения:grant-type-account
— пользователь, сервисный аккаунт или группа пользователей;grant-type-all-authenticated-users
— публичная группа всех аутентифицированных пользователей Yandex Cloud;grant-type-all-users
— публичная группа всех пользователей интернета.
grantee-id
— идентификатор пользователя, сервисного аккаунта или группы пользователей, которым нужно дать разрешение. Указывается, только еслиgrant-type=grant-type-account
.permission
— тип разрешения ACL. Возможные значения:permission-full-control
,permission-write
,permission-read
. Подробнее о разрешениях см. в разделе Виды разрешений.
Чтобы настроить несколько разрешений, укажите параметр
--grants
несколько раз.
По умолчанию для каждого нового бакета создается пустой ACL.
-
Подробнее о команде
yc storage bucket create
см. в Справочнике YC CLI. -
Если у вас еще нет интерфейса командной строки AWS CLI, установите и сконфигурируйте его.
Чтобы создать бакет, назначьте сервисному аккаунту, через который работает AWS CLI, роль
storage.editor
.В терминале выполните команду:
aws s3api create-bucket \ --endpoint-url=https://storage.yandexcloud.net \ --bucket <имя_бакета>
Где:
--endpoint-url
— эндпоинт Object Storage.--bucket
— имя бакета.
Примечание
По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage. Подробнее см. Правила именования бакетов.
Результат:
{ "Location": "/<имя_бакета>" }
Будет создан бакет со следующими параметрами:
- без ограничения максимального размера;
- с ограниченным доступом на чтение объектов, к списку объектов и на чтение настроек;
- с классом хранилища
Стандартное
.
Опциональные параметры
Вы можете применить к бакету предопределенный ACL или настроить разрешения для отдельных пользователей, сервисных аккаунтов, групп пользователей и публичных групп (группа всех пользователей интернета, группа всех аутентифицированных пользователей Yandex Cloud). Эти настройки несовместимы: у бакета должен быть либо предопределенный ACL, либо набор отдельных разрешений.
Примечание
Предопределенный ACL
aws s3api create-bucket \ --endpoint-url=https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --acl <предопределенный_ACL>
Где
--acl
— предопределенный ACL. Список значений см. в разделе Предопределенные ACL.Отдельные разрешения
aws s3api create-bucket \ --endpoint-url=https://storage.yandexcloud.net \ --bucket <имя_бакета> \ <тип_разрешения> <получатель_разрешения>
Где:
-
Возможные типы разрешений ACL:
--grant-read
— доступ к списку объектов в бакете, чтению различных настроек бакета (жизненный цикл, CORS, статический хостинг), чтению всех объектов в бакете.--grant-write
— доступ к записи, перезаписи и удалению объектов в бакете. Используется только совместно с--grant-read
.--grant-full-control
— полный доступ к бакету и объектам в нем.
Вы можете задать несколько разрешений в одной команде.
-
Возможные получатели разрешений:
id=<идентификатор_получателя>
— идентификатор пользователя, сервисного аккаунта или группы пользователей, которым нужно дать разрешение.uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers
— публичная группа всех аутентифицированных пользователей Yandex Cloud.uri=http://acs.amazonaws.com/groups/global/AllUsers
— публичная группа всех пользователей интернета.
По умолчанию для каждого нового бакета создается пустой ACL.
Подробнее о команде
aws s3api create-bucket
см. в документации AWS .Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например
storage.admin
, на каталог, в котором будут создаваться ресурсы.Terraform
позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.Terraform распространяется под лицензией Business Source License
, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0 .Подробную информацию о ресурсах провайдера смотрите в документации на сайте 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-admin" { folder_id = "<идентификатор_каталога>" role = "storage.admin" 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 = "<имя_бакета>" max_size = <максимальный_размер_бакета> default_storage_class = "<класс_хранилища>" anonymous_access_flags { read = <true|false> list = <true|false> config_read = <true|false> } tags = { <ключ_1> = "<значение_1>" <ключ_2> = "<значение_2>" ... <ключ_n> = "<значение_n>" } }
Где:
-
yandex_iam_service_account
— описание сервисного аккаунта, который создаст бакет и будет работать с ним:-
name
— имя сервисного аккаунта. -
bucket
— имя бакета.По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
-
max_size
— максимальный размер бакета в байтах. -
default_storage_class
— класс хранилища. Доступные значения:standard
— стандартное хранилище.cold
— холодное хранилище.ice
— ледяное хранилище.
Более
холодные
классы предназначены для длительного хранения объектов, работать с которыми планируется реже. Чемхолоднее
хранилище, тем дешевле хранить в нем данные, но тем дороже их читать и записывать. -
anonymous_access_flags
— настройки доступа:read
— публичный доступ на чтение объектов в бакете.list
— публичный доступ на просмотр списка объектов в бакете.config_read
— публичный доступ на чтение настроек в бакете.
-
tags
— метки бакета в форматеключ = "значение"
.
-
name
— обязательный параметр. Остальные параметры необязательны. По умолчанию значение параметраmax-size
—0
, публичный доступ к бакету выключен, класс хранилища —standard
.Более подробную информацию о параметрах ресурса
yandex_storage_bucket
в Terraform, см. в документации провайдера . -
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
Terraform создаст все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.Чтобы создать бакет, воспользуйтесь методом 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 взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например
storage.admin
, на каталог, в котором будут создаваться ресурсы.Terraform
позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.Terraform распространяется под лицензией Business Source License
, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0 .Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
или в зеркале .Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы включить механизм логирования в бакете, который вы хотите отслеживать:
-
Откройте файл конфигурации 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/
.
- В консоли управления
Если вы захотите удалить целевой бакет, сначала выключите механизм логирования или выберите другой целевой бакет для хранения логов. Удалить можно только пустой бакет.
Получите настройки логирования
Чтобы получить имя целевого бакета и префикс ключа объекта с логами, выполните следующее действие:
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в исходный бакет. - На панели слева выберите
Настройки. - Выберите вкладку Логирование
- В списке Бакет для хранения логов содержится имя целевого бакета.
- В поле Префикс содержится префикс, с которым сохраняются логи.
Чтобы получить настройки логирования с помощью 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" />