Механизм секретов базы данных Oracle
Данный механизм секретов является частью механизма секретов базы данных. Если вы еще не читали страницу о бэкенде базы данных, пожалуйста, сделайте это сейчас, так как там объясняется, как настроить бэкенд базы данных и дается обзор функционирования движка.
Oracle - один из поддерживаемых плагинов для механизма секретов баз данных. Он способен динамически генерировать учетные данные на основе настроенных ролей для баз данных Oracle. Он также поддерживает статические роли.
1. Возможности
Плагин для баз данных Oracle не включен в основное дерево кода StarVault и может быть найден в собственном git-репозитории здесь: hashicorp/vault-plugin-database-oracle
Этот плагин не совместим с Alpine Linux из коробки.
| Название плагина | Возможность ротации root | Динамические роли | Кастомизация имен пользователей |
|---|---|---|---|
Customizable (see: Custom Plugins) |
Да |
Да |
Да |
2. Настройка
Плагин для баз данных Oracle не входит в основное дерево кода StarVault и может быть найден в собственном git-репозитории здесь: hashicorp/vault-plugin-database-oracle
Для linux/amd64 предварительно собранные двоичные файлы можно найти на странице релизов
Перед запуском плагина вам потребуется установить библиотеку Oracle Instant Client. Их можно загрузить с сайта Oracle. Библиотеки должны быть помещены в путь поиска библиотек по умолчанию или определены в конфигурационных файлах ld.so.conf.
Следующие привилегии необходимы плагину для минимальной функциональности. Дополнительные привилегии могут потребоваться в зависимости от SQL, настроенного в ролях базы данных.
GRANT CREATE USER to starvault WITH ADMIN OPTION;
GRANT ALTER USER to starvault WITH ADMIN OPTION;
GRANT DROP USER to starvault WITH ADMIN OPTION;
GRANT CONNECT to starvault WITH ADMIN OPTION;
GRANT CREATE SESSION to starvault WITH ADMIN OPTION;
GRANT SELECT on gv_$session to starvault;
GRANT SELECT on v_$sql to starvault;
GRANT ALTER SYSTEM to starvault WITH ADMIN OPTION;
StarVault требует ALTER SYSTEM для завершения пользовательских сессий при отзыве пользователей. Это можно заменить сохраненной процедурой и предоставить ее пользователю-администратору StarVault.
Если вы используете StarVault с включенной функцией mlock, вам нужно включить возможность ipc_lock для бинарных файлов плагина.
-
Включите механизм секретов базы данных, если он еще не включен:
$ starvault secrets enable database Success! Enabled the database secrets engine at: database/По умолчанию механизм секретов будет включаться по имени движка. Чтобы включить механизм секретов по другому пути, используйте аргумент
-path. -
Загрузите и зарегестрируйте плагин
$ starvault write sys/plugins/catalog/database/oracle-database-plugin \ sha256="..." \ command=vault-plugin-database-oracle -
Настройте StarVault с помощью соответствующего плагина и информации о подключении:
$ starvault write database/config/my-oracle-database \ plugin_name=oracle-database-plugin \ connection_url="{{username}}/{{password}}@localhost:1521/OraDoc.localhost" \ allowed_roles="my-role" \ username="VAULT_SUPER_USER" \ password="myreallysecurepassword"Если Oracle использует SSL, смотрите пример подключения с использованием SSL.
Если в используемой вами версии Oracle есть контейнерная база данных, то в поле
connection_urlвам нужно будет подключиться к одной из подключаемых баз данных, а не к контейнерной базе данных. -
Настоятельно рекомендуется немедленно сменить пароль пользователя
root, подробнее см. в разделе Ротация корневых учетных данных. Это гарантирует, что только StarVault сможет получить доступ кrootпользователю, которого StarVault использует для работы с динамическими и статическими учетными данными.Будьте внимательныПароль пользователя
rootбудет недоступен после ротации, поэтому настоятельно рекомендуется создать пользователя для StarVault, не использовать фактического пользователяroot. -
Настройте роль, которая сопоставляет имя в StarVault с оператором SQL, который нужно выполнить для создания учетной записи базы данных:
$ starvault write database/roles/my-role \ db_name=my-oracle-database \ creation_statements='CREATE USER {{username}} IDENTIFIED BY "{{password}}"; GRANT CONNECT TO {{username}}; GRANT CREATE SESSION TO {{username}};' \ default_ttl="1h" \ max_ttl="24h"creation_statementsмогут быть указаны в файле и интерпретированы StarVault CLI с помощью символа@:$ starvault write database/roles/my-role \ creation_statements=@creation_statements.sql \ ...Дополнительные сведения см. в документации по командам.
2.1. Подключение с помощью SSL
Если сервер Oracle, к которому пытается подключиться StarVault, использует SSL-приемник, плагин базы данных потребует дополнительной настройки с помощью параметра connection_url:
starvault write database/config/oracle \
plugin_name=vault-plugin-database-oracle \
connection_url='{{username}}/{{password}}@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVICE_NAME=<service_name>))(SECURITY=(SSL_SERVER_CERT_DN="<cert_dn>")(MY_WALLET_DIRECTORY=<path_to_wallet>)))' \
allowed_roles="my-role" \
username="admin" \
password="password"
Например, отличительное имя сертификата SSL-сервера и путь к Oracle Wallet, который будет использоваться для подключения и проверки, можно настроить с помощью:
starvault write database/config/oracle \
plugin_name=vault-plugin-database-oracle \
connection_url='{{username}}/{{password}}@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=orionsoft.ru)(PORT=1523))(CONNECT_DATA=(SERVICE_NAME=ORCL))(SECURITY=(SSL_SERVER_CERT_DN="CN=orionsoft.ru,OU=TestCA,O=orionsoft=ru")(MY_WALLET_DIRECTORY=/etc/oracle/wallets)))' \
allowed_roles="my-role" \
username="admin" \
password="password"
2.1.1. Разрешения для кошелька
|
Кошельки, используемые при подключении по SSL, должны быть доступны на каждом сервере StarVault при использовании кластеров высокой доступности. |
Кошелек, используемый StarVault, должен находиться в хорошо известном месте с соответствующими правами доступа к файловой системе. Например, если StarVault работает от имени пользователя starvault, каталог кошелька может быть настроен следующим образом:
mkdir -p /etc/starvault/wallets
cp cwallet.sso /etc/starvault/wallets/cwallet.sso
chown -R starvault:starvault /etc/starvault
chmod 600 /etc/starvault/wallets/cwallet.sso
2.2. Использование TNS имен
|
Файл |
StarVault может опционально использовать имена TNS в строке соединения при подключении к базам данных Oracle с помощью файла tnsnames.ora. Пример файла tnsnames.ora может выглядеть следующим образом:
AWSEAST=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = hashicorp.us-east-1.rds.amazonaws.com)(PORT = 1523))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = ORCL)
)
(SECURITY =
(SSL_SERVER_CERT_DN = "CN=hashicorp.rds.amazonaws.com/OU=RDS/O=Amazon.com/L=Seattle/ST=Washington/C=US")
(MY_WALLET_DIRECTORY = /etc/oracle/wallet/east)
)
)
AWSWEST=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = hashicorp.us-west-1.rds.amazonaws.com)(PORT = 1523))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = ORCL)
)
(SECURITY =
(SSL_SERVER_CERT_DN = "CN=hashicorp.rds.amazonaws.com/OU=RDS/O=Amazon.com/L=Seattle/ST=Washington/C=US")
(MY_WALLET_DIRECTORY = /etc/oracle/wallet/west)
)
)
Чтобы настроить StarVault на использование имен TNS, установите на сервере StarVault следующую переменную среды:
TNS_ADMIN=/path/to/tnsnames/directory
|
Если StarVault выдает ошибку "не удалось открыть файл", проверьте, доступна ли переменная окружения |
Используйте псевдоним в параметре connection_url в конфигурации базы данных:
starvault write database/config/oracle-east \
plugin_name=vault-plugin-database-oracle \
connection_url="{{username}}/{{password}}@AWSEAST" \
allowed_roles="my-role" \
username="VAULT_SUPER_USER" \
password="myreallysecurepassword"
starvault write database/config/oracle-west \
plugin_name=vault-plugin-database-oracle \
connection_url="{{username}}/{{password}}@AWSWEST" \
allowed_roles="my-role" \
username="VAULT_SUPER_USER" \
password="myreallysecurepassword"
3. Использование
3.1. Динамические учетные данные
После того как механизм секретов настроен и у пользователя/машины есть токен StarVault с соответствующими правами, он может генерировать учетные данные.
-
Сгенерируйте новые учетные данные, считав из конечной точки
/credsимя роли:$ starvault read database/creds/my-roleKey
Value
---
-----
lease_iddatabase/creds/my-role/2f6a614c-4aa2-7b19-24b9-ad944a8d4de6lease_duration1hlease_renewabletruepasswordyRUSyd-vPYDg5NkU9kDgusernameV_VAULTUSE_MY_ROLE_SJJUK3Q8W3BKAYAN8S62_1602543009