Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
    • Создание L7-балансировщика с профилем безопасности
    • Настройка алертов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте бакет
  • Создайте ключ
  • Включите шифрование
  • Отключите шифрование
  1. Безопасность
  2. Шифрование для бакета Object Storage на стороне сервера

Шифрование для бакета Object Storage на стороне сервера

Статья создана
Yandex Cloud
Обновлена 1 апреля 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте бакет
  • Создайте ключ
  • Включите шифрование
  • Отключите шифрование

В этом сценарии вы включите шифрование для бакета. В качестве ключа симметричного шифрования будет использоваться ключ Yandex Key Management Service. Все новые объекты в бакете будут шифроваться указанным ключом по схеме envelope encryption.

Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer должны быть следующие роли на ключ шифрования:

  • kms.keys.encrypter — для чтения ключа, шифрования и загрузки объектов;
  • kms.keys.decrypter — для чтения ключа, расшифровки и скачивания объектов;
  • kms.keys.encrypterDecrypter — включает разрешения, предоставляемые ролями kms.keys.encrypter и kms.keys.decrypter.

Подробнее см. Сервисные роли Key Management Service.

Чтобы включить шифрование бакета на стороне сервера:

  1. Подготовьте облако к работе.
  2. Создайте бакет.
  3. Создайте ключ.
  4. Включите шифрование.

Если шифровать новые объекты в бакете больше не требуется, отключите шифрование.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки бакета с шифрованием входит:

  • плата за хранение данных в бакете (см. тарифы Object Storage);
  • плата за операции с данными (см. тарифы Object Storage);
  • плата за использование ключей KMS (см. тарифы Key Management Service).

Создайте бакетСоздайте бакет

Вы можете создать новый бакет или использовать существующий. Чтобы создать бакет, выполните:

Консоль управления
AWS CLI
Terraform
  1. В консоли управления выберите каталог, в котором хотите создать бакет.

  2. В списке сервисов выберите Object Storage.

  3. Нажмите кнопку Создать бакет.

  4. В поле Имя укажите имя бакета.

    Имя должно удовлетворять требованиям:

    • Длина имени должна быть от 3 до 63 символов.
    • Имя может содержать строчные буквы латинского алфавита, цифры, дефисы и точки.
    • Первый и последний символы должны быть буквами или цифрами.
    • Символы справа и слева от точки должны быть буквами или цифрами.
    • Имя не должно иметь вид IP-адреса (например 10.1.3.9).
  5. Укажите максимальный размер бакета в ГБ.

  6. В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите Ограниченный.

  7. Нажмите кнопку Создать бакет.

  1. Если у вас еще нет AWS CLI, установите и сконфигурируйте его.

  2. Выполните команду:

    aws s3 mb s3://<имя_бакета> --endpoint-url=https://storage.yandexcloud.net
    

    Результат:

    make_bucket: <имя_бакета>
    

