[Документация Yandex Cloud](../../index.md) > [Yandex Lockbox](../index.md) > [Концепции](index.md) > Секрет

# Секреты в Yandex Lockbox

## Секрет {#secret}

Секрет состоит из набора версий, в которых хранятся данные, такие как ключи API, пароли или токены. Версия содержит наборы ключей и значений. Ключ — это несекретное название для значения, по которому вы будете его идентифицировать. Значение — это секретные данные.

К секретам можно настраивать доступ, используя сервис [Yandex Identity and Access Management](../../iam/index.md). Доступные роли для разных сценариев использования описаны в разделе [Управление доступом в Yandex Lockbox](../security/index.md).

Секрет может находиться в активном и деактивированном состояниях. В активном состоянии возможен доступ как к метаданным, так и к содержимому секрета (парам ключ-значение). В деактивированном состоянии возможен доступ только к метаданным, содержимое секрета недоступно.

## Тип секрета {#secret-type}

Yandex Lockbox позволяет создавать секреты двух типов: генерируемые и пользовательские.

* _Генерируемый секрет_ — последовательность случайных символов, которая формируется автоматически. Вы можете настроить параметры генерации, такие как длина и состав символов. Генерируемые секреты подходят для паролей, которые не требуется задавать вручную, а также паролей с частой ротацией. Например, для доступа к базам данных, аутентификации на уровне микросервисов, в системах CI/CD и для других программных взаимодействий.

    Также генерируемые секреты используются для хранения информации о подключениях к базам данных PostgreSQL, MySQL®, ClickHouse®, Redis, Valkey™, OpenSearch, MongoDB, Trino, Apache Kafka® и Yandex StoreDoc с помощью [Yandex Connection Manager](../../metadata-hub/concepts/connection-manager.md). При этом секрет создается в Yandex Connection Manager, а хранится в Yandex Lockbox.

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

    Если в качестве конфиденциального значения используется файл, то содержимое секрета возвращается в [кодировке Base64](https://ru.wikipedia.org/wiki/Base64). Вы можете декодировать файл с помощью модуля [base64 в Python](https://docs.python.org/3/library/base64.html) или других инструментов.

## Версия {#version}

В Yandex Lockbox секреты хранятся в виде версий. Каждая версия содержит метаданные и одну или больше пар ключ-значение, что позволяет отслеживать изменения и управлять жизненным циклом секрета.

Версию нельзя изменить после создания. Для любого изменения пар ключей-значений необходимо [создать новую версию](../operations/secret-version-manage.md#create-version). Помимо создания новой версии секрета, можно создать версию [на основе уже существующей](../operations/secret-version-manage.md#create-version-based-on-other) с новыми значениями.

Единовременно может быть активна только одна версия секрета. Вы можете управлять активной версией секрета, добавляя новые версии или [откатываясь к предыдущим](../operations/secret-version-manage.md#backup).

К версиям секрета можно настроить доступ дополнительно к доступу к самому секрету. Для этого нужно назначить роль `lockbox.admin` или `lockbox.payloadViewer`. Подробнее об управлении доступом читайте в разделе [Управление доступом Yandex Lockbox - Какие роли мне необходимы](../security/index.md#choosing-roles).

## Шифрование секретов с помощью Yandex Key Management Service {#encryption}

С помощью [Yandex Key Management Service](../../kms/index.md) можно создавать и управлять ключами шифрования, которые используются для защиты секретов в Yandex Lockbox.

Все секреты по умолчанию зашифрованы общим ключом. Однако, при [создании секрета](../operations/secret-create.md) можно указать собственный [ключ](../../kms/concepts/key.md) Yandex Key Management Service для шифрования секрета. Использование собственного ключа обладает следующими преимуществами:

* Снижаются риски при возможной компрометации общего ключа.
* Собственный ключ можно [ротировать](../../kms/operations/key.md#rotate) самостоятельно и управлять его версиями.
* При необходимости, собственный ключ можно удалить и таким образом гарантированно заблокировать доступ к зашифрованным данным.
* Можно получать аудитные логи событий, связанных с использованием ключа шифрования с помощью сервиса [Yandex Audit Trails](../../audit-trails/concepts/index.md).

Если при создании секрета вы указали свой ключ KMS, необходимо назначить на этот секрет роли [kms.keys.encrypterDecrypter](../../kms/security/index.md#service-roles) и [lockbox.payloadViewer](../security/index.md#roles-list). Они нужны для получения доступа к ключу, а также для шифрования и расшифровки.

{% note warning %}

Использование ключа Yandex Key Management Service при каждом обращении к зашифрованному им секрету тарифицируется как одна криптографическая операция. Цены за криптографические операции с ключом указаны в [правилах тарификации Yandex Key Management Service](../../kms/pricing.md).

{% endnote %}

## Смотрите также

* [Управление доступом в Yandex Lockbox](../security/index.md)
* [Правила тарификации для Yandex Lockbox](../pricing.md)

## Примеры использования {#examples}

* [Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox](../tutorials/gitlab-lockbox-integration.md)
* [Использование секрета Yandex Lockbox для хранения статического ключа доступа с помощью CLI](../tutorials/static-key-in-lockbox/console.md)
* [Хранение подключений и переменных Apache Airflow™ в Yandex Lockbox](../tutorials/lockbox-and-airflow.md)
* [Создание интерактивного serverless-приложения с использованием WebSocket](../tutorials/websocket-app.md)
* [Автоматическое копирование объектов из одного бакета Yandex Object Storage в другой](../tutorials/bucket-to-bucket-copying.md)
* [Развертывание отказоустойчивой архитектуры с прерываемыми виртуальными машинами](../tutorials/nodejs-cron-restart-vm.md)
* [Безопасная передача пароля в скрипт инициализации](../tutorials/secure-password-script/index.md)