Механизм секретов баз данных генерирует учетные данные динамически на основе настроенных ролей. Он работает с различными базами данных через интерфейс плагинов. Есть несколько встроенных типов баз данных, а также фреймворк для запуска пользовательских типов баз данных для расширения возможностей. Это означает, что сервисам, которым нужен доступ к базе данных, больше не нужно жестко кодировать учетные данные: они могут запрашивать их у Stronghold и использовать leasing mechanism для более удобного распространения ключей. Такие ключи называются «динамические роли» или «динамические секреты».
Поскольку каждая служба обращается к базе данных с уникальными учетными данными, это значительно упрощает аудит при обнаружении сомнительного доступа к данным. Вы можете отследить его до конкретного экземпляра службы, основываясь на имени пользователя SQL.
Stronghold использует свою собственную внутреннюю систему аннулирования, чтобы гарантировать, что пользователи становятся недействительными в течение разумного времени после истечения срока аренды.
Статические роли
При использовании динамических секретов Stronghold генерирует уникальную пару имени пользователя и пароля для каждого уникального запроса учетных данных. Stronghold также поддерживает static roles для некоторых механизмов секретов баз данных. Статические роли представляют собой сопоставление ролей Stronghold с именами пользователей в базе данных в пропорции 1 к 1. При использовании статических ролей Stronghold хранит и автоматически меняет пароли для связанного с ним пользователя базы данных в течение настраиваемого периода времени.
Когда клиент запрашивает учетные данные для статической роли, Stronghold возвращает текущий пароль того пользователя базы данных, который сопоставлен с запрашиваемой ролью. При использовании статических ролей любой человек с соответствующими политиками Stronghold может получить доступ к соответствующей учетной записи пользователя в базе данных.
Не используйте те же учетные данные root базы данных, которые вы предоставили Stronghold в config/ с статическими ролями.
Stronghold не делает различий между стандартными учетными данными и учетными данными root при изменении паролей. Если вы назначите учетные данные root статической роли, все динамические или статические пользователи, управляемые этой конфигурацией базы данных, не смогут работать после изменения, поскольку пароль для config/ больше не действителен.
Если необходимо изменить root учетную запись, используйте эндпоинт API rotate-root-credentials
.
Обратитесь к таблице database capabilities table чтобы определить, поддерживает ли выбранная вами база данных статические роли.
Установка
Большинство механизмов секретов должны быть предварительно сконфигурированы, прежде чем они смогут выполнять свои функции. Эти шаги обычно выполняются оператором или инструментом управления конфигурацией.
- Включить механизм секретов базы данных:
$ d8 stronghold secrets enable database
Success! Enabled the database secrets engine at: database/
По умолчанию, механизм секретов будет включаться по имени движка.
Чтобы включить механизм секретов по другому пути, используйте аргумент -path
.
-
Настроить Stronghold с помощью соответствующего плагина и информации о подключении:
$ d8 stronghold write database/config/my-database \ plugin_name="..." \ connection_url="..." \ allowed_roles="..." \ username="..." \ password="..." \
Внимание! Настоятельно рекомендуется создать пользователя в базе данных специально для Stronghold. Этот пользователь будет использоваться для работы с динамическими и статическими пользователями в базе данных. В документации этот пользователь называется «root».
Stronghold будет использовать указанного здесь пользователя для создания/обновления/отмены учетных данных базы данных. Этот пользователь должен иметь соответствующие права на выполнение действий над другими пользователями базы данных (создание, обновление учетных данных, удаление и т. д.).
Этот механизм секретов может настраивать несколько подключений к базе данных. Для получения подробной информации о конкретных параметрах конфигурации обратитесь к документации по конкретной базе данных.
-
После настройки пользователя root настоятельно рекомендуется изменить пароль для него таким образом, чтобы пользователь stronghold не был доступен никаким пользователям, кроме самого Stronghold:
d8 stronghold write -force database/rotate-root/my-database
Внимание! После этого пароль для пользователя, указанного в предыдущем шаге, будет недоступен. В связи с этим настоятельно рекомендуется создать пользователя, который будет использоваться Stronghold для управления пользователями базы данных.
- Настройте роль, которая сопоставляет имя в Stronghold с набором инструкций для создания учетных данных базы данных.
$ d8 stronghold write database/roles/my-role \
db_name=my-database \
creation_statements="..." \
default_ttl="1h" \
max_ttl="24h"
Success! Data written to: database/roles/my-role
Поля and
будут заполнены плагином динамически
сгенерированными значениями. В некоторых плагинах также поддерживается поле ``.
Использование
После того как механизм секретов настроен и у пользователя/машины есть токен Stronghold с соответствующими правами, он может генерировать учетные данные.
- Сгенерировать новую учетную запись, используя
/creds
и имя роли:
$ d8 stronghold read database/creds/my-role
Key Value
--- -----
lease_id database/creds/my-role/2f6a614c-4aa2-7b19-24b9-ad944a8d4de6
lease_duration 1h
lease_renewable true
password FSREZ1S0kFsZtLat-y94
username v-strongholduser-e2978cd0-ugp7iqI2hdlff5hfjylJ-1602537260
Возможности базы данных
Все базы данных поддерживают динамические и статические роли. Все плагины поддерживают изменение учетных данных root пользователя.
База данных | Изменение Root пользователя | Динамические роли | Статические роли | Кастомизация имени пользователя | Тип учетных данных |
---|---|---|---|---|---|
MySQL/MariaDB | Yes | Yes | Yes | Yes | password |
PostgreSQL | Yes | Yes | Yes | Yes | password |
Типы учетных данных
Системы баз данных поддерживают различные методы аутентификации и типы учетных данных.
Механизм секретов базы данных поддерживает управление учетными данными, альтернативными
именами пользователей и паролями. Параметры credential_type
и credential_config
динамических и статических ролей определяют учетные данные, которые Stronghold
будет генерировать и делать доступными для плагинов баз данных. О том, какие типы
учетных данных они поддерживают, и о примерах их использования читайте в документации
к отдельным плагинам баз данных.
Генерация паролей
Пароли генерируются с помощью политики паролей.
Базы данных могут по желанию устанавливать политику паролей для использования во всех
ролях или на уровне отдельных ролей для данной базы данных. Например, каждый раз,
когда вы вызываете команду d8 stronghold write database/config/my-database
, вы можете
указать политику паролей для всех ролей, используя my-database
. Каждая база данных
имеет политику паролей по умолчанию, которая определяется как:
20 символов, из которых как минимум 1 символ в верхнем регистре, как минимум 1 символ
в нижнем регистре, как минимум 1 цифра и как минимум 1 символ тире.
Генерация паролей по умолчанию может быть представлена в виде следующей политики паролей:
length = 20
rule "charset" {
charset = "abcdefghijklmnopqrstuvwxyz"
min-chars = 1
}
rule "charset" {
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
min-chars = 1
}
rule "charset" {
charset = "0123456789"
min-chars = 1
}
rule "charset" {
charset = "-"
min-chars = 1
}
Отключение экранирования символов
Вы можете указать опцию disable_escaping
со значением true
в некоторых механизмах секретов,
чтобы Stronghold не экранировал специальные символы в полях имени пользователя и пароля.
Это необходимо для некоторых альтернативных форматов строк подключения.
Например, если пароль содержит символы URL-escaped, такие как #
или %
,
они останутся таковыми, а не станут %23
и %25
соответственно.
$ d8 stronghold write database/config/my-mysql-database \
plugin_name="mysql-database-plugin" \
connection_url='server=localhost;port=3306;user id=;password=;database=mydb;' \
username="root" \
password='your#StrongPassword%' \
disable_escaping="true"