Использование секрета Yandex Lockbox для хранения статического ключа доступа с помощью Terraform
Чтобы использовать статический ключ доступа, сохраненный в секрете Yandex Lockbox, с помощью Terraform:
- Подготовьте окружение.
- Создайте инфраструктуру.
- Используйте ключ из секрета Yandex Lockbox для работы с сервисом.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за хранение одной версии секрета Yandex Lockbox (см. тарифы Yandex Lockbox);
- плата за хранение данных в Object Storage, операции с ними и исходящий трафик (плата не будет взиматься, если в бакете не будут храниться данные, см. тарифы Object Storage).
Подготовьте окружение
Установите
Настраивать утилиту на этом этапе не обязательно. Необходимые параметры, такие как идентификаторы и ключи доступа, будут описаны и использованы в командах и переменных окружения далее в этом руководстве.
Создайте инфраструктуру
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Для создания инфраструктуры c помощью Terraform:
-
Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файл с описанием инфраструктуры:
Готовая конфигурацияВручную-
Клонируйте репозиторий с конфигурационными файлами.
git clone https://github.com/yandex-cloud-examples/yc-static-keys-in-lockbox
-
Перейдите в директорию с репозиторием. В ней должен появиться файл
static-key-in-lockbox-config.tf
— конфигурация создаваемой инфраструктуры.
-
Создайте папку для конфигурационных файлов.
-
Создайте в папке конфигурационный файл
static-key-in-lockbox-config.tf
:static-key-in-lockbox-config.tf
# Объявление пользовательских переменных locals { zone = "<зона_доступности>" folder_id = "<идентификатор_каталога>" } terraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = ">= 0.47.0" } } } # Настройка провайдера provider "yandex" { zone = local.zone } # Создание сервисного аккаунта и назначение ролей resource "yandex_iam_service_account" "sa" { folder_id = local.folder_id name = "storage-bucket-sa" } resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = local.folder_id role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } resource "yandex_resourcemanager_folder_iam_member" "lockboxview" { folder_id = local.folder_id role = "lockbox.payloadViewer" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } # Создание секрета resource "yandex_lockbox_secret" "my_secret" { name = "static-key" folder_id = local.folder_id deletion_protection = true } # Создание статического ключа доступа 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" output_to_lockbox { secret_id = yandex_lockbox_secret.my_secret.id entry_for_access_key = "key_id" entry_for_secret_key = "key" } } # Источник данных версии секрета data "yandex_lockbox_secret_version" "my_secret_version" { secret_id = yandex_lockbox_secret.my_secret.id version_id = yandex_iam_service_account_static_access_key.sa-static-key.output_to_lockbox_version_id depends_on = [ yandex_lockbox_secret.my_secret ] } # Выходные переменные output "key_id" { value = data.yandex_lockbox_secret_version.my_secret_version.entries[1].text_value } output "key" { value = data.yandex_lockbox_secret_version.my_secret_version.entries[0].text_value }
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
-
-
В файле
static-key-in-lockbox-config.tf
задайте пользовательские параметры:zone_id
— зона доступности.folder_id
— идентификатор каталога.
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
После создания инфраструктуры, используйте ключ из секрета для работы с сервисом.
Используйте ключ из секрета Yandex Lockbox для работы с сервисом
Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.
Используйте ключ из секрета Yandex Lockbox и создайте бакет в Object Storage:
-
Сохраните идентификатор ключа, секретный ключ и значение региона размещения в переменные окружения AWS CLI:
AWS_ACCESS_KEY_ID=$(terraform output key_id) AWS_SECRET_ACCESS_KEY=$(terraform output key) AWS_DEFAULT_REGION="ru-central1"
AWS CLI будет использовать созданные переменные окружения для аутентификации при выполнении операций с ресурсами сервиса.
-
Создайте бакет в Object Storage, указав в команде уникальное имя бакета:
AWS CLIaws --endpoint-url=https://storage.yandexcloud.net \ s3 mb s3://<имя_бакета>
Результат:
make_bucket: my-first-bucket
В результате будет создан новый бакет в Object Storage. При создании бакета используется статический ключ доступа, полученный из секрета Yandex Lockbox и сохраненный в переменные окружения.
Вы также передать значения идентификатора ключа, секретного ключа и региона размещения непосредственно в каждой команде AWS CLI:
AWS CLIAWS_ACCESS_KEY_ID=$(terraform output key_id) \ AWS_SECRET_ACCESS_KEY=$(terraform output key) \ AWS_DEFAULT_REGION="ru-central1" \ aws --endpoint-url=https://storage.yandexcloud.net \ s3 mb s3://<имя_бакета>
Результат:
make_bucket: my-first-bucket
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
-
Удалите бакет.
-
Откройте конфигурационный файл
static-key-in-lockbox-config.tf
и удалите описание создаваемой инфраструктуры из файла. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-