Способы хранения секретов
ADCM поддерживает различные хранилища секретов, что позволяет безопасно работать с чувствительными данными и использовать внешние системы.
Ниже приведена таблица с секретами, которые создаются при первичном запуске ADCM.
| Путь к секрету | Описание |
|---|---|
/adcm/ansible/ansible_vault |
Секрет, используемый Ansible для шифрования конфиденциальных данных |
/adcm/django/secret_key |
Секретный ключ, используемый приложением Django |
/adcm/backend/status_service_token |
Токен, используемый бэкенд-сервером (Backend Server) для аутентификации в статус-сервере (Status Server) |
/adcm/status_service/adcm_token |
Токен, используемый статус-сервером для аутентификации в ADCM |
/adcm/status_checker/status_service_token |
Токен, используемый компонентом, отправляющим heartbeat о состоянии компонента на хосте, для аутентификации в статус-сервере |
ADCM предоставляет возможность хранения секретов двумя способами:
-
в файловой системе (FilesystemBackend);
-
в Vault (VaultBackend).
Выбор используемого хранилища определяется переменной окружения SECRET_BACKEND.
По умолчанию используется файловое хранилище. При необходимости можно настроить использование Vault.
Файловое хранилище
По умолчанию ADCM хранит секреты в файловой системе. Секреты сохраняются в файле /adcm/data/var/secrets_v2.json, который создается автоматически при установке ADCM. Использование файлового хранилища не требует дополнительной настройки и применяется, если не указано иное хранилище секретов.
Пример структуры файла secrets_v2.json:
{
"adcm": {
"ansible": {
"ansible_vault": "..."
},
"django": {
"secret_key": "..."
},
"backend": {
"status_service_token": "..."
},
"status_service": {
"adcm_token": "..."
},
"status_checker": {
"status_service_token": "..."
}
}
}
Vault
|
ПРИМЕЧАНИЕ
При первичной установке ADCM автоматически генерирует необходимые секреты и сохраняет их в выбранном хранилище. Если выполняется обновление ADCM с переходом с файлового хранилища на Vault, необходимо предварительно выполнить миграцию секретов вручную. Подробнее см. в статье Миграция секретов в Vault.
|
ADCM поддерживает работу с Vault, в качестве которого может использоваться HashiCorp Vault или другие совместимые решения (например, OpenBao).
Для использования Vault необходимо выполнить следующие предварительные требования:
-
Создать токен с правами чтения/записи секретов.
-
Создать mount point, который будет использоваться ADCM (
VAULT_MOUNT_POINT).
Токен необходимо сохранить в файл на хосте ADCM (например, в /opt/adcm/token), так как в дальнейшем этот файл указывается в переменной VAULT_TOKEN_FILE.
Интеграция ADCM с Vault осуществляется посредством указания соответствующих переменных окружения. Подробная информация о переменных окружения, используемых для настройки подключения к Vault, приведена в статье Установка.
|
ПРИМЕЧАНИЕ
Для включения Vault необходимо указать переменную окружения SECRET_BACKEND со значением VaultBackend. Если переменная SECRET_BACKEND не определена, по умолчанию используется файловое хранилище секретов (FilesystemBackend).
|
Ниже приведен пример запуска ADCM с использованием Vault.
$ docker run -d \
--name adcm \
-p 8000:8000 \
-v adcm-data:/adcm/data \
-v /opt/adcm/conf/ssl:/etc/ssl/certs \
-v /opt/adcm/token:/adcm/token \
-e DB_HOST="<DB_HOST>" \
-e DB_PORT="<DB_PORT>" \
-e DB_USER="<DB_USER>" \
-e DB_NAME="<DB_NAME>" \
-e DB_PASS="<DB_PASSWORD>" \
-e SECRET_BACKEND="VaultBackend" \
-e VAULT_URL="<VAULT_URL>" \
-e VAULT_MOUNT_POINT="<VAULT_MOUNT_POINT>" \
-e VAULT_TOKEN_FILE="/adcm/token" \
hub.arenadata.io/adcm/adcm:<version>
где <version> — это версия Docker-образа в одном из следующих форматов:
-
<major>.<minor>.<patch>— если необходим конкретный патч ADCM. Пример: 2.0.0. -
<major>.<minor>— если необходим последний патч в рамках выбранной версии ADCM. Пример: 2.0.
Вы можете использовать переменные окружения VAULT_CA_FILE, VAULT_CLIENT_CERT_FILE и VAULT_CLIENT_KEY_FILE для установки защищенного подключения к Vault.
Подготовьте файлы SSL-сертификатов и разместите их в доступном каталоге (например, /etc/ssl/certs). Затем укажите пути к ним с помощью переменных окружения:
-e VAULT_CA_FILE="/adcm/data/conf/ssl/ca.crt" \
-e VAULT_CLIENT_CERT_FILE="/adcm/data/conf/ssl/client.crt" \
-e VAULT_CLIENT_KEY_FILE="/adcm/data/conf/ssl/client.key"
|
ВАЖНО
|