Примечание

Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin, на каталог, в котором будут создаваться ресурсы.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  1. Опишите ресурсы в конфигурационном файле. Чтобы задать параметры, в данном сценарии используется блок locals:

    locals {
      cloud_id    = "<идентификатор_облака>"
      folder_id   = "<идентификатор_каталога>"
      oauth       = "<OAuth>"
      zone        = "ru-central1-a"
    
      sa_name     = "new-buckets-account"
      sa_desc     = "Аккаунт для управления бакетами Object Storage"
      sa_key_desc = "Статический ключ для ${local.sa_name}"
    
      bucket_name = "Имя бакета" # Имя создаваемого бакета. Если не задавать имя бакета для ресурса `yandex_storage_bucket`, имя будет сгенерировано автоматически.
    }
    
    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
    }
    
    provider "yandex" {
      token     = local.oauth
      cloud_id  = local.cloud_id
      folder_id = local.folder_id
      zone      = local.zone
    }
    
    resource "yandex_iam_service_account" "buckets-account" {
      name        = local.sa_name
      description = local.sa_desc
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "buckets-account-role" {
      folder_id = local.folder_id
      role      = "editor"
      member    = "serviceAccount:${yandex_iam_service_account.buckets-account.id}"
    }
    
    resource "yandex_iam_service_account_static_access_key" "buckets-account-key" {
      service_account_id = "${yandex_iam_service_account.buckets-account.id}"
      description        = local.sa_key_desc
    }
    
    resource "yandex_storage_bucket" "test" {
      bucket     = local.bucket_name
      access_key = "${yandex_iam_service_account_static_access_key.buckets-account-key.access_key}"
      secret_key = "${yandex_iam_service_account_static_access_key.buckets-account-key.secret_key}"
    }
    

    Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

    terraform plan
    

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов.

      После выполнения команды Terraform обновит или создаст в указанном каталоге следующие ресурсы:

      • Сервисный аккаунт new-buckets-account.
      • Роль editor для сервисного аккаунта new-buckets-account.
      • Статический ключ для сервисного аккаунта.
      • Бакет.

      Проверить появление ресурсов можно в консоли управления.

Создайте ключСоздайте ключ

Создайте новый ключ или используйте существующий. Чтобы создать новый ключ:

Консоль управления
Yandex Cloud CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором хотите создать ключ.

  2. В списке сервисов выберите Key Management Service.

  3. Нажмите кнопку Создать ключ.

  4. В открывшемся окне:

    • В поле Имя укажите bucket-key.
    • В поле Алгоритм шифрования выберите AES-256.
    • В поле Период ротации, дни выберите период ротации 7 дней.
    • Нажмите кнопку Создать.

Вместе с ключом создается его первая версия: нажмите на ключ в списке, чтобы открыть страницу с его атрибутами.

Выполните команду:

yc kms symmetric-key create \
  --name bucket-key \
  --default-algorithm aes-256 \
  --rotation-period 168h

Где:

  • --name — имя ключа.

  • --default-algorithm — алгоритм шифрования: aes-128, aes-192 или aes-256.

  • --rotation-period — период ротации ключа. Значение задается в часах, минутах и секундах и не может быть менее 24 часов. Например: --rotation-period 27h14m27s.

    Чтобы создать ключ без автоматической ротации, не указывайте параметр --rotation-period.

Вместе с ключом создается его первая версия. Она указана в поле primary_version.

  1. Опишите ресурсы в конфигурационном файле. Чтобы задать параметры, в данном сценарии используется блок locals:

    locals {
      cloud_id    = "<идентификатор_облака>"
      folder_id   = "<идентификатор_каталога>"
      oauth       = "<OAuth>"
      zone        = "ru-central1-a"
    
      sa_name     = "new-buckets-account"
      sa_desc     = "Аккаунт для управления бакетами Object Storage"
      sa_key_desc = "Статический ключ для ${local.sa_name}"
    
      key_name    = "bucket-key" # Имя ключа KMS.
      key_desc    = "Ключ для шифрования бакетов"
    
      bucket_name = "Имя бакета"
    }
    
    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
    }
    
    provider "yandex" {
      token     = local.oauth
      cloud_id  = local.cloud_id
      folder_id = local.folder_id
      zone      = local.zone
    }
    
    resource "yandex_iam_service_account" "buckets-account" {
      name        = local.sa_name
      description = local.sa_desc
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "buckets-account-role" {
      folder_id = local.folder_id
      role      = "editor"
      member    = "serviceAccount:${yandex_iam_service_account.buckets-account.id}"
    }
    
    resource "yandex_iam_service_account_static_access_key" "buckets-account-key" {
      service_account_id = "${yandex_iam_service_account.buckets-account.id}"
      description        = local.sa_key_desc
    }
    
    resource "yandex_kms_symmetric_key" "key-a" {
      name              = local.key_name
      description       = local.key_desc
      default_algorithm = "AES_256"
      rotation_period   = "168h"
    }
    
    resource "yandex_storage_bucket" "test" {
      bucket     = local.bucket_name
      access_key = "${yandex_iam_service_account_static_access_key.buckets-account-key.access_key}"
      secret_key = "${yandex_iam_service_account_static_access_key.buckets-account-key.secret_key}"
    }
    
  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

      Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов.

      После выполнения команды Terraform обновит или создаст в указанном каталоге следующие ресурсы:

      • Сервисный аккаунт new-buckets-account.
      • Роль editor для сервисного аккаунта new-buckets-account.
      • Статический ключ для сервисного аккаунта.
      • Ключ KMS с названием bucket-key.
      • Бакет.

      Проверить появление ресурсов можно в консоли управления.

Воспользуйтесь методом create для ресурса SymmetricKey.

Включите шифрованиеВключите шифрование

Чтобы включить шифрование бакета ключом KMS, выполните следующее:

Консоль управления
AWS CLI
Terraform
  1. В консоли управления выберите каталог, в котором находится бакет.
  2. В списке сервисов выберите Object Storage.
  3. Выберите бакет, созданный ранее.
  4. На панели слева выберите Безопасность.
  5. Откройте вкладку Шифрование.
  6. В поле Ключ KMS выберите ключ bucket-key.
  7. Нажмите кнопку Сохранить.

Выполните команду:

aws s3api put-bucket-encryption \
  --bucket <имя_бакета> \
  --endpoint-url=https://storage.yandexcloud.net \
  --server-side-encryption-configuration '{
  "Rules": [
    {
    "ApplyServerSideEncryptionByDefault": {
      "SSEAlgorithm": "aws:kms",
      "KMSMasterKeyID": "<идентификатор_ключа_KMS>"
    },
    "BucketKeyEnabled": true
  }
  ]
}'
  1. Опишите ресурсы в конфигурационном файле. Чтобы задать параметры, в данном сценарии используется блок locals:

    locals {
      cloud_id    = "<идентификатор_облака>"
      folder_id   = "<идентификатор_каталога>"
      oauth       = "<OAuth>"
      zone        = "ru-central1-a"
    
      sa_name     = "new-buckets-account"
      sa_desc     = "Аккаунт для управления бакетами Object Storage"
      sa_key_desc = "Статический ключ для ${local.sa_name}"
    
      key_name    = "bucket-key" # Имя ключа KMS.
      key_desc    = "Ключ для шифрования бакетов"
    
      bucket_name = "Имя бакета" # Имя бакета.
    }
    
    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
    }
    
    provider "yandex" {
      token     = local.oauth
      cloud_id  = local.cloud_id
      folder_id = local.folder_id
      zone      = local.zone
    }
    
    resource "yandex_iam_service_account" "buckets-account" {
      name        = local.sa_name
      description = local.sa_desc
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "buckets-account-role" {
      folder_id = local.folder_id
      role      = "editor"
      member    = "serviceAccount:${yandex_iam_service_account.buckets-account.id}"
    }
    
    resource "yandex_iam_service_account_static_access_key" "buckets-account-key" {
      service_account_id = "${yandex_iam_service_account.buckets-account.id}"
      description        = local.sa_key_desc
    }
    
    resource "yandex_kms_symmetric_key" "key-a" {
      name              = local.key_name
      description       = local.key_desc
      default_algorithm = "AES_256"
      rotation_period   = "168h"
    }
    
    resource "yandex_storage_bucket" "test" {
      bucket     = local.bucket_name
      access_key = "${yandex_iam_service_account_static_access_key.buckets-account-key.access_key}"
      secret_key = "${yandex_iam_service_account_static_access_key.buckets-account-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"
        }
      }
      }
    }
    
  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

      Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов.

      После выполнения команды Terraform обновит или создаст в указанном каталоге следующие ресурсы:

      • Сервисный аккаунт new-buckets-account.
      • Роль editor для сервисного аккаунта new-buckets-account.
      • Статический ключ для сервисного аккаунта.
      • Ключ KMS с названием bucket-key.
      • Бакет с шифрованием.

      Проверить появление ресурсов можно в консоли управления.

