Spec-Zone.ru › MySQL 9.2

8.4.4.9 Использование плагина HashiCorp Vault Keyring

Примечание

Плагин keyring_hashicorp — это расширение, включенное в MySQL Enterprise Edition, коммерческий продукт. Чтобы узнать больше о коммерческих продуктах, посетите https://www.mysql.com/products/.

Плагин keyring keyring_hashicorp взаимодействует с HashiCorp Vault для хранения данных на бэкенде. Плагин поддерживает аутентификацию HashiCorp Vault AppRole. Никакая информация о ключах не хранится постоянно в локальном хранилище сервера MySQL. (Можно использовать необязательный кэш ключей в памяти в качестве промежуточного хранилища.) Генерация случайных ключей выполняется на стороне сервера MySQL, а затем ключи сохраняются в HashiCorp Vault.

Плагин keyring_hashicorp поддерживает функции, составляющие стандартный интерфейс службы MySQL Keyring. К операциям keyring, выполняемым этими функциями, можно получить доступ на двух уровнях:

  • Интерфейс SQL: в SQL-запросах вызывайте функции, описанные в разделе 8.4.4.13 «Общие функции управления ключами keyring».

  • Интерфейс C: в коде на языке C вызывайте функции службы keyring, описанные в разделе 7.6.9.2 «Служба Keyring».

Пример (используя интерфейс SQL):

SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');

Дополнительную информацию о характеристиках разрешенных значений ключей, поддерживаемых keyring_hashicorp, см. в разделе 8.4.4.11 «Поддерживаемые типы ключей и длины keyring».

Чтобы установить keyring_hashicorp, используйте общие инструкции, приведенные в разделе 8.4.4.3 «Установка плагина keyring», вместе с конфигурационной информацией, специфичной для keyring_hashicorp, приведенной здесь. Конфигурация, специфичная для плагина, включает подготовку сертификата и файлов ключей, необходимых для подключения к HashiCorp Vault, а также конфигурацию самого HashiCorp Vault. Следующие разделы содержат необходимые инструкции.

  • Подготовка сертификатов и ключей

  • Настройка HashiCorp Vault

  • Конфигурация keyring_hashicorp

Подготовка сертификатов и ключей

Плагин keyring_hashicorp требует безопасного подключения к серверу HashiCorp Vault, используя протокол HTTPS. Типичная настройка включает набор файлов сертификата и ключа:

  • company.crt: Специальный сертификат CA, принадлежащий организации. Этот файл используется как сервером HashiCorp Vault, так и плагином keyring_hashicorp.

  • vault.key: Приватный ключ экземпляра сервера HashiCorp Vault. Этот файл используется сервером HashiCorp Vault.

  • vault.crt: Сертификат экземпляра сервера HashiCorp Vault. Этот файл должен быть подписан сертификатом CA организации.

Следующие инструкции описывают, как создать файлы сертификата и ключа с использованием OpenSSL. (Если у вас уже есть эти файлы, перейдите к Настройке HashiCorp Vault.) Приведенные инструкции относятся к платформам Linux и могут потребовать корректировки для других платформ.

Важно

