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

6.4.4.9 使用 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)

  • SLES 12(MySQL Server 5.7 之后的版本)

  • 索拉里斯

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

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

keyring_aws 配置

要安装keyring_aws,请使用 第 6.4.4.3 节“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 账户创建 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_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.19 节,“密钥环系统变量”

启动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.16 节,“插件特定的密钥环密钥管理功能”

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.13 节,“支持的密钥环密钥类型和长度”

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 PLUGIN加号 INSTALL PLUGIN 序列来更改 AWS KMS 凭据,那么要停止使用 ,除了删除该 选项 之外keyring_aws,还需要再次执行取消注册插件。UNINSTALL PLUGIN--early-plugin-load