# Секреты

В этом разделе описаны возможности и функции [Секретов](https://my.tuna.am/secrets).

## Обзор

**Секреты** — это компонент платформы Tuna, созданный для безопасного хранения конфиденциальных и не только данных, удобного управления конфигурациями приложений в любых средах: локально, CI/CD, тестовые и продуктивные окружения. Является отличной альтернативой `.env` файлам в компании с [direnv](https://direnv.net/) или переменным окружения в [GitLab CI/CD](https://tuna.am/docs/secrets/examples.md#-gitlab-ci) / [GitHub Actions](https://tuna.am/docs/secrets/examples.md#-github-actions).

**VK Видео**

**YouTube**

## Для кого?

* *Разработчики* — чтобы упростить настройку окружений и сократить количество "магических" значений в коде.
* *DevOps-инженеры* — для централизации и автоматизации конфигураций.
* *Команды* — для безопасного и контролируемого совместного доступа к конфиденциальным данным.

## Основные возможности

Мы придерживаемся общепринятой структуры, поэтому хранение секретов разделяется по проектам, внутри проектов есть окружения, а внутри окружений конфигурации основные или дочерние. Внутри конфигураций сосредоточенно множество функций работы непосредственно с секретами и доступом к ним, аудит и прочее. При работе в [Команде](https://tuna.am/docs/team.md), в разделе с ролями появляется возможность гранулярно распределять доступ участников к нужным окружениям в проектах.

Доступ к секретам осуществляется через веб интерфейс личного кабинета, с помощью консольного клиента [tuna](https://tuna.am/docs/guides/install/install-cli.md) или через [API](https://tuna.am/docs/guides/api.md).

Все секреты хранятся в нашей базе данных в зашифрованном виде, при этом ключ шифрования в самой базе не хранится, так что в случае утечки базы, ваши секреты останутся анонимными. Но всё таки **Секреты** это не [Пароли](https://tuna.am/docs/passwords.md), здесь мы **не** применяем подход [нулевого знания](https://en.wikipedia.org/wiki/Zero-knowledge_proof), в угоду удобству. Секреты позволяют удобно управлять чувствительными настройками приложений, вроде токенов интеграций с внешними сервисами, URL подключения к базе данных и прочих настроек.

### Проекты

Вы можете создавать несколько проектов, под проектом предполагается одно приложение, например API или сервер авторизации. Каждый проект имеет Имя и Алиас. Имя - это название отображаемое в интерфейсе удобное для восприятия, может иметь пробелы и т.д., а Алиас - нужен для обращения к проекту через CLI tuna или через API.

![](/docs/img/secrets/projects.webp)

Количество создаваемых проектов лимитировано и зависит от тарифа.

### Окружения

Каждый проект содержит окружения, по умолчанию 3 (Development, Staging, Production), их можно переименовывать менять порядок, а также добавлять или убавлять под свои нужды.

![](/docs/img/secrets/envs.webp)

Как и проекты окружения имеют Имя и Алиас:

![](/docs/img/secrets/env_rename.webp)

### Конфигурации

Каждое окружение имеет основную конфигурацию, ещё нельзя удалить. Относительно основной конфигурации в окружении можно создавать её копии, т.е. дочерние конфигурации.

![](/docs/img/secrets/configs.webp)

Так, например, у вас есть Development окружение - это `master` ветка в git с которой равёрнут стенд. Относительно основной конфигурации каждый разработчик может создать свою уникальную конфигурацию.

### Секреты

Сами секреты представляют пару Ключ = Значение. Ключ это всегда строка [формата](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html), имени переменной окружения. Значение может быть любым.

Для больше безопасности мы добавляем возможность задать тип для каждой переменной, например вы точно знаете, что `API_ENABLED` это **bool**, и вы можете определить это, тогда вы гарантированно не ошибётесь и не запишите туда строку или число.

![](/docs/img/secrets/secret_type.webp)

Наведя курсор на значение и кликнув можно его отобразить, сверху также появятся дополнительные кнопки управления значением.

![](/docs/img/secrets/secret_value.webp)

К примеру, вот так выглядит генератор секретов:

![](/docs/img/secrets/secret_generator.webp)

#### Комментарии

К каждому секрету можно оставить комментарий:

![](/docs/img/secrets/secret_comment.webp)

1. Отобразить комментарий конкретного секрета
2. Отобразить комментарии всех секретов

#### Напоминания

Ещё к каждому секрету можно оставить напоминания, и вам будут приходить уведомления на email:

![](/docs/img/secrets/secret_reminder_1.webp) ![](/docs/img/secrets/secret_reminder_2.webp)

### Синхронизация секретов в окружениях

Добавляя новые переменные в основную конфигурацию какого-либо окружения вы увидите индикацию у других окружений, что какие-то переменные осутствуют:

![](/docs/img/secrets/skiped_1.webp) ![](/docs/img/secrets/skiped_2.webp)

Вам будет предложено заполнить пропущенные секреты или скрыть их:

![](/docs/img/secrets/skiped_3.webp)

### Сравнение значения секрета в разных окружениях

Вы всегда можете провести инвентаризацию и сравнить значение секрета во всех окружениях и убедиться, например, что подключение к Production базе не скопировано по ошибке в Staging или Development.

![](/docs/img/secrets/secret_compare_1.webp) ![](/docs/img/secrets/secret_compare_2.webp)

### Скрытые секреты

Безусловно, могут быть переменные которые есть только в одном окружении, например в Production, и чтобы не видеть постоянно уведомление о пропущенных секретах, вы можете скрыть их, но они будут отображаться в настройках конфигурации.

![](/docs/img/secrets/secret_hide_1.webp) ![](/docs/img/secrets/secret_hide_2.webp)

### Доступ

к сведению

Доступно только по [подписке](https://tuna.am/#pricing).

#### Сервисные ключи

Вы можете выпустить уникальный для данной конфигурации *Сервисный ключ*, это аналог пользовательского [API-ключа](https://tuna.am/docs/guides/api.md), но ограниченный только на данную конфигурацию. Сервисный ключ может быть ограничен как только на *чтение* так и на *чтение и запись*. Это полезно например для CI/CD.

![](/docs/img/secrets/access_key.webp)

Сервисный ключ можно узнать по префиксу - `tst_`, тогда как API-ключ имеет префикс - `tak_`, а [токен](https://my.tuna.am/token) для создания туннелей - `tt_`.

#### Разрешенные IP адреса и подсети

Доступ также можно ограничивать по IP адресам и подсетям в CIDR формате. По умолчанию разрешено всем.

![](/docs/img/secrets/access_ip.webp)

В комплексе, например вы можете выпустить *Сервисный ключ* для prod окружения и ограничить получение секретов для IP адресов с gitlab-runners и ваших Production серверов.

### История изменений

Также ведётся полный аудит всех действий и изменений внутри конфигурации. Если кто-то изменил пароль подключения к безе данных, вы сможете узнать об этом.

![](/docs/img/secrets/audit.webp)

## Навигация

<!-- -->

## [📄️Работа в CLI](https://tuna.am/docs/secrets/cli.md)

[Управление секретами, запуск приложений и администрирование проектов через консольный клиент tuna](https://tuna.am/docs/secrets/cli.md)

## [📄️Примеры](https://tuna.am/docs/secrets/examples.md)

[Примеры работы с tuna secrets](https://tuna.am/docs/secrets/examples.md)

## [🗃Инструкции](https://tuna.am/docs/secrets/guides.md)

[1 элемент](https://tuna.am/docs/secrets/guides.md)