Сертификаты, сгенерированные по этим инструкциям, являются самоподписанными, что может быть небезопасно. После приобретения опыта работы с такими файлами, рассмотрите возможность получения сертификата/ключа от аккредитованного сертификационного центра.

  1. Подготовьте ключи компании и сервера HashiCorp Vault.

    Используйте следующие команды для генерации файлов ключей:

    openssl genrsa -aes256 -out company.key 4096
    openssl genrsa -aes256 -out vault.key 2048
    

    Команды генерируют файлы с приватным ключом компании (company.key) и приватным ключом сервера Vault (vault.key). Ключи представляют собой случайные RSA-ключи 4096 и 2048 бит соответственно.

    Каждая команда запрашивает пароль. Для целей тестирования пароль не требуется. Чтобы отключить его, опустите аргумент -aes256.

    Файлы ключей содержат конфиденциальную информацию и должны храниться в безопасном месте. Пароль (также конфиденциальный) понадобится позже, поэтому запишите его и храните в безопасном месте.

    (Необязательно) Для проверки содержимого и валидности файлов ключей используйте следующие команды:

    openssl rsa -in company.key -check
    openssl rsa -in vault.key -check
    
  2. Создайте сертификат CA компании.

    Используйте следующую команду для создания файла сертификата CA компании с именем company.crt, действительного в течение 365 дней (введите команду в одной строке):

    openssl req -x509 -new -nodes -key company.key
      -sha256 -days 365 -out company.crt
    

    Если вы использовали аргумент -aes256 для шифрования ключа во время генерации ключа, вам будет предложено ввести пароль к ключу компании во время создания сертификата CA. Вам также будет предложено указать информацию о держателе сертификата (то есть, вас или вашу компанию), как показано здесь:

    Country Name (2 letter code) [AU]:
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:
    Email Address []:
    

    Ответьте на запросы соответствующими значениями.

  3. Создайте запрос на подпись сертификата.

    Для создания сертификата сервера HashiCorp Vault необходимо подготовить запрос на подпись сертификата (CSR) для недавно созданного ключа сервера. Создайте конфигурационный файл с именем request.conf, содержащий следующие строки. Если сервер HashiCorp Vault не работает на локальном хосте, замените соответствующие значения CN и IP, а также внесите другие необходимые изменения.

    [req]
    distinguished_name = vault
    x509_entensions = v3_req
    prompt = no
    
    [vault]
    C = US
    ST = CA
    L = RWC
    O = Company
    CN = 127.0.0.1
    
    [v3_req]
    subjectAltName = @alternatives
    authorityKeyIdentifier = keyid,issuer
    basicConstraints = CA:TRUE
    
    [alternatives]
    IP = 127.0.0.1
    

    Используйте эту команду для создания запроса на подпись:

    openssl req -new -key vault.key -config request.conf -out request.csr
    

    Файл вывода (request.csr) — это промежуточный файл, который служит входными данными для создания сертификата сервера.

  4. Создайте сертификат сервера HashiCorp Vault.

    Подпишите объединённую информацию из ключа сервера HashiCorp Vault (vault.key) и CSR (request.csr) с помощью сертификата компании (company.crt) для создания сертификата сервера HashiCorp Vault (vault.crt). Используйте следующую команду (введите команду в одной строке):

    openssl x509 -req -in request.csr
      -CA company.crt -CAkey company.key -CAcreateserial
      -out vault.crt -days 365 -sha256
    

    Чтобы сделать сертификат сервера vault.crt полезным, добавьте содержимое сертификата компании company.crt к нему. Это необходимо, чтобы сертификат компании передавался вместе с сертификатом сервера в запросах.

    cat company.crt >> vault.crt
    

    Если отобразить содержимое файла vault.crt, оно должно выглядеть так:

    -----BEGIN CERTIFICATE-----
    ... content of HashiCorp Vault server certificate ...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    ... content of company certificate ...
    -----END CERTIFICATE-----
    
Настройка HashiCorp Vault

Следующие инструкции описывают, как создать настройку HashiCorp Vault, которая облегчит тестирование плагина keyring_hashicorp.

Важно

Тестовая настройка похожа на рабочую, но при использовании HashiCorp Vault в рабочей среде необходимо учитывать дополнительные соображения безопасности, такие как использование несамозаверяемых сертификатов и хранение корпоративного сертификата в системном хранилище доверенных сертификатов. Вы должны реализовать все необходимые дополнительные шаги по обеспечению безопасности, чтобы удовлетворить свои операционные требования.

