Spec-Zone.ru › MySQL 8.4

8.4.4.8 Использование плагина 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.12 «Функции управления ключами 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.10 «Поддерживаемые типы ключей 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-----
    
END_OF_DOCUMENT_MARKER
Настройка 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 Нет
ID роли AppRole keyring_hashicorp_role_id Да
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 HashiCorp, все API-маршруты имеют префикс версии протокола (который вы можете увидеть в предыдущем примере как /v1/ в значениях keyring_hashicorp_store_path и keyring_hashicorp_auth_path). Если HashiCorp разработает новые версии протокола, возможно, потребуется изменить /v1/ в вашей конфигурации.

MySQL Server аутентифицируется с HashiCorp Vault с помощью аутентификации AppRole. Для успешной аутентификации необходимо предоставить Vault два секрета: ID роли и ID секрета, которые по концепции аналогичны имени пользователя и паролю. Используемые значения ID роли и ID секрета получены во время предварительной процедуры настройки 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.16 «Системные переменные Keyring» и разделе 8.4.4.13 «Функции управления ключами Keyring, специфичные для плагина».

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

Spec-Zone.ru

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