6.4.4.5 使用 keyring_aws Amazon Web Services 密钥环插件
Note
keyring_aws
插件是 MySQL Enterprise Edition(商业产品)中的扩展。要了解有关商品的更多信息,请参阅https://www.mysql.com/products/。
keyring_aws
keyring 插件与 Amazon Web Services 密钥 Management 服务(AWS KMS)通信,作为密钥生成的后端,并使用本地文件存储密钥。所有密钥环资料都是由 AWS 服务器专门生成的,而不是由keyring_aws
生成的。
keyring_aws
在以下平台上可用:
-
EL7
-
macOS 10.13 和 10.14
-
SLES 12
-
Ubuntu 14.04 和 16.04
-
Windows
此处的讨论假定您通常熟悉 AWS,尤其是 KMS。一些相关的信息来源:
以下各节提供了keyring_aws
键环插件的配置和使用信息:
keyring_aws Configuration
要安装keyring_aws
插件,请使用第 6.4.4.1 节“安装 Keyring 插件”中的常规密钥环安装说明以及在此处找到的特定于插件的配置信息。
插件库文件包含keyring_aws
插件和两个用户定义的函数(UDF)keyring_aws_rotate_cmk()和keyring_aws_rotate_keys()。
要配置keyring_aws
,您必须获取一个 Secret 访问密钥,该密钥提供用于与 AWS KMS 通信的凭证,并将其写入配置文件:
-
创建一个 AWS KMS 账户。
-
使用 AWS KMS 创建 Secret 访问密钥 ID 和 Secret 访问密钥。访问密钥用于验证您的身份以及应用程序的身份。
-
使用 AWS KMS 帐户创建 Client 主密钥(CMK)ID。在 MySQL 启动时,将keyring_aws_cmk_id系统变量设置为 CMK ID 值。此变量是必需变量,没有默认值。 (如果需要,可以使用SET GLOBAL在运行时更改其值。)
-
如有必要,创建配置文件所在的目录。该目录应具有限制性模式,并且只能由用于运行 MySQL 服务器的帐户访问。例如,在 Unix 和类似 Unix 的系统上,要使用
/usr/local/mysql/mysql-keyring/keyring_aws_conf
作为文件名,以下命令(执行为root
)创建其父目录并设置目录模式和所有权:
shell> cd /usr/local/mysql
shell> mkdir mysql-keyring
shell> chmod 750 mysql-keyring
shell> chown mysql mysql-keyring
shell> chgrp mysql mysql-keyring
在 MySQL 启动时,将keyring_aws_conf_file系统变量设置为/usr/local/mysql/mysql-keyring/keyring_aws_conf
以向服务器指示配置文件的位置。
-
准备
keyring_aws
配置文件,其中应包含两行: -
第 1 行:Secret 访问密钥 ID
-
第 2 行:Secret 访问密钥
例如,如果密钥 ID 为wwwwwwwwwwwwwEXAMPLE
且密钥为xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
,则配置文件如下所示:
wwwwwwwwwwwwwEXAMPLE
xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
为了在服务器启动过程中可用,必须使用--early-plugin-load选项加载keyring_aws
。 keyring_aws_cmk_id系统变量是必需的,并且配置从 AWS KMS 服务器获得的 Client 主密钥(CMK)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
插件成功启动,配置文件必须存在并且包含有效的 Secret 访问密钥信息,该信息已如前所述进行了初始化。存储文件不必存在。如果不是,则keyring_aws
尝试创建它(以及它的父目录,如有必要)。
有关用于配置keyring_aws
插件的系统变量的其他信息,请参见第 6.4.4.11 节,“密钥环系统变量”。
启动 MySQL 服务器并安装与keyring_aws
插件关联的 UDF。这是一次性操作,通过执行以下语句并根据需要调整平台的.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
个 UDF 的其他信息,请参见第 6.4.4.9 节“特定于插件的密钥环密钥 Management 功能”。
keyring_aws Operation
在插件启动时,keyring_aws
插件从其配置文件读取 AWSSecret 访问密钥 ID 和密钥。它还会将包含在其存储文件中的所有加密密钥读入其内存中的缓存。
在操作过程中,keyring_aws
将加密的密钥维护在内存中的高速缓存中,并将该存储文件用作本地持久性存储。每个密钥环操作都是事务性的:keyring_aws
或者成功更改了内存中的密钥高速缓存和密钥环存储文件,或者操作失败并且密钥环状态保持不变。
为确保仅在存在正确的密钥环存储文件时才刷新密钥,keyring_aws
将密钥环的 SHA-256 校验和存储在文件中。在更新文件之前,插件会验证它是否包含预期的校验和。
keyring_aws
插件支持包含标准 MySQL Keyring 服务接口的功能。这些功能执行的密钥环操作可从两个级别访问:
-
C 接口:使用 C 语言代码,调用第 28.3.2 节“密钥环服务”中描述的密钥环服务功能。
-
SQL 接口:在 SQL 语句中,调用第 6.4.4.8 节“通用密钥环密钥 Management 功能”中描述的用户定义函数(UDF)。
示例(使用 UDF):
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
此外,keyring_aws_rotate_cmk()和keyring_aws_rotate_keys() UDF“扩展”了密钥环插件接口,以提供标准密钥环服务接口未涵盖的与 AWS 相关的功能。这些功能只能通过调用 UDF 来访问。没有相应的 C 语言按键服务功能。
有关keyring_aws
允许的密钥类型的信息,请参见第 6.4.4.6 节“支持的密钥环密钥类型和长度”。
keyring_aws 凭据更改
假设keyring_aws
插件在服务器启动时已正确初始化,则可以更改用于与 AWS KMS 通信的凭证:
-
使用 AWS KMS 创建新的 Secret 访问密钥 ID 和 Secret 访问密钥。
-
将新凭据存储在配置文件(由keyring_aws_conf_file系统变量命名的文件)中。文件格式如前所述。
-
重新初始化
keyring_aws
插件,以便它重新读取配置文件。假设新凭据有效,则插件应成功初始化。
有两种方法可以重新初始化插件:
-
重新启动服务器。这更简单并且没有副作用,但是不适用于要求服务器停机时间最少且重启次数尽可能少的安装。
-
通过执行以下语句重新初始化插件,而无需重新启动服务器,并根据需要调整平台的
.so
后缀:
UNINSTALL PLUGIN keyring_aws;
INSTALL PLUGIN keyring_aws SONAME 'keyring_aws.so';
Note
INSTALL PLUGIN除了在运行时加载插件外,还具有将插件注册到mysql.plugin
系统 table 中的副作用。因此,如果您决定停止使用keyring_aws
,则从用于启动服务器的选项集中删除--early-plugin-load选项是不够的。这样可以阻止插件过早加载,但是服务器到达启动 Sequences 中加载mysql.plugin
中注册的插件时,服务器仍会尝试加载该插件。
因此,如果您执行刚刚描述的UNINSTALL PLUGIN加INSTALL PLUGIN序列来更改 AWS KMS 凭证,则要停止使用keyring_aws
,除了删除--early-plugin-load选项外,还必须再次执行UNINSTALL PLUGIN来注销插件。