Эти инструкции предполагают доступность файлов сертификата и ключа, созданных в разделе Подготовка сертификата и ключа. Обратитесь к этому разделу, если у вас нет этих файлов.

  1. Получите двоичный файл HashiCorp Vault.

    Загрузите двоичный файл HashiCorp Vault, соответствующий вашей платформе, с сайта https://www.vaultproject.io/downloads.html.

    Извлеките содержимое архива, чтобы получить исполняемую команду vault, используемую для выполнения операций HashiCorp Vault. При необходимости добавьте директорию, в которой вы установили команду, в системную переменную среды PATH.

    (Необязательно) HashiCorp Vault поддерживает опции автодополнения, что облегчает использование. Дополнительную информацию см. на странице https://learn.hashicorp.com/vault/getting-started/install#command-completion.

  2. Создайте конфигурационный файл сервера HashiCorp Vault.

    Подготовьте конфигурационный файл с именем config.hcl со следующим содержимым. Для значений tls_cert_file, tls_key_file и path замените пути, соответствующие вашей системе.

    listener "tcp" {
      address="127.0.0.1:8200"
      tls_cert_file="/home/username/certificates/vault.crt"
      tls_key_file="/home/username/certificates/vault.key"
    }
    
    storage "file" {
      path = "/home/username/vaultstorage/storage"
    }
    
    ui = true
    
  3. Запустите сервер HashiCorp Vault.

    Для запуска сервера Vault используйте следующую команду, где параметр -config указывает путь к только что созданному конфигурационному файлу:

    vault server -config=config.hcl
    

    На этом шаге вам может потребоваться ввести пароль для закрытого ключа сервера Vault, хранящегося в файле vault.key.

    Сервер должен запуститься, выведя некоторую информацию на консоль (IP, порт и так далее).

    Чтобы вы могли ввести оставшиеся команды, запустите команду vault server в фоновом режиме или откройте другой терминал, прежде чем продолжить.

  4. Инициализируйте сервер HashiCorp Vault.

    Примечание

    Операции, описанные на этом шаге, требуются только при первом запуске Vault для получения ключа разгерметизации и корневого токена. При последующих перезапусках экземпляра Vault потребуется только разгерметизация с использованием ключа разгерметизации.

    Выполните следующие команды (предполагается синтаксис оболочки Bourne):

    export VAULT_SKIP_VERIFY=1
    vault operator init -n 1 -t 1
    

    Первая команда позволяет команде vault временно игнорировать тот факт, что к системному хранилищу доверенных сертификатов не добавлен корпоративный сертификат. Это компенсирует тот факт, что наш самозаверяемый CA не добавлен в это хранилище. (Для использования в рабочей среде такой сертификат должен быть добавлен.)

    Вторая команда создает единственный ключ разгерметизации с требованием наличия одного ключа разгерметизации для разгерметизации. (В рабочей среде экземпляр будет иметь несколько ключей разгерметизации, причем для его разгерметизации потребуется ввести до такого количества ключей. Ключи разгерметизации должны быть переданы хранителям ключей в компании. Использование одного ключа может быть сочтено проблемой безопасности, так как это позволит одному хранителю ключей разгерметизировать хранилище.)

    Vault должен ответить информацией о ключе разгерметизации и корневом токене, а также некоторым дополнительным текстом (фактические значения ключа разгерметизации и корневого токена отличаются от показанных здесь):

    ...
    Unseal Key 1: I2xwcFQc892O0Nt2pBiRNlnkHzTUrWS+JybL39BjcOE=
    Initial Root Token: s.vTvXeo3tPEYehfcd9WH7oUKz
    ...
    

    Храните ключ разгерметизации и корневой токен в защищенном месте.

  5. Разгерметизируйте сервер HashiCorp Vault.

    Используйте эту команду для разгерметизации сервера Vault:

    vault operator unseal
    

    При запросе ввода ключа разгерметизации используйте ключ, полученный ранее во время инициализации Vault.

    Vault должен вывести информацию, свидетельствующую о завершении настройки и разгерметизации хранилища.

  6. Войдите в сервер HashiCorp Vault и проверьте его состояние.

    Подготовьте переменные среды, необходимые для входа как root:

    vault login s.vTvXeo3tPEYehfcd9WH7oUKz
    

    Для значения токена в этой команде подставьте содержимое корневого токена, полученного ранее во время инициализации Vault.

    Проверьте состояние сервера Vault:

    vault status
    

    Вывод должен содержать эти строки (среди других):

    ...
    Initialized     true
    Sealed          false
    ...
    
  7. Настройте аутентификацию и хранение HashiCorp Vault.

    Примечание

    Описанные на этом шаге операции необходимы только при первом запуске экземпляра Vault. Повторять их не нужно.

    Включите метод аутентификации AppRole и убедитесь, что он присутствует в списке методов аутентификации:

    vault auth enable approle
    vault auth list
    

    Включите хранилище Vault KeyValue:

    vault secrets enable -version=1 kv
    

    Создайте и настройте роль для использования с плагином keyring_hashicorp (введите команду в одной строке):

    vault write auth/approle/role/mysql token_num_uses=0
      token_ttl=20m token_max_ttl=30m secret_id_num_uses=0
    
  8. Добавьте политику безопасности AppRole.

    Примечание

    Описанные на этом шаге операции необходимы только при первом запуске экземпляра Vault. Повторять их не нужно.

    Подготовьте политику, разрешающую ранее созданной роли доступ к соответствующим секретам. Создайте новый файл с именем mysql.hcl со следующим содержимым:

    path "kv/mysql/*" {
      capabilities = ["create", "read", "update", "delete", "list"]
    }
    
    Примечание

    kv/mysql/ в этом примере, возможно, потребует корректировки в соответствии с местными политиками установки и требованиями безопасности. В таком случае внесите те же корректировки повсюду, где kv/mysql/ появляется в этих инструкциях.

    Импортируйте файл политики на сервер Vault, чтобы создать политику с именем mysql-policy, а затем назначьте политику новой роли:

    vault policy write mysql-policy mysql.hcl
    vault write auth/approle/role/mysql policies=mysql-policy
    

    Получите идентификатор только что созданной роли и сохраните его в защищенном месте:

    vault read auth/approle/role/mysql/role-id
    

    Сгенерируйте идентификатор секрета для роли и сохраните его в защищенном месте:

    vault write -f auth/approle/role/mysql/secret-id
    

    После генерации этих учетных данных AppRole (ID роли и ID секрета) они, как ожидается, будут действительны неопределенно долго. Их не нужно генерировать повторно, и плагин keyring_hashicorp может быть настроен с ними для использования на постоянной основе. Дополнительную информацию об аутентификации AuthRole см. на странице https://www.vaultproject.io/docs/auth/approle.html.

