Documentation Home
MySQL 8.0 参考手册  / 第 4 章 MySQL 程序  / 4.6 管理和实用程序  / 4.6.8 mysql_migrate_keyring — 密钥环密钥迁移实用程序  /  6.4.4.5 使用 keyring_aws 亚马逊网络服务密钥环插件

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

笔记

keyring_aws插件是商业产品 MySQL Enterprise Edition 中包含的扩展。要了解有关商业产品的更多信息,请参阅https://www.mysql.com/products/

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

MySQL Enterprise Edition 可以keyring_aws在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Debian、Ubuntu、macOS 和 Windows 上使用。MySQL 企业版不支持 keyring_aws在这些平台上使用:

  • EL6

  • 通用 Linux (glibc2.12)

  • 索拉里斯

此处的讨论假定您总体上熟悉 AWS,尤其是 KMS。一些相关的信息来源:

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

keyring_aws 配置

要安装keyring_aws,请使用 第 6.4.4.1 节“Keyring 插件安装”中的一般说明,以及此处找到的特定于插件的配置信息。

插件库文件包含 keyring_aws插件和两个可加载函数, keyring_aws_rotate_cmk()以及 keyring_aws_rotate_keys().

要配置keyring_aws,您必须获取一个秘密访问密钥,该密钥提供用于与 AWS KMS 通信的凭证并将其写入配置文件:

  1. 创建一个 AWS KMS 账户。

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

  3. 使用 AWS KMS 账户创建客户主密钥 (CMK) 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 服务器获取的客户主密钥 (CMK) ID。和 系统变量可选地配置插件用于配置信息和数据存储keyring_aws_conf_file的 文件的位置。文件位置变量默认值是特定于平台的。要明确配置位置,请在启动时设置变量值。例如,在服务器 文件中使用这些行,调整 keyring_aws_data_filekeyring_awsmy.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插件的系统变量的其他信息,请参阅 第 6.4.4.12 节,“密钥环系统变量”

启动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功能的其他信息,请参阅 第 6.4.4.9 节,“插件特定的密钥环密钥管理功能”

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,请参阅 第 6.4.4.6 节,“支持的密钥环密钥类型和长度”

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';
      笔记

      In addition to loading a plugin at runtime, INSTALL PLUGIN has the side effect of registering the plugin it in the mysql.plugin system table. Because of this, if you decide to stop using keyring_aws, it is not sufficient to remove the --early-plugin-load option from the set of options used to start the server. That stops the plugin from loading early, but the server still attempts to load it when it gets to the point in the startup sequence where it loads the plugins registered in mysql.plugin.

      因此,如果您执行刚刚描述的 UNINSTALL PLUGIN加号 INSTALL PLUGIN 序列来更改 AWS KMS 凭据,那么要停止使用 ,除了删除该 选项 之外keyring_aws,还需要再次执行取消注册插件。UNINSTALL PLUGIN--early-plugin-load