• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 使用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通信的凭证,并将其写入配置文件:

    1. 创建一个AWS KMS账户。
    2. 使用AWS KMS创建秘密访问密钥ID和秘密访问密钥。访问密钥用于验证您的身份以及应用程序的身份。
    3. 使用AWS KMS帐户创建客户主密钥(CMK)ID。在MySQL启动时,将keyring_aws_cmk_id系统变量设置为CMK ID值。此变量是必需变量,没有默认值。(如果需要,可以在运行时更改其值SET GLOBAL。)
    4. 如有必要,创建配置文件所在的目录。该目录应具有限制性模式,并且只能由用于运行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为向服务器指示配置文件的位置。

    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服务器获得的顾客主密钥(CMK)的标识。的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_dat 
    

    为了使keyring_aws插件成功启动,配置文件必须存在并且包含有效的秘密访问密钥信息,该信息已如前所述进行了初始化。存储文件不需要存在。如果不是,则keyring_aws尝试创建它(以及它的父目录,如有必要)。

    有关用于配置keyring_aws插件的系统变量的更多信息,请参见“密钥环系统变量”。

    启动MySQL服务器并安装与keyring_aws插件关联的UDF 。这是一项一次性操作,通过执行以下语句来执行(.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_awsUDF的更多信息,请参见“特定于插件的密钥环密钥管理功能”。

    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通信的凭证:

    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 PLUGIN加号INSTALL PLUGIN序列以更改AWS KMS凭证,则要停止使用keyring_awsUNINSTALL PLUGIN除了删除该--early-plugin-load选项外,还需要再次执行以注销插件。