В результате все новые объекты в бакете будут шифроваться ключом bucket-key.

Отключите шифрованиеОтключите шифрование

Если шифровать новые объекты в бакете больше не требуется, отключите шифрование.

Внимание

После отключения шифрования уже загруженные объекты будут храниться зашифрованными. Данные в Object Storage шифруются по схеме envelope encryption. Удаление ключа равносильно уничтожению зашифрованных им данных.

Консоль управления
AWS CLI
Terraform
  1. В консоли управления выберите каталог, в котором находится бакет.
  2. В списке сервисов выберите Object Storage.
  3. Выберите бакет, созданный ранее.
  4. На панели слева выберите Безопасность.
  5. Откройте вкладку Шифрование.
  6. В поле Ключ KMS выберите Не выбрано.
  7. Нажмите кнопку Сохранить.

Выполните команду:

aws s3api delete-bucket-encryption \
  --bucket <имя_бакета> \
  --endpoint-url=https://storage.yandexcloud.net
  1. Опишите ресурсы в конфигурационном файле. Чтобы отключить шифрование, удалите или закомментируйте блок server_side_encryption_configuration для ресурса yandex_storage_bucket:

    locals {
      cloud_id    = "<идентификатор_облака>"
      folder_id   = "<идентификатор_каталога>"
      oauth       = "<OAuth>"
      zone        = "ru-central1-a"
    
      sa_name     = "new-buckets-account"
      sa_desc     = "Аккаунт для управления бакетами Object Storage"
      sa_key_desc = "Статический ключ для ${local.sa_name}"
    
      key_name    = "bucket-key"
      key_desc    = "Ключ для шифрования бакетов"
    
      bucket_name = "Имя бакета"
    }
    
    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
    }
    
    provider "yandex" {
      token     = local.oauth
      cloud_id  = local.cloud_id
      folder_id = local.folder_id
      zone      = local.zone
    }
    
    resource "yandex_iam_service_account" "buckets-account" {
      name        = local.sa_name
      description = local.sa_desc
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "buckets-account-role" {
      folder_id = local.folder_id
      role      = "editor"
      member    = "serviceAccount:${yandex_iam_service_account.buckets-account.id}"
    }
    
    resource "yandex_iam_service_account_static_access_key" "buckets-account-key" {
      service_account_id = "${yandex_iam_service_account.buckets-account.id}"
      description        = local.sa_key_desc
    }
    
    resource "yandex_kms_symmetric_key" "key-a" {
      name              = local.key_name
      description       = local.key_desc
      default_algorithm = "AES_256"
      rotation_period   = "168h"
    }
    
    resource "yandex_storage_bucket" "test" {
      bucket     = local.bucket_name
      access_key = "${yandex_iam_service_account_static_access_key.buckets-account-key.access_key}"
      secret_key = "${yandex_iam_service_account_static_access_key.buckets-account-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"
          }
        }
        }
      */
    }
    
  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

      Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите обновление ресурсов.

      После выполнения команды Terraform обновит в указанном каталоге следующие ресурсы:

      • Сервисный аккаунт new-buckets-account.
      • Роль editor для сервисного аккаунта new-buckets-account.
      • Статический ключ для сервисного аккаунта.
      • Ключ KMS с названием bucket-key.
      • Бакет.

В результате в указанном каталоге шифрование для бакета будет отключено. Проверить изменение ресурсов и их настройки можно в консоли управления.

Была ли статья полезна?

Предыдущая
Шифрование с помощью Google Tink
Следующая
Шифрование секретов в HashiCorp Terraform
Проект Яндекса
© 2025 ООО «Яндекс.Облако»