Механизм секретов базы данных MySQL/MariaDB
|
Этот механизм может использовать внешние сертификаты X.509 как часть проверки TLS или подписи. Проверка подписей по сертификатам X.509, использующим SHA-1, является устаревшей и не используется без обходного пути. Дополнительную информацию см. в разделе FAQ об устаревании. |
MySQL - один из поддерживаемых плагинов для механизма секретов баз данных. Этот плагин генерирует учетные данные базы данных динамически на основе настроенных ролей для базы данных MySQL, а также поддерживает статические роли.
Этот плагин имеет несколько различных экземпляров, встроенных в starvault, каждый из которых предназначен для разных драйверов MySQL. Единственное различие между этими плагинами заключается в длине имен пользователей, генерируемых плагином, так как разные версии mysql принимают разные длины. Доступны следующие плагины:
-
mysql-database-plugin
-
mysql-aurora-database-plugin
-
mysql-rds-database-plugin
-
mysql-legacy-database-plugin
Дополнительные сведения о настройке механизма секретов базы данных см. в документации по механизму секретов базы данных.
1. Возможности
Название плагина |
Возможность ротации root |
Динамические роли |
Кастомизация имен пользователей |
Зависит от ситуации (см.: выше) |
Да |
Да |
Да |
2. Настройка
-
Включите механизм секретов базы данных, если он еще не включен:
$ starvault secrets enable database Success! Enabled the database secrets engine at: database/По умолчанию движок secrets будет включаться по имени движка. Чтобы включить движок secrets по другому пути, используйте аргумент
-path. -
Настройте StarVault с помощью соответствующего плагина и информации о подключении:
$ starvault write database/config/my-mysql-database \ plugin_name=mysql-database-plugin \ connection_url="{{username}}:{{password}}@tcp(127.0.0.1:3306)/" \ allowed_roles="my-role" \ username="vaultuser" \ password="vaultpass" -
Настройте роль, которая сопоставляет имя в StarVault с оператором SQL, чтобы выполнить создание учетной записи базы данных:
$ starvault write database/roles/my-role \ db_name=my-mysql-database \ creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}';GRANT SELECT ON *.* TO '{{name}}'@'%';" \ default_ttl="1h" \ max_ttl="24h" Success! Data written to: database/roles/my-role
3. Использование
После того как механизм секретов настроен и у пользователя/машины есть токен StarVault с соответствующими правами, он может генерировать учетные данные.
-
Сгенерируйте новые учетные данные, считав из конечной точки
/credsимя роли:$ starvault read database/creds/my-roleKey
Value
---
-----
lease_iddatabase/creds/my-role/2f6a614c-4aa2-7b19-24b9-ad944a8d4de6lease_duration1hlease_renewabletruepasswordyY-57n3X5UQhxnmFRP3fusernamev_vaultuser_my-role_crBWVqVh2Hc1
4. Проверка подлинности сертификата клиента x509
Этот плагин поддерживает использование аутентификации MySQL по сертификату x509 на стороне клиента
Чтобы использовать этот механизм аутентификации, настройте плагин:
$ starvault write database/config/my-mysql-database \
plugin_name=mysql-database-plugin \
allowed_roles="my-role" \
connection_url="user:password@tcp(localhost:3306)/test" \
tls_certificate_key=@/path/to/client.pem \
tls_ca=@/path/to/client.ca
|
Параметры |
5. Примеры
5.1. Использование подстановочных символов в запросах о предоставлении прав доступа
MySQL поддерживает использование подстановочных символов для предоставления прав. Иногда это необходимо приложениям, которые ожидают доступа к большому количеству баз данных внутри MySQL. Это можно реализовать, используя подстановочный символ в операторе предоставления. Например, если вы хотите, чтобы пользователь, созданный в StarVault, имел доступ ко всем базам данных, начинающимся с fooapp_, вы можете использовать следующий оператор создания:
CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; GRANT SELECT ON `fooapp\_%`.* TO '{{name}}'@'%';
MySQL ожидает, что часть, в которой должны быть помещены подстановочные символы, будет находиться внутри обратных знаков. Если вы хотите добавить этот оператор создания в StarVault через StarVault CLI, вы не можете просто вставить вышеприведенный оператор в CLI, потому что оболочка интерпретирует текст между знаками обратных кавычек как нечто, что должно быть выполнено. Самый простой способ обойти это - закодировать заявление о создании в Base64 и передать его в StarVault. Например:
$ starvault write database/roles/my-role \
db_name=my-mysql-database \
creation_statements="Q1JFQVRFIFVTRVIgJ3t7bmFtZX19J0AnJScgSURFTlRJRklFRCBCWSAne3twYXNzd29yZH19JzsgR1JBTlQgU0VMRUNUIE9OIGBmb29hcHBcXyVgLiogVE8gJ3t7bmFtZX19J0AnJSc7" \
default_ttl="1h" \
max_ttl="24h"
5.2. Ротация учетных данных root в MySQL 5.6
По умолчанию для ротации root в MySQL используется синтаксис ALTER USER, присутствующий в MySQL 5.7 и выше. Для MySQL 5.6 операторы ротации root должны быть настроены на использование старого синтаксиса SET PASSWORD. Например:
$ starvault write database/config/my-mysql-database \
plugin_name=mysql-database-plugin \
connection_url="{{username}}:{{password}}@tcp(127.0.0.1:3306)/" \
root_rotation_statements="SET PASSWORD = PASSWORD('{{password}}')" \
allowed_roles="my-role" \
username="root" \
password="mysql"
Руководство по ротации root учетных данных см. в разделе Ротация root учетных данных базы данных.
6. API
Полный список настраиваемых параметров можно посмотреть на странице API плагина базы данных MySQL.
Движок секретов базы данных имеет полный HTTP API. Более подробную информацию см. в разделе API механизма секретов баз данных.