Шифрование бакета
В Object Storage есть возможность шифровать объекты в бакете с помощью ключей KMS:
- Добавьте шифрование бакету, чтобы все новые объекты шифровались указанным ключом.
- Указывайте ключ шифрования при загрузке объекта через API.
Внимание
Данные в Object Storage шифруются по схеме envelope encryption. Удаление ключа равносильно уничтожению зашифрованных им данных.
Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer
должны быть следующие роли на ключ шифрования:
kms.keys.encrypter
— для чтения ключа, шифрования и загрузки объектов;kms.keys.decrypter
— для чтения ключа, расшифровки и скачивания объектов;kms.keys.encrypterDecrypter
— включает разрешения, предоставляемые ролямиkms.keys.encrypter
иkms.keys.decrypter
.
Подробнее см. Сервисные роли Key Management Service.
Добавить шифрование бакету
Чтобы добавить ключ KMS:
-
В консоли управления
перейдите в бакет, для которого хотите настроить шифрование. -
В левой панели выберите Шифрование.
-
В поле Ключ KMS выберите ключ или создайте новый:
- Если в каталоге еще нет ключей, нажмите кнопку Создать ключ. Если ключи есть, но они вам не подходят, нажмите кнопку Создать новый.
- Введите имя ключа.
- Выберите алгоритм шифрования и период ротации.
- Нажмите Создать.
-
Нажмите кнопку Сохранить.
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Перед началом работы получите IAM-токен для сервисного аккаунта и запишите его в файл.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
provider "yandex" { cloud_id = "<идентификатор_облака>" folder_id = "<идентификатор_каталога>" zone = "ru-central1-a" service_account_key_file = "key.json" } 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_kms_symmetric_key" "key-a" { name = "<имя_ключа>" description = "<описание_ключа>" default_algorithm = "AES_128" rotation_period = "8760h" // 1 год } resource "yandex_storage_bucket" "test" { bucket = "<имя_бакета>" 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 server_side_encryption_configuration { rule { apply_server_side_encryption_by_default { kms_master_key_id = yandex_kms_symmetric_key.key-a.id sse_algorithm = "aws:kms" } } } }
Где:
service_account_key_file
— путь к файлу, содержащему IAM-токен для сервисного аккаунта (или содержимое файла).default_algorithm
— алгоритм шифрования, который будет использоваться с новой версией ключа. Новая версия генерируется при следующей ротации ключа. Значение по умолчаниюAES_128
.rotation_period
— период ротации. Чтобы отключить автоматическую ротацию, не указывайте этот параметр.apply_server_side_encryption_by_default
— параметры шифрования по умолчанию на стороне сервера:kms_master_key_id
— идентификатор мастер ключа KMS, используемый для шифрования.sse_algorithm
— используемый алгоритм шифрования на стороне сервера. Поддерживается только значениеaws:kms
.
-
Проверьте корректность конфигурационных файлов.
- В командной строке перейдите в папку, где вы создали конфигурационный файл.
- Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Разверните облачные ресурсы.
- Если в конфигурации нет ошибок, выполните команду:
terraform apply
- Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.
Убрать шифрование бакета
Чтобы убрать шифрование, удалите ключ KMS:
- В консоли управления
перейдите в бакет, для которого хотите удалить шифрование. - В левой панели выберите Шифрование.
- В поле Ключ KMS выберите Не выбрано.
- Нажмите кнопку Сохранить.
Terraform
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы убрать шифрование бакета, созданного с помощью Terraform:
-
Откройте файл конфигурации Terraform и удалите блок
server_side_encryption_configuration
в описании бакета.Пример описания бакета в конфигурации Terraform... resource "yandex_storage_bucket" "test" { bucket = "my-bucket" access_key = "123JE02jKxusn********" secret_key = "ExamP1eSecReTKeykdo********" server_side_encryption_configuration { // Этот блок нужно удалить, чтобы отключить шифрование rule { apply_server_side_encryption_by_default { kms_master_key_id = "abjbeb2bgg4l********" sse_algorithm = "aws:kms" } } } } ...
-
В командной строке перейдите в папку, где расположен файл конфигурации Terraform.
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.Проверить изменения можно в консоли управления
.