Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Using the keyring_aws Amazon Web Services Keyring Plugin

8.4.4.9 使用 keyring_aws 亚马逊网络服务密钥环插件

Note

keyring_aws 插件是 MySQL Enterprise Edition 的一部分,一个商业产品。要了解更多关于商业产品的信息,请参阅 https://www.mysql.com/products/

keyring_aws 密钥环插件与 Amazon Web Services 密钥管理服务(AWS KMS)作为密钥生成的后端,并使用本地文件进行密钥存储。所有密钥材料都由 AWS 服务器生成,而不是由 keyring_aws

MySQL Enterprise Edition 可以在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Debian、Ubuntu、macOS 和 Windows 上与 keyring_aws 一起工作。MySQL Enterprise Edition 不支持在以下平台上使用 keyring_aws

  • EL6

  • 通用 Linux(glibc2.12)

  • SLES 12(从 MySQL Server 5.7 开始)

  • Solaris

以下讨论假设您熟悉 AWS 一般情况和 KMS 特别。

以下部分提供了 keyring_aws 密钥环插件的配置和使用信息:

keyring_aws 配置

要安装 keyring_aws,请使用 第 8.4.4.3 节,“密钥环插件安装” 中的通用说明,以及这里找到的插件特定配置信息。

插件库文件包含 keyring_aws 插件和两个可加载函数:keyring_aws_rotate_cmk()keyring_aws_rotate_keys()

要配置 keyring_aws,您必须获取一个秘密访问密钥,以便与 AWS KMS 进行通信,并将其写入配置文件:

  1. 创建 AWS KMS 帐户。

  2. 使用 AWS KMS 创建秘密访问密钥 ID 和秘密访问密钥。访问密钥用于验证您的身份和应用程序的身份。

  3. 使用 AWS KMS 帐户创建 KMS 密钥 ID。在 MySQL 启动时,设置 keyring_aws_cmk_id 系统变量为 CMK ID 值。这是一个必需的变量,没有默认值。(可以在运行时使用 SET GLOBAL 更改其值。)

  4. 如果必要,创建配置文件所在的目录。该目录应该具有限制模式,并且只能由运行 MySQL 服务器的帐户访问。例如,在 Unix 和 Unix-like 系统上,使用 /usr/local/mysql/mysql-keyring/keyring_aws_conf 作为文件名,以下命令(以 root 身份执行)创建其父目录并设置目录模式和所有权:

    $> cd /usr/local/mysql
    $> mkdir mysql-keyring
    $> chmod 750 mysql-keyring
    $> chown mysql mysql-keyring
    $> chgrp mysql mysql-keyring

    在 MySQL 启动时,设置 keyring_aws_conf_file 系统变量为 /usr/local/mysql/mysql-keyring/keyring_aws_conf,以指示服务器配置文件的位置。

  5. 准备 keyring_aws 配置文件,该文件应包含两行:

    • 行 1:秘密访问密钥 ID

    • 行 2:秘密访问密钥

    例如,如果密钥 ID 是 wwwwwwwwwwwwwEXAMPLE,密钥是 xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY,则配置文件如下所示:

    wwwwwwwwwwwwwEXAMPLE
    xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY

在服务器启动过程中使用时,keyring_aws 必须使用 --early-plugin-load 选项加载。系统变量 keyring_aws_cmk_id 是必需的,用于配置从 AWS KMS 服务器获取的 KMS 密钥 ID。keyring_aws_conf_filekeyring_aws_data_file 系统变量可选地配置插件用于配置信息和数据存储的文件位置。文件位置变量的默认值是平台特定的。要显式配置位置,请在启动时设置变量值。例如,在服务器 my.cnf 文件中使用以下行,根据平台调整 .so 后缀和文件位置:

[mysqld]
early-plugin-load=keyring_aws.so
keyring_aws_cmk_id='arn:aws:kms:us-west-2:111122223333:key/abcd1234-ef56-ab12-cd34-ef56abcd1234'
keyring_aws_conf_file=/usr/local/mysql/mysql-keyring/keyring_aws_conf
keyring_aws_data_file=/usr/local/mysql/mysql-keyring/keyring_aws_data

