该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
,请使用
第 6.4.4.3 节“Keyring 插件安装”中的一般说明,以及此处找到的特定于插件的配置信息。
插件库文件包含
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 系统上,要
/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
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
插件的系统变量的其他信息,请参阅
第 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
插件从其配置文件中读取 AWS 秘密访问密钥 ID 和密钥。它还将其存储文件中包含的任何加密密钥读入其内存缓存中。
在操作期间,keyring_aws
在内存缓存中维护加密密钥,并将存储文件用作本地持久存储。每个密钥环操作都是事务性的:keyring_aws
要么成功更改内存中的密钥缓存和密钥环存储文件,要么操作失败并且密钥环状态保持不变。
为确保仅当存在正确的密钥环存储文件时才刷新密钥,keyring_aws
请在文件中存储密钥环的 SHA-256 校验和。在更新文件之前,插件会验证它是否包含预期的校验和。
该keyring_aws
插件支持构成标准 MySQL Keyring 服务接口的功能。可以在两个级别访问由这些函数执行的密钥环操作:
SQL 接口:在 SQL 语句中,调用 第 6.4.4.15 节“通用密钥环密钥管理函数”中描述的函数。
C 接口:在 C 语言代码中,调用第 5.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
,请参阅
第 6.4.4.13 节,“支持的密钥环密钥类型和长度”。
假设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';
笔记除了在运行时加载插件外, 还有在系统表
INSTALL PLUGIN
中注册插件的副作用 。mysql.plugin
因此,如果您决定停止使用 , 仅从用于启动服务器的选项集中keyring_aws
删除该选项是不够 的。--early-plugin-load
这会阻止插件提前加载,但是当服务器到达启动序列中它加载在mysql.plugin
.因此,如果您执行刚刚描述的
UNINSTALL PLUGIN
加号INSTALL PLUGIN
序列来更改 AWS KMS 凭据,那么要停止使用 ,除了删除该 选项 之外keyring_aws
,还需要再次执行取消注册插件。UNINSTALL PLUGIN
--early-plugin-load