使用keyring_aws密钥环插件
注意该
keyring_aws
插件是商业产品MySQL企业版中的扩展。要了解有关商业产品的更多信息,请参见https://www.mysql.com/products/。
该keyring_aws
插件是一个密钥环插件,可与Amazon Web Services密钥管理服务(AWS KMS)通信,作为密钥生成的后端,并使用本地文件进行密钥存储。所有密钥环资料都是由AWS服务器专门生成的,而不是由keyring_aws
。
keyring_aws
在以下平台上可用:
- Debian 8
- EL7
- macOS 10.13和10.14
- SLES 12
- Ubuntu 14.04和16.04
- windows
此处的讨论假定您通常熟悉AWS,尤其是KMS。一些相关的信息来源:
- AWS站点
- KMS文档
以下各节提供了keyring_aws
密钥环插件的配置和使用信息:
- keyring_aws配置
- keyring_aws操作
- keyring_aws凭证更改
keyring_aws配置
要安装keyring_aws
插件,请使用“密钥环插件安装”中的常规密钥环安装说明,以及在此处找到的特定于插件的配置信息。
插件库文件包含keyring_aws
插件和两个用户定义函数(UDF)keyring_aws_rotate_cmk()
和keyring_aws_rotate_keys()
。
要进行配置keyring_aws
,您必须获取一个秘密访问密钥,该密钥提供用于与AWS KMS通信的凭证,并将其写入配置文件:
- 创建一个AWS KMS账户。
- 使用AWS KMS创建秘密访问密钥ID和秘密访问密钥。访问密钥用于验证您的身份以及应用程序的身份。
- 使用AWS KMS帐户创建客户主密钥(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行:秘密访问密钥ID
- 第2行:秘密访问密钥
例如,如果密钥ID为
wwwwwwwwwwwwwEXAMPLE
并且密钥为xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
,则配置文件如下所示:wwwwwwwwwwwwwEXAMPLE xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
为了在服务器启动过程中可用,keyring_aws
必须使用该--early-plugin-load
选项进行加载。所述keyring_aws_cmk_id
系统变量是强制性的,构成从AWS KMS服务器获得的顾客主密钥(CMK)的标识。的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_dat
为了使keyring_aws
插件成功启动,配置文件必须存在并且包含有效的秘密访问密钥信息,该信息已如前所述进行了初始化。存储文件不需要存在。如果不是,则keyring_aws
尝试创建它(以及它的父目录,如有必要)。
有关用于配置keyring_aws
插件的系统变量的更多信息,请参见“密钥环系统变量”。
启动MySQL服务器并安装与keyring_aws
插件关联的UDF 。这是一项一次性操作,通过执行以下语句来执行(.so
根据需要调整平台的后缀):
CREATE FUNCTION keyring_aws_rotate_cmkRETURNS INTEGERSONAME 'keyring_aws.so';CREATE FUNCTION keyring_aws_rotate_keysRETURNS INTEGERSONAME 'keyring_aws.so';
有关keyring_aws
UDF的更多信息,请参见“特定于插件的密钥环密钥管理功能”。
keyring_aws操作
插件启动时,keyring_aws
插件会从其配置文件中读取AWS秘密访问密钥ID和密钥。它还会将包含在其存储文件中的所有加密密钥读入其内存中的缓存。
在操作过程中,keyring_aws
将加密的密钥保留在内存高速缓存中,并将存储文件用作本地持久性存储。每个密钥环操作都是事务性的:keyring_aws
要么成功更改内存中密钥高速缓存和密钥环存储文件,要么操作失败,并且密钥环状态保持不变。
为确保仅在存在正确的密钥环存储文件时才刷新keyring_aws
密钥,请在文件中存储密钥环的SHA-256校验和。在更新文件之前,插件会验证它是否包含预期的校验和。
该keyring_aws
插件支持包含标准MySQL Keyring服务接口的功能。这些功能执行的密钥环操作可从两个级别访问:
- C接口:在C语言代码中,调用“密钥环服务”中所述的密钥环服务功能。
- SQL接口:在SQL语句中,调用“通用密钥环密钥管理功能”中所述的用户定义函数(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
,请参见“支持的密钥环密钥类型和长度”。
keyring_aws凭证更改
假设keyring_aws
插件在服务器启动时已正确初始化,则可以更改用于与AWS KMS通信的凭证:
- 使用AWS KMS创建新的秘密访问密钥ID和秘密访问密钥。
- 将新凭据存储在配置文件(由
keyring_aws_conf_file
系统变量命名的文件)中。文件格式如前所述。 重新初始化
keyring_aws
插件,以便它重新读取配置文件。假设新凭据有效,则插件应成功初始化。有两种方法可以重新初始化插件:
- 重新启动服务器。这比较简单并且没有副作用,但是不适用于要求服务器停机时间最少且重启次数尽可能少的安装。
通过执行以下语句重新初始化插件,而无需重新启动服务器(
.so
根据需要调整平台的后缀):UNINSTALL PLUGIN keyring_aws;INSTALL PLUGIN keyring_awsSONAME '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
选项外,还需要再次执行以注销插件。