[Документация Yandex Cloud](../../index.md) > [Yandex Serverless Containers](../index.md) > [Пошаговые инструкции](index.md) > Управление контейнером > Передать секреты Yandex Lockbox

# Передать секреты Yandex Lockbox в контейнер

{% note info %}

Эта функциональность находится на стадии [Preview](../../overview/concepts/launch-stages.md).

{% endnote %}

[Yandex Lockbox](../../lockbox/index.md) — сервис для хранения секретов. Передать секрет Yandex Lockbox в контейнер можно в [переменной окружения](../concepts/runtime.md#environment-variables).

Чтобы контейнер получил доступ к [секрету](../../lockbox/concepts/secret.md), в настройках контейнера нужно указать [сервисный аккаунт](../../iam/concepts/users/service-accounts.md), у которого есть роли:
* `lockbox.payloadViewer` на секрет ([как назначить права доступа к секрету](../../lockbox/operations/secret-access.md));
* `kms.keys.encrypterDecrypter` на ключ шифрования, если секрет создан с использованием ключа Yandex Key Management Service ([как назначить права доступа к ключу шифрования](../../kms/operations/key-access.md)).

Секрет Lockbox, который передается в контейнер, кешируется в Serverless Containers. После того как сервисный аккаунт потеряет доступ к секрету, контейнер может хранить его до 5 минут.

При передаче секретов Yandex Lockbox создается новая ревизия контейнера. В существующую ревизию секреты передать нельзя.

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. В [консоли управления](https://console.yandex.cloud) перейдите в каталог, в котором находится контейнер.
    1. Перейдите в сервис **Serverless Containers**.
    1. Выберите контейнер, в который хотите передать секрет.
    1. Перейдите на вкладку **Редактор**.
    1. В открывшемся окне, в блоке **Параметры образа**, в поле **Секреты Lockbox**, укажите:
        * имя переменной окружения, в которой будет храниться секрет;
        * идентификатор секрета;
        * идентификатор версии секрета;
        * ключ одной из пар ключ-значение в версии секрета.
    1. Нажмите **Добавить**.

        В контейнер можно передать несколько секретов. Для этого еще раз нажмите **Добавить**.

    1. Нажмите кнопку **Создать ревизию**. Будет создана новая ревизия контейнера с указанными секретами.
    
- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы передать секреты Yandex Lockbox в контейнер, выполните команду:

    {% note warning %}

    Если в прошлую ревизию уже были переданы секреты, они перезапишутся.

    {% endnote %}

    ```bash
    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 {#tf}

    Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
    
    
    Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../terraform/authentication.md) соответствующим способом.

    1. Откройте файл конфигурации Terraform и добавьте к описанию функции блок `secrets`:

        ```hcl
        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/resources/serverless_container.md).
 
    1. Примените изменения:

        1. В терминале перейдите в директорию с конфигурационным файлом.
        1. Проверьте корректность конфигурации с помощью команды:
        
           ```bash
           terraform validate
           ```
        
           Если конфигурация является корректной, появится сообщение:
        
           ```bash
           Success! The configuration is valid.
           ```
        
        1. Выполните команду:
        
           ```bash
           terraform plan
           ```
        
           В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
        1. Примените изменения конфигурации:
        
           ```bash
           terraform apply
           ```
        
        1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

    Проверить изменение функции и ее настройки можно в [консоли управления](https://console.yandex.cloud).

- API {#api}

  Чтобы передать секрет Yandex Lockbox в контейнер, воспользуйтесь методом REST API [deployRevision](../containers/api-ref/Container/deployRevision.md) для ресурса [Container](../containers/api-ref/Container/index.md) или вызовом gRPC API [ContainerService/DeployRevision](../containers/api-ref/grpc/Container/deployRevision.md).

{% endlist %}