Настройка плагина keyring_hashicorp

В файле библиотеки плагинов содержится плагин keyring_hashicorp и загружаемая функция keyring_hashicorp_update_config(). При инициализации и завершении работы плагин автоматически загружает и разгружает функцию. Нет необходимости загружать и разгружать функцию вручную.

Плагин keyring_hashicorp поддерживает параметры конфигурации, показанные в следующей таблице. Для указания этих параметров назначьте значения соответствующим системным переменным.

Параметр конфигурации Системная переменная Обязательно
URL сервера HashiCorp keyring_hashicorp_server_url Нет
Идентификатор роли AppRole keyring_hashicorp_role_id Да
Идентификатор секрета AppRole keyring_hashicorp_secret_id Да
Путь к хранилищу keyring_hashicorp_store_path Да
Путь авторизации keyring_hashicorp_auth_path Нет
Путь к файлу сертификата CA keyring_hashicorp_ca_path Нет
Управление кэшем keyring_hashicorp_caching Нет

Для использования во время процесса запуска сервера, keyring_hashicorp необходимо загрузить с помощью параметра --early-plugin-load. Как указано в таблице выше, необходимо также установить несколько системных переменных, связанных с плагином. Например, используйте эти строки в файле сервера my.cnf, скорректировав .so суффикс и расположение файлов для вашей платформы, при необходимости:

