Передать секреты Yandex Lockbox в контейнер
Примечание
Эта функциональность находится на стадии Preview.
Yandex Lockbox — сервис для хранения секретов. Передать секрет Yandex Lockbox в контейнер можно в переменной окружения.
Чтобы контейнер получил доступ к секрету, в настройках контейнера нужно указать сервисный аккаунт, у которого есть роли:
lockbox.payloadViewer
на секрет (как назначить права доступа к секрету);kms.keys.encrypterDecrypter
на ключ шифрования, если секрет создан с использованием ключа Yandex Key Management Service (как назначить права доступа к ключу шифрования).
Секрет Lockbox, который передается в контейнер, кешируется в Serverless Containers. После того как сервисный аккаунт потеряет доступ к секрету, контейнер может хранить его до 5 минут.
При передаче секретов Yandex Lockbox создается новая ревизия контейнера. В существующую ревизию секреты передать нельзя.
-
В консоли управления
перейдите в каталог, в котором находится контейнер. -
Откройте сервис Serverless Containers.
-
Выберите контейнер, в который хотите передать секрет.
-
Перейдите на вкладку Редактор.
-
В открывшемся окне, в блоке Параметры образа, в поле Секреты Lockbox, укажите:
- имя переменной окружения, в которой будет храниться секрет;
- идентификатор секрета;
- идентификатор версии секрета;
- ключ одной из пар ключ-значение в версии секрета.
-
Нажмите Добавить.
В контейнер можно передать несколько секретов. Для этого еще раз нажмите Добавить.
-
Нажмите кнопку Создать ревизию. Будет создана новая ревизия контейнера с указанными секретами.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы передать секреты Yandex Lockbox в контейнер, выполните команду:
Важно
Если в прошлую ревизию уже были переданы секреты, они перезапишутся.
yc serverless container revision deploy \
--container-name test \
--image cr.yandex/<идентификатор_реестра>/repository:tag \
--cores 1 \
--memory 1GB \
--service-account-id <идентификатор_сервисного_аккаунта> \
--secret environment-variable=<имя_переменной_окружения>,id=<идентификатор_секрета>,version-id=<идентификатор_версии_секрета>,key=<ключ_секрета>
Где:
-
--container-name
— имя контейнера. -
--image
— URL Docker-образа. -
--cores
— количество ядер, которые доступны контейнеру. -
--memory
— требуемая память. По умолчанию — 128 МБ. -
--service-account-id
— идентификатор сервисного аккаунта, у которого есть рольlockbox.payloadViewer
. -
--secret
:environment-variable
— имя переменной окружения, в которой будет храниться секрет;id
— идентификатор секрета;version-id
— идентификатор версии секрета;key
— ключ одной из пар ключ-значение в версии секрета.
В контейнер можно передать несколько секретов. Для этого укажите параметр
--secret
необходимое количество раз.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Откройте файл конфигурации Terraform и добавьте к описанию функции блок
secrets
:resource "yandex_serverless_container" "test-container" { name = "<имя_контейнера>" memory = <объем_памяти> service_account_id = "<идентификатор_сервисного_аккаунта>" secrets { id = "<идентификатор_секрета>" version_id = "идентификатор_версии_секрета>" key = "<ключ_секрета_1>" environment_variable = "<имя_переменной_окружения_1>" } secrets { id = "<идентификатор_секрета>" version_id = "<идентификатор_версии_секрета>" key = "<ключ_секрета_2>" environment_variable = "<имя_переменной_окружения_2>" } image { url = "<URL_Docker-образа>" } }
Где:
secrets
— блок с настройками секрета. Содержит параметры:id
— идентификатор секрета. Обязательный параметр.version_id
— идентификатор версии секрета. Обязательный параметр.key
— ключ одной из пар ключ-значение в версии секрета, который будет храниться в переменной окружения. Обязательный параметр.environment_variable
— имя переменной окружения, в которой будет храниться секрет. Обязательный параметр.
Более подробную информацию о параметрах ресурса
yandex_serverless_container
см. в документации провайдера . -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
Проверить изменение функции и ее настройки можно в консоли управления
Чтобы передать секрет Yandex Lockbox в контейнер, воспользуйтесь методом REST API deployRevision для ресурса Container или вызовом gRPC API ContainerService/DeployRevision.