Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Using the keyring_aws Amazon Web Services Keyring Plugin

8.4.4.7 使用 Amazon Web Services 密钥环插件 keyring_aws

Note

keyring_aws 插件是 MySQL Enterprise Edition 的扩展,一个商业产品。要了解更多关于商业产品,请访问https://www.mysql.com/products/

keyring_aws 密钥环插件将与 Amazon Web Services Key Management Service (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

  • Generic Linux (glibc2.12)

  • SLES 12(与 MySQL Server 5.7 及更高版本)

  • Solaris

本讨论假设您熟悉 AWS 和 KMS。以下是一些相关信息来源:

以下部分提供了 keyring_aws 密钥环插件的配置和使用信息:

要安装keyring_aws,请按照第8.4.4.3节,“Keyring Plugin Installation”中的一般说明,并将这里找到的一些插件特定的配置信息一起使用。

插件库文件包含keyring_aws插件和两个可加载函数:keyring_aws_rotate_cmk()keyring_aws_rotate_keys()

要配置keyring_aws,您需要获取一个提供AWS KMS通信凭证的秘密访问密钥,并将其写入到配置文件中:

  1. 创建AWS KMS账户。

  2. 使用AWS KMS创建secret access key ID和secret access key。access key用来验证您的身份和应用程序的身份。

  3. 使用AWS KMS账户创建KMS密钥ID。在MySQL启动时,设置keyring_aws_cmk_id系统变量为CMK ID值。这是一个必需的变量,没有默认值。 (如果需要,可以在运行时使用SET GLOBAL更改其值。)

  4. 如果必要,创建配置文件所在目录。该目录应该具有限制性模式,并且只能被用来运行 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,以指示服务器配置文件的位置。

  5. 准备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_filekeyring_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 System Variables”

启动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节,“插件特定密钥-ring密钥管理函数”

插件启动时,keyring_aws插件从其配置文件中读取AWS秘密访问密钥ID和密钥,并从存储文件中读取任何加密的密钥,并将它们加载到内存缓存中。

在操作过程中,keyring_aws插件维护内存缓存中的加密密钥,并使用存储文件作为本地持久存储。每个密钥-ring操作都是事务性的:keyring_aws插件要么成功更改内存密钥缓存和密钥-ring存储文件,要么操作失败,密钥-ring状态保持不变。

为了确保只有在正确的密钥-ring存储文件存在时才flush密钥,keyring_aws插件将密钥-ring的SHA-256校验和存储到文件中。在更新文件之前,插件将验证它是否包含预期的校验和。

keyring_aws插件支持标准MySQL Keyring服务接口中的函数。密钥-ring操作由这些函数执行,可以在两个级别上访问:

示例(使用SQL接口):

SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');

此外,keyring_aws_rotate_cmk()keyring_aws_rotate_keys()函数扩展密钥ring插件接口,以提供AWS相关功能,不受标准密钥ring服务接口的覆盖。这些功能只能通过使用SQL来调用,这些函数没有相应的C语言密钥服务函数。

有关keyring_aws密钥值的特性,请见第8.4.4.10节,“支持的Keyring密钥类型和长度”

假设keyring_aws插件在服务器启动时正确初始化,可以更改与AWS KMS通信的凭证:

  1. 使用AWS KMS创建新的秘密访问密钥ID和秘密访问密钥。

  2. 将新的凭证存储在配置文件中(由keyring_aws_conf_file系统变量指定的文件)。文件格式如前所述。

  3. 重新初始化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选项从服务器启动时的选项集中删除是不够的。这停止了插件的早期加载,但服务器仍然尝试在加载mysql.plugin表中的插件时加载它。

      因此,如果您执行刚才描述的UNINSTALL PLUGININSTALL PLUGIN序列来更改AWS KMS凭证,那么要停止使用keyring_aws,需要再次执行UNINSTALL PLUGIN以卸载插件,并且删除--early-plugin-load选项。