[mysqld]
early-plugin-load=keyring_hashicorp.so
keyring_hashicorp_role_id='ee3b495c-d0c9-11e9-8881-8444c71c32aa'
keyring_hashicorp_secret_id='0512af29-d0ca-11e9-95ee-0010e00dd718'
keyring_hashicorp_store_path='/v1/kv/mysql'
keyring_hashicorp_auth_path='/v1/auth/approle/login'
Примечание

Согласно документации HashiCorp, все API маршруты имеют префикс с версией протокола (который вы можете увидеть в предыдущем примере как /v1/ в значениях keyring_hashicorp_store_path и keyring_hashicorp_auth_path). Если HashiCorp разработает новые версии протоколов, может потребоваться изменить /v1/ на что-то другое в вашей конфигурации.

MySQL Server аутентифицируется с HashiCorp Vault с использованием аутентификации AppRole. Для успешной аутентификации необходимо предоставить Vault два секрета: идентификатор роли и идентификатор секрета, которые аналогичны понятию имени пользователя и пароля. Используемые значения идентификатора роли и идентификатора секрета получены в ходе предварительно выполненной процедуры настройки HashiCorp Vault. Чтобы указать два идентификатора, назначьте их соответствующие значения системным переменным keyring_hashicorp_role_id и keyring_hashicorp_secret_id. Процедура настройки также приводит к пути к хранилищу /v1/kv/mysql, которое является значением, присваиваемым keyring_hashicorp_commit_store_path.

При инициализации плагина keyring_hashicorp пытается подключиться к серверу HashiCorp Vault с использованием значений конфигурации. Если подключение успешно, плагин сохраняет значения в соответствующих системных переменных, которые содержат _commit_ в их имени. Например, при успешном подключении плагин сохраняет значения keyring_hashicorp_role_id и keyring_hashicorp_store_path в keyring_hashicorp_commit_role_id и keyring_hashicorp_commit_store_path.

Переконфигурацию во время выполнения можно выполнить с помощью функции keyring_hashicorp_update_config():

  1. Используйте операторы SET, чтобы назначить желаемые новые значения системным переменным конфигурации, показанным в предыдущей таблице. Эти назначения сами по себе не влияют на текущую работу плагина.

  2. Вызовите keyring_hashicorp_update_config(), чтобы заставить плагин переконфигурироваться и повторно подключиться к серверу HashiCorp Vault с использованием новых значений переменных.

  3. Если подключение успешно, плагин сохраняет обновленные значения конфигурации в соответствующих системных переменных, содержащих _commit_ в своём имени.

Например, если вы переконфигурировали HashiCorp Vault для прослушивания на порту 8201 вместо стандартного 8200, переконфигурируйте keyring_hashicorp так:

mysql> SET GLOBAL keyring_hashicorp_server_url = 'https://127.0.0.1:8201';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT keyring_hashicorp_update_config();
+--------------------------------------+
| keyring_hashicorp_update_config()    |
+--------------------------------------+
| Configuration update was successful. |
+--------------------------------------+
1 row in set (0.03 sec)

Если плагин не может подключиться к HashiCorp Vault во время инициализации или переконфигурации и не было существующего подключения, системные переменные _commit_ устанавливаются в 'Not committed' для строковых переменных и в OFF для логических переменных. Если плагин не может подключиться, но было существующее подключение, это подключение остаётся активным, и переменные _commit_ отражают используемые для него значения.

Примечание

Если вы не установите обязательные системные переменные при запуске сервера или произойдёт какая-либо другая ошибка инициализации плагина, инициализация завершится неудачно. В этом случае вы можете использовать процедуру переконфигурации во время выполнения, чтобы инициализировать плагин без перезапуска сервера.

Дополнительную информацию о системных переменных и функциях плагина keyring_hashicorp см. в разделе 8.4.4.17 «Системные переменные keyring» и разделе 8.4.4.14 «Функции управления ключами keyring, специфичные для плагинов».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/keyring-hashicorp-plugin.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API