Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Механизм секретов базы данных 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 для бинарных файлов плагина.


  1. Включите механизм секретов базы данных, если он еще не включен:

    $ starvault secrets enable database
    Success! Enabled the database secrets engine at: database/

    По умолчанию механизм секретов будет включаться по имени движка. Чтобы включить механизм секретов по другому пути, используйте аргумент -path.

  2. Загрузите и зарегестрируйте плагин

    $ starvault write sys/plugins/catalog/database/oracle-database-plugin \
        sha256="..." \
        command=vault-plugin-database-oracle
  3. Настройте 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 вам нужно будет подключиться к одной из подключаемых баз данных, а не к контейнерной базе данных.

  4. Настоятельно рекомендуется немедленно сменить пароль пользователя root, подробнее см. в разделе Ротация корневых учетных данных. Это гарантирует, что только StarVault сможет получить доступ к root пользователю, которого StarVault использует для работы с динамическими и статическими учетными данными.

    Будьте внимательны

    Пароль пользователя root будет недоступен после ротации, поэтому настоятельно рекомендуется создать пользователя для StarVault, не использовать фактического пользователя root.

  5. Настройте роль, которая сопоставляет имя в 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 имен

Файл tnsnames.ora и переменная окружения, используемые при подключении по SSL, должны быть доступны на каждом сервере StarVault при использовании кластеров высокой доступности.

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 выдает ошибку "не удалось открыть файл", проверьте, доступна ли переменная окружения TNS_ADMIN на сервере 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 с соответствующими правами, он может генерировать учетные данные.


  1. Сгенерируйте новые учетные данные, считав из конечной точки /creds имя роли:

    $ starvault 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

    yRUSyd-vPYDg5NkU9kDg

    username

    V_VAULTUSE_MY_ROLE_SJJUK3Q8W3BKAYAN8S62_1602543009


4. API

Полный список настраиваемых параметров можно посмотреть на странице API плагина для баз данных Oracle.

Дополнительную информацию о HTTP API движка секретов баз данных можно найти на странице API движка секретов баз данных.