文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用 keyring_aws Amazon Web Services 密钥环插件

8.4.4.7 使用 keyring_aws Amazon Web Services 密钥环插件

注意

The keyring_aws 插件是 MySQL 企业版(商业产品)中包含的扩展。要了解有关商业产品的更多信息,请参阅 https://www.mysqlserver.cn/products/.

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

MySQL 企业版可以在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Debian、Ubuntu、macOS 和 Windows 上与 keyring_aws 协同工作。MySQL 企业版不支持在以下平台上使用 keyring_aws

  • EL6

  • 通用 Linux (glibc2.12)

  • SLES 12(MySQL 服务器 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 系统上,要使用 /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 系统变量可选地配置 keyring_aws 插件用于配置信息和数据存储的文件位置。 文件位置变量的默认值是特定于平台的。 要明确配置位置,请在启动时设置变量值。 例如,在服务器 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.16 节,“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.13 节,“特定于插件的 Keyring 密钥管理函数”

keyring_aws 操作

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

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

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

keyring_aws 插件支持构成标准 MySQL Keyring 服务接口的函数。 这些函数执行的 Keyring 操作可以在两个级别访问

示例(使用 SQL 接口)

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

此外,keyring_aws_rotate_cmk()keyring_aws_rotate_keys() 函数 扩展 keyring 插件接口以提供标准 keyring 服务接口未涵盖的 AWS 相关功能。 这些功能只能通过使用 SQL 调用这些函数来访问。 没有相应的 C 语言密钥服务函数。

有关 keyring_aws 允许的密钥值的特征的信息,请参见 第 8.4.4.10 节,“支持的 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';
      注意

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

      因此,如果您执行上面描述的 UNINSTALL PLUGININSTALL PLUGIN 序列来更改 AWS KMS 凭据,然后停止使用 keyring_aws,则有必要再次执行 UNINSTALL PLUGIN 来注销插件,除了删除 --early-plugin-load 选项。