Передать секрет в Yandex Cloud Functions
Примечание
Эта функциональность находится на стадии Preview.
Чтобы функция получила доступ к секрету, в ее параметрах нужно указать сервисный аккаунт, у которого есть роли:
lockbox.payloadViewer
на секрет (как назначить права доступа к секрету).kms.keys.encrypterDecrypter
на ключ шифрования, если секрет создан с использованием ключа Yandex Key Management Service (как назначить права доступа к ключу шифрования).
Секрет Yandex Lockbox, который передается в функцию, кешируется в Yandex Cloud Functions. После того как сервисный аккаунт потеряет доступ к секрету, функция может хранить его до 5 минут.
При передаче секретов создается новая версия функции. В существующую версию секреты передать нельзя.
-
В консоли управления
перейдите в каталог, в котором находится функция. -
Откройте сервис Cloud Functions.
-
Выберите функцию, в которую хотите передать секрет Yandex Lockbox.
-
Перейдите на вкладку Редактор.
-
В блоке Параметры укажите:
- В поле Сервисный аккаунт — сервисный аккаунт, у которого есть роль
lockbox.payloadViewer
. - В поле Секреты Lockbox:
- Имя переменной окружения, в которой будет храниться секрет.
- Идентификатор секрета.
- Идентификатор версии секрета.
- Ключ одной из пар ключ-значение в версии секрета.
- В поле Сервисный аккаунт — сервисный аккаунт, у которого есть роль
-
Нажмите Добавить.
В функцию можно передать несколько секретов. Для этого еще раз нажмите Добавить.
-
Нажмите кнопку Сохранить изменения. Будет создана новая версия функции с указанными секретами.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы передать секрет Yandex Lockbox в функцию, выполните команду:
Важно
Если в прошлую версию функции уже были переданы секреты, они перезапишутся.
yc serverless function version create \
--function-name=test \
--runtime nodejs16 \
--entrypoint index.main \
--memory 128m \
--execution-timeout 5s \
--source-version-id vfdsdeqa1s2d3******** \
--service-account-id bfbtfcp0o9i8******** \
--secret environment-variable=KEY,id=fc3q4aq3w5e6********,version-id=fc3gvvz4x5c6********,key=secret-key
Где:
-
--function-name
— имя функции. -
--runtime
— среда выполнения. -
--entrypoint
— точка входа, указывается в формате<имя_файла_с_функцией>
.<имя_обработчика>
. -
--memory
— объем RAM. -
--execution-timeout
— максимальное время выполнения функции до таймаута. -
--source-version-id
— идентификатор версии функции, код которой вы хотите скопировать. -
--service-account-id
— идентификатор сервисного аккаунта, у которого есть рольlockbox.payloadViewer
. -
--secret
:environment-variable
— имя переменной окружения, в которой будет храниться секрет.id
— идентификатор секрета.version-id
— идентификатор версии секрета.key
— ключ одной из пар ключ-значение в версии секрета.
В функцию можно передать несколько секретов. Для этого укажите параметр
--secret
необходимое количество раз.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Откройте файл конфигурации Terraform и добавьте к описанию функции блок
secrets
:resource "yandex_function" "test-function" { name = "test-function" description = "Test function" user_hash = "first-function" runtime = "python37" entrypoint = "main" memory = "128" execution_timeout = "10" service_account_id = "<идентификатор_сервисного_аккаунта>" tags = ["my_tag"] secrets { id = "<идентификатор_секрета>" version_id = "<идентификатор_версии_секрета>" key = "<ключ_секрета_1>" environment_variable = "<имя_переменной_окружения_1>" } secrets { id = "<идентификатор_секрета>" version_id = "<идентификатор_версии_секрета>" key = "<ключ_секрета_2>" environment_variable = "<имя_переменной_окружения_2>" } content { zip_filename = "<путь_к_ZIP-архиву>" } }
Где:
secrets
— блок с настройками секрета. Содержит параметры:id
— идентификатор секрета. Обязательный параметр.version_id
— идентификатор версии секрета. Обязательный параметр.key
— ключ одной из пар ключ-значение в версии секрета, который будет храниться в переменной окружения. Обязательный параметр.environment_variable
— имя переменной окружения, в которой будет храниться секрет. Обязательный параметр.
Более подробную информацию о параметрах ресурса
yandex_function
см. в документации провайдера . -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
Проверить изменение функции и ее настройки можно в консоли управления
Чтобы передать секрет Yandex Lockbox в функцию, воспользуйтесь методом REST API createVersion для ресурса Function или вызовом gRPC API FunctionsService/CreateVersion.