对于 keyring_aws 插件成功启动,配置文件必须存在并包含有效的秘密访问密钥信息,如前所述初始化。存储文件无需存在。如果不存在,keyring_aws 将尝试创建它(以及其父目录,如果必要)。

有关配置 keyring_aws 插件的系统变量的更多信息,请参阅 第 8.4.4.19 节,“Keyring 系统变量”

启动 MySQL 服务器并安装与 keyring_aws 插件关联的函数。这是一次性操作,通过执行以下语句,根据平台调整 .so 后缀:

CREATE FUNCTION keyring_aws_rotate_cmk RETURNS INTEGER
  SONAME 'keyring_aws.so';
CREATE FUNCTION keyring_aws_rotate_keys RETURNS INTEGER
  SONAME 'keyring_aws.so';

有关 keyring_aws 函数的更多信息,请参阅 第 8.4.4.16 节,“插件特定 Keyring 密钥管理函数”

keyring_aws 操作

在插件启动时,keyring_aws 插件从其配置文件中读取 AWS 秘密访问密钥 ID 和密钥。它还将存储文件中的加密密钥读取到其内存缓存中。

在操作期间,keyring_aws 在内存缓存中维护加密密钥,并使用存储文件作为本地持久存储。每个密钥环操作都是事务性的:keyring_aws 要么成功地更改内存密钥缓存和密钥环存储文件,要么操作失败,密钥环状态保持不变。

为了确保密钥仅在正确的密钥环存储文件存在时刷新,keyring_aws 在文件中存储密钥环的 SHA-256 校验和。在更新文件之前,插件验证它包含预期的校验和。

keyring_aws 插件支持标准 MySQL Keyring 服务接口。密钥环操作通过这些函数可以在两个级别访问:

示例(使用 SQL 接口):

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

此外,keyring_aws_rotate_cmk()keyring_aws_rotate_keys() 函数 扩展 了密钥环插件接口,以提供 AWS 相关功能,而不是标准密钥环服务接口所涵盖的。这些功能仅通过 SQL 调用这些函数可访问,没有相应的 C 语言密钥服务函数。

有关 keyring_aws 允许的密钥值特征,请参阅 第 8.4.4.13 节,“支持的 Keyring 密钥类型和长度”

keyring_aws 凭证更改

假设keyring_aws插件在服务器启动时正确初始化,那么可以更改用于与AWS KMS通信的凭据:

  1. 使用AWS KMS创建新的秘密访问密钥ID和秘密访问密钥。

  2. 将新的凭据存储在配置文件中(由keyring_aws_conf_file系统变量命名的文件)。文件格式如前所述。

  3. 重新初始化keyring_aws插件,以便它重新读取配置文件。假设新的凭据有效,插件应该成功初始化。

    有两种重新初始化插件的方法:

    • 重新启动服务器。这更简单,不会产生副作用,但不适合需要最小服务器停机时间和尽可能少的重新启动的安装。

    • 不重新启动服务器,而是通过执行以下语句重新初始化插件,根据平台调整.so后缀:

      UNINSTALL PLUGIN keyring_aws;
      INSTALL PLUGIN keyring_aws SONAME 'keyring_aws.so';
      Note

      除了在运行时加载插件外,INSTALL PLUGIN还具有在mysql.plugin系统表中注册插件的副作用。因此,如果您决定不再使用keyring_aws,那么从启动服务器时使用的选项集中删除--early-plugin-load选项是不够的。这将停止插件的早期加载,但服务器仍将尝试加载插件,当它到达启动序列中的插件加载点时。

      因此,如果您执行了UNINSTALL PLUGININSTALL PLUGIN序列来更改AWS KMS凭据,然后停止使用keyring_aws,那么还需要执行UNINSTALL PLUGIN以取消注册插件,除了删除--early-plugin-load选项外。