文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用 keyring_aws Amazon Web Services 密钥环插件

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

注意

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 配置

要安装 keyring_aws,请使用 第 8.4.4.3 节,“密钥环插件安装” 中找到的一般说明,以及此处找到的特定于插件的配置信息。

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

要配置 keyring_aws,您必须获取一个用于与 AWS KMS 通信的秘密访问密钥,并将该密钥写入配置文件

  1. 创建 AWS KMS 帐户。

  2. 使用 AWS KMS 创建秘密访问密钥 ID 和秘密访问密钥。访问密钥用于验证您和您的应用程序的身份。

  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 系统变量”

启动 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 操作

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

在操作期间,keyring_aws 将加密密钥保存在内存中缓存中,并将存储文件用作本地持久存储。 每个密钥环操作都是事务性的:keyring_aws 要么成功更改内存中的密钥缓存和密钥环存储文件,要么操作失败,密钥环状态保持不变。

为了确保密钥仅在正确的密钥环存储文件存在时才被刷新,keyring_aws 将密钥环的 SHA-256 校验和存储在文件中。 在更新文件之前,插件会验证它是否包含预期的校验和。

keyring_aws 插件支持构成标准 MySQL Keyring 服务接口的函数。 这些函数执行的密钥环操作可以在两个级别访问

示例(使用 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 凭据更改

假设 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';
      注意

      除了在运行时加载插件外,INSTALL PLUGIN 还有在 mysql.plugin 系统表中注册插件的副作用。 因此,如果您决定停止使用 keyring_aws,仅仅从用于启动服务器的一组选项中删除 --early-plugin-load 选项是不够的。 这会阻止插件过早加载,但服务器在启动序列中加载 mysql.plugin 中注册的插件时仍然会尝试加载它。

      因此,如果您执行上面描述的 UNINSTALL PLUGININSTALL PLUGIN 序列来更改 AWS KMS 凭据,然后停止使用 keyring_aws,则除了删除 --early-plugin-load 选项之外,还需要再次执行 UNINSTALL PLUGIN 以取消注册插件。