该 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
,请使用 第 8.4.4.3 节,“密钥环插件安装” 中的通用说明,以及这里找到的插件特定配置信息。
插件库文件包含 keyring_aws
插件和两个可加载函数:keyring_aws_rotate_cmk()
和 keyring_aws_rotate_keys()
。
要配置 keyring_aws
,您必须获取一个秘密访问密钥,以便与 AWS KMS 进行通信,并将其写入配置文件:
-
创建 AWS KMS 帐户。
-
使用 AWS KMS 创建秘密访问密钥 ID 和秘密访问密钥。访问密钥用于验证您的身份和应用程序的身份。
-
使用 AWS KMS 帐户创建 KMS 密钥 ID。在 MySQL 启动时,设置
keyring_aws_cmk_id
系统变量为 CMK ID 值。这是一个必需的变量,没有默认值。(可以在运行时使用SET GLOBAL
更改其值。) -
如果必要,创建配置文件所在的目录。该目录应该具有限制模式,并且只能由运行 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
,以指示服务器配置文件的位置。 -
准备
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_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
插件从其配置文件中读取 AWS 秘密访问密钥 ID 和密钥。它还将存储文件中的加密密钥读取到其内存缓存中。
在操作期间,keyring_aws
在内存缓存中维护加密密钥,并使用存储文件作为本地持久存储。每个密钥环操作都是事务性的:keyring_aws
要么成功地更改内存密钥缓存和密钥环存储文件,要么操作失败,密钥环状态保持不变。
为了确保密钥仅在正确的密钥环存储文件存在时刷新,keyring_aws
在文件中存储密钥环的 SHA-256 校验和。在更新文件之前,插件验证它包含预期的校验和。
keyring_aws
插件支持标准 MySQL Keyring 服务接口。密钥环操作通过这些函数可以在两个级别访问:
-
SQL 接口:在 SQL 语句中,调用 第 8.4.4.15 节,“通用 Keyring 密钥管理函数” 中描述的函数。
-
C 接口:在 C 语言代码中,调用 第 7.6.9.2 节,“密钥环服务” 中描述的密钥服务函数。
示例(使用 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
插件在服务器启动时正确初始化,那么可以更改用于与AWS KMS通信的凭据:
-
使用AWS KMS创建新的秘密访问密钥ID和秘密访问密钥。
-
将新的凭据存储在配置文件中(由
keyring_aws_conf_file
系统变量命名的文件)。文件格式如前所述。 -
重新初始化
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 PLUGIN
加INSTALL PLUGIN
序列来更改AWS KMS凭据,然后停止使用keyring_aws
,那么还需要执行UNINSTALL PLUGIN
以取消注册插件,除了删除--early-plugin-load
选项外。
-