#### 6.4.4.9 使用密钥环\_aws 亚马逊网络服务密钥环插件

[](<>)[](<>)

笔记

这`密钥环_aws`plugin 是商业产品 MySQL 企业版中包含的扩展。要了解有关商业产品的更多信息，请参阅<https://www.mysql.com/products/>.

这`密钥环_aws`密钥环插件与 Amazon Web Services 密钥管理服务 (AWS KMS) 进行通信，作为密钥生成的后端，并使用本地文件进行密钥存储。所有密钥环材料都是由 AWS 服务器专门生成的，而不是由`密钥环_aws`.

MySQL企业版可以使用`密钥环_aws`在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Debian、Ubuntu、macOS 和 Windows 上。MySQL企业版不支持使用`密钥环_aws`在这些平台上：

-   EL6

-   通用 Linux (glibc2.12)

-   SLES 12（MySQL Server 5.7 之后的版本）

-   索拉里斯

    此处的讨论假设您熟悉 AWS，尤其是 KMS。一些相关的信息来源：

-   [AWS 站点](https://aws.amazon.com/kms/)

-   [知识管理系统文档](https://docs.aws.amazon.com/kms/)

    以下部分提供了以下部分的配置和使用信息`密钥环_aws`钥匙圈插件：

-   [钥匙圈\_aws 配置](keyring-aws-plugin.html#keyring-aws-plugin-configuration)

-   [钥匙圈\_aws 操作](keyring-aws-plugin.html#keyring-aws-plugin-operation)

-   [钥匙圈\_aws 凭证更改](keyring-aws-plugin.html#keyring-aws-plugin-credential-changes)

##### 钥匙圈\_aws 配置

安装`密钥环_aws`, 使用中的一般说明[第 6.4.4.3 节，“密钥环插件安装”](keyring-plugin-installation.html)，以及此处找到的特定于插件的配置信息。

插件库文件包含`密钥环_aws`插件和两个可加载函数，[`keyring_aws_rotate_cmk()`](keyring-functions-plugin-specific.html#function_keyring-aws-rotate-cmk)和[`keyring_aws_rotate_keys()`](keyring-functions-plugin-specific.html#function_keyring-aws-rotate-keys).

配置`密钥环_aws`，您必须获取一个秘密访问密钥，该密钥提供与 AWS KMS 通信的凭证并将其写入配置文件：

1.  创建一个 AWS KMS 账户。

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

3.  使用 AWS KMS 账户创建 KMS 密钥 ID。在 MySQL 启动时，设置[`keyring_aws_cmk_id`](keyring-system-variables.html#sysvar_keyring_aws_cmk_id)系统变量到 CMK ID 值。此变量是强制性的，没有默认值。（如果需要，它的值可以在运行时使用[`设置全球`](set-variable.html).)

4.  如有必要，创建配置文件所在的目录。该目录应具有限制模式，并且只能由用于运行 MySQL 服务器的帐户访问。例如，在 Unix 和类 Unix 系统上，使用`/usr/local/mysql/mysql-keyring/keyring_aws_conf`作为文件名，以下命令（执行为`根`) 创建其父目录并设置目录模式和所有权：

    ```
    $> cd /usr/local/mysql
    $> mkdir mysql-keyring
    $> chmod 750 mysql-keyring
    $> chown mysql mysql-keyring
    $> chgrp mysql mysql-keyring
    ```

    在 MySQL 启动时，设置[`keyring_aws_conf_file`](keyring-system-variables.html#sysvar_keyring_aws_conf_file)系统变量为`/usr/local/mysql/mysql-keyring/keyring_aws_conf`向服务器指示配置文件的位置。

5.  准备`密钥环_aws`配置文件，其中应包含两行：

    -   第 1 行：秘密访问密钥 ID

    -   第 2 行：秘密访问密钥

        例如，如果密钥 ID 是`wwwwwwwwwwwww示例`关键是`xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY`，配置文件如下所示：

        ```
        wwwwwwwwwwwwwEXAMPLE
        xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
        ```

    要在服务器启动过程中可用，`密钥环_aws`必须使用[`--early-plugin-load`](server-options.html#option_mysqld_early-plugin-load)选项。这[`keyring_aws_cmk_id`](keyring-system-variables.html#sysvar_keyring_aws_cmk_id)系统变量是必需的，用于配置从 AWS KMS 服务器获取的 KMS 密钥 ID。这[`keyring_aws_conf_file`](keyring-system-variables.html#sysvar_keyring_aws_conf_file)和[`keyring_aws_data_file`](keyring-system-variables.html#sysvar_keyring_aws_data_file)系统变量可以选择配置文件使用的位置`密钥环_aws`用于配置信息和数据存储的插件。文件位置变量默认值是平台特定的。要显式配置位置，请在启动时设置变量值。例如，在服务器中使用这些行`我的.cnf`文件，调整`。所以`必要时为您的平台添加后缀和文件位置：


```
[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
```

为了`密钥环_aws`插件要成功启动，配置文件必须存在并包含有效的秘密访问密钥信息，如前所述初始化。存储文件不必存在。如果没有，`密钥环_aws`尝试创建它（以及它的父目录，如有必要）。

有关用于配置的系统变量的更多信息`密钥环_aws`插件，见[第 6.4.4.18 节，“密钥环系统变量”](keyring-system-variables.html).

启动 MySQL 服务器并安装与`密钥环_aws`插入。这是一次性操作，通过执行以下语句来执行，调整`。所以`根据需要为您的平台添加后缀：

```
CREATE FUNCTION keyring_aws_rotate_cmk RETURNS INTEGER
  SONAME 'keyring_aws.so';
CREATE FUNCTION keyring_aws_rotate_keys RETURNS INTEGER
  SONAME 'keyring_aws.so';
```

有关更多信息`密钥环_aws`功能，见[第 6.4.4.15 节，“插件特定的密钥环密钥管理功能”](keyring-functions-plugin-specific.html).

##### 钥匙圈\_aws 操作

在插件启动时，`密钥环_aws`插件从其配置文件中读取 AWS 秘密访问密钥 ID 和密钥。它还将其存储文件中包含的任何加密密钥读取到其内存缓存中。

操作过程中，`密钥环_aws`在内存缓存中维护加密密钥，并将存储文件用作本地持久存储。每个密钥环操作都是事务性的：`密钥环_aws`要么成功更改内存中的密钥缓存和密钥环存储文件，要么操作失败并且密钥环状态保持不变。

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

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

-   SQL接口：在SQL语句中，调用中描述的函数[第 6.4.4.14 节，“通用密钥环密钥管理功能”](keyring-functions-general-purpose.html).

-   C接口：在C语言代码中，调用描述的keyring服务函数[第 5.6.9.2 节，“密钥环服务”](keyring-service.html).

    示例（使用 SQL 接口）：


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

除此之外[`keyring_aws_rotate_cmk()`](keyring-functions-plugin-specific.html#function_keyring-aws-rotate-cmk)和[`keyring_aws_rotate_keys()`](keyring-functions-plugin-specific.html#function_keyring-aws-rotate-keys)功能“扩展”密钥环插件接口以提供标准密钥环服务接口未涵盖的 AWS 相关功能。这些功能只能通过使用 SQL 调用这些函数来访问。没有对应的C语言键服务功能。

有关允许的键值特征的信息`密钥环_aws`， 看[第 6.4.4.12 节，“支持的密钥环密钥类型和长度”](keyring-key-types.html).

##### 钥匙圈\_aws 凭证更改

假设`密钥环_aws`插件在服务器启动时已正确初始化，可以更改用于与 AWS KMS 通信的凭证：

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

2.  将新凭据存储在配置文件中（由[`keyring_aws_conf_file`](keyring-system-variables.html#sysvar_keyring_aws_conf_file)系统变量）。文件格式如前所述。

3.  重新初始化`密钥环_aws`插件，以便它重新读取配置文件。假设新凭据有效，插件应该成功初始化。

    有两种方法可以重新初始化插件：

    -   重新启动服务器。这更简单并且没有副作用，但不适合需要最少的服务器停机时间和尽可能少的重启的安装。

    -   通过执行以下语句重新初始化插件而不重新启动服务器，调整`。所以`根据需要为您的平台添加后缀：

        ```
        UNINSTALL PLUGIN keyring_aws;
        INSTALL PLUGIN keyring_aws SONAME 'keyring_aws.so';
        ```

        笔记

        除了在运行时加载插件，[`安装插件`](install-plugin.html)具有将插件注册到的副作用`mysql.plugin`系统表。因此，如果您决定停止使用`密钥环_aws`, 删除是不够的[`--early-plugin-load`](server-options.html#option_mysqld_early-plugin-load)用于启动服务器的选项集中的选项。这会阻止插件提前加载，但是当服务器到达启动序列中它加载注册插件的点时，它仍会尝试加载它`mysql.plugin`.

        因此，如果您执行[`卸载插件`](uninstall-plugin.html)加[`安装插件`](install-plugin.html)刚刚描述的顺序更改 AWS KMS 凭证，然后停止使用`密钥环_aws`, 需要执行[`卸载插件`](uninstall-plugin.html)再次取消注册插件除了删除[`--early-plugin-load`](server-options.html#option_mysqld_early-plugin-load)选项。
