keyring_aws
插件是 MySQL 企业版(商业产品)中包含的扩展。要了解有关商业产品的更多信息,请参阅 https://www.mysqlserver.cn/products/.
keyring_aws
密钥环插件与 Amazon Web Services 密钥管理服务 (AWS KMS) 通信,作为密钥生成的后端,并使用本地文件存储密钥。所有密钥环材料均由 AWS 服务器生成,而不是由 keyring_aws
生成。
MySQL 企业版可以在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Debian、Ubuntu、macOS 和 Windows 上与 keyring_aws
一起使用。MySQL 企业版不支持在以下平台上使用 keyring_aws
EL6
通用 Linux (glibc2.12)
SLES 12(在 MySQL 服务器 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 系统上,要使用
/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
插件的系统变量的更多信息,请参见 第 8.4.4.16 节,“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.13 节,“特定于插件的 Keyring 密钥管理函数”。
在插件启动时,keyring_aws
插件从其配置文件中读取 AWS 秘密访问密钥 ID 和密钥。 它还将其存储文件中的任何加密密钥读入其内存中缓存。
在操作期间,keyring_aws
将加密密钥保存在内存中缓存中,并将存储文件用作本地持久存储。 每个密钥环操作都是事务性的:keyring_aws
要么成功更改内存中的密钥缓存和密钥环存储文件,要么操作失败,密钥环状态保持不变。
为了确保密钥仅在正确的密钥环存储文件存在时才被刷新,keyring_aws
将密钥环的 SHA-256 校验和存储在文件中。 在更新文件之前,插件会验证它是否包含预期的校验和。
keyring_aws
插件支持构成标准 MySQL Keyring 服务接口的函数。 这些函数执行的密钥环操作可以在两个级别访问
SQL 接口:在 SQL 语句中,调用 第 8.4.4.12 节,“通用密钥环密钥管理函数” 中描述的函数。
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.10 节,“支持的密钥环密钥类型和长度”。
假设 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
,则除了删除--early-plugin-load
选项之外,还需要再次执行UNINSTALL PLUGIN
以取消注册插件。