的keyring_hashicorp
plugin是MySQL企业版的一个扩展,它是一个商业产品。要了解更多关于商业产品的信息,请参见https://www.10bet靠谱mysql.com/products/.
的keyring_hashicorp
keyring插件与HashiCorp Vault通信后端存储。该插件支持HashiCorp Vault AppRole认证。MySQL服务器本地存储中没有永久存储任何关键信息。(可选的内存中键缓存可以用作中间存储。)随机密钥生成在MySQL服务器端执行,密钥随后存储到Hashicorp Vault中。
的keyring_hashicorp
插件支持包含标准MySQL Keyring服务接口的函数。由这些函数执行的密匙环操作可在两个级别访问:
SQL接口:在SQL语句中调用中描述的用户定义函数(udf)第6.4.14节“通用密钥环密钥管理功能”.
C接口:在C语言代码中调用keyring服务函数密匙环服务.
使用udf(示例):
SELECT keyring_key_generate('MyKey', 'AES', 32);选择keyring_key_remove(“MyKey”);
所允许的键值的特征的信息keyring_hashicorp
,请参阅第6.4.12节“支持的Keyring密钥类型和长度”.
安装keyring_hashicorp
,使用在第6.4.3节“密匙环插件安装”,以及特定的配置信息keyring_hashicorp
在这里找到。特定于插件的配置包括准备连接到HashiCorp Vault所需的证书和密钥文件,以及配置HashiCorp Vault本身。以下部分提供了必要的说明。
的keyring_hashicorp
插件需要一个到HashiCorp Vault服务器的安全连接,使用HTTPS协议。典型的设置包括一组证书和密钥文件:
company.crt
:属于该组织的自定义CA证书。HashiCorp Vault服务器和keyring_hashicorp
插件。vault.key
: HashiCorp Vault服务器实例的私钥。此文件由HashiCorp Vault服务器使用。vault.crt
: HashiCorp Vault服务器实例的证书。该文件必须由组织CA证书签名。
下面说明如何使用OpenSSL创建证书和密钥文件。(如果您已经有了这些文件,请继续HashiCorp库设置)。所示的说明适用于Linux平台,可能需要对其他平台进行调整。
由这些指令生成的证书是自签名的,这可能不是很安全。在获得使用这些文件的经验后,考虑从已注册的证书颁发机构获取证书/密钥材料。
准备公司和HashiCorp Vault服务器密钥。
使用以下命令生成密钥文件:
Openssl genrsa -aes256 -out公司。密钥4096 openssl genrsa -aes256 -out vault。关键的2048
这些命令生成包含公司私钥(
company.key
)及Vault服务器私钥(vault.key
).密钥是随机生成的RSA密钥,分别为4096位和2048位。每个命令都提示输入密码。出于测试目的,不需要密码。要禁用它,请省略
aes256
论点。关键文件包含敏感信息,应存放在安全的地方。密码(也很敏感)稍后会用到,所以把它写下来并存储在一个安全的位置。
(可选)检查密钥文件内容和有效性的命令如下:
Openssl rsa -in公司。键—openssl rsa -in vault.key -check
创建公司CA证书。
使用实例创建公司CA证书文件,文件名为
company.crt
有效期为365天(在单行输入命令):Openssl req -x509 -new -nodes -key company.使用实例Key -sha256 -days 365 -out company.crt
如果你使用
aes256
参数在生成密钥时执行密钥加密,则在创建CA证书时,会提示您输入公司密钥密码。还会提示您输入证书持有人(即您或您的公司)的信息,如下所示:国家名称(2个字母代码)[AU]:州或省名称(全名)[Some-State]:地区名称(如城市)[]:组织名称(如公司)[Internet Widgits Pty Ltd]:组织单位名称(如部门)[]:通用名称(如服务器FQDN或您的名称)[]:电子邮件地址[]:
用适当的值回答提示。
创建证书签名请求。
要创建HashiCorp Vault服务器证书,必须为新创建的服务器密钥准备一个证书签名请求(CSR)。创建一个名为
request.conf
包含以下行。如果HashiCorp Vault服务器没有在本地主机上运行,请替换适当的CN和IP值,并进行所需的任何其他更改。[req] distinguished_name = vault x509_tenensions = v3_req prompt = no [vault] C = US ST = CA L = RWC O = Company CN = 127.0.0.1 [v3_req] subjectAltName = @alternatives authorityKeyIdentifier = keyid,issuer basicConstraints = CA:TRUE [alternatives] IP = 127.0.0.1
使用此命令创建签名请求:
Openssl req -new -key vault。Key -config request.conf out request.csr
输出文件(
request.csr
)是一个中间文件,作为创建服务器证书的输入。制作HashiCorp Vault服务器证书。
在HashiCorp Vault服务器密钥(
vault.key
)及CSR (request.csr
)连同公司证明书(company.crt
)以创建HashiCorp Vault服务器证书(vault.crt
).使用以下命令(在单行中输入命令):Openssl x509 -req -in请求。csr ca公司。crt凝固了的公司。key - cacreatesial out vault。CRT -days 365 -sha256
为了使
vault.crt
服务器证书有用,附加的内容company.crt
公司证明给它。这是必需的,以便在请求中与服务器证书一起传递公司证书。猫的公司。crt > > vault.crt
的内容
vault.crt
文件,它应该是这样的:——开始证书……HashiCorp Vault服务器证书的内容...——结束证书 ----- ----- 证书,开始吧……公司证明内容...——结束证书
下面的说明描述如何创建HashiCorp Vault设置,以方便测试keyring_hashicorp
插件。
测试设置类似于生产设置,但是HashiCorp Vault的生产使用需要额外的安全考虑,例如使用非自签名证书和将公司证书存储在系统信任存储库中。您必须实现任何额外的安全步骤,以满足您的操作需求。
中的创建的证书和密钥文件的可用性证书和密钥准备.如果没有这些文件,请参阅该部分。
获取HashiCorp Vault二进制文件。
下载适合您平台的HashiCorp Vault二进制文件https://www.vaultproject.io/10bet手机中文版downloads.html.
提取存档的内容以生成可执行文件库命令,该命令用于执行HashiCorp Vault操作。如果需要,请将安装命令的目录添加到系统路径中。
(可选)HashiCorp Vault支持自动完成选项,使它更容易使用。有关更多信息,请参见https://learn.hashicorp.com/vault/getting-started/install#command-completion.
创建HashiCorp Vault服务器配置文件。
准备一个名为
config.hcl
有以下内容。为tls_cert_file
,tls_key_file
,路径
值,替换适合您的系统的路径名。监听器"tcp" {address="127.0.0.1:8200" tls_cert_file="/home/username/certificates/vault. txt "crt " tls_key_file = " / home /用户名/证书/库。Key "}存储"文件" {path = "/home/username/vaultstorage/storage"} UI = true
启动HashiCorp Vault服务器。
要启动Vault服务器,使用以下命令,其中
配置
选项指定刚刚创建的配置文件的路径:库服务器配置= config.hcl
在此步骤中,系统可能会提示您输入存储在
vault.key
文件。服务器应该启动,并在控制台上显示一些信息(IP、端口等)。
以便您可以输入其余的命令,请输入库服务器在后台执行命令,或在继续之前打开另一个终端。
初始化HashiCorp Vault服务器。
请注意仅在第一次启动Vault时需要执行本步骤,以获取unseal密钥和根令牌。后续的Vault实例重新启动只需要使用unseal键解封。
发出以下命令(假设Bourne shell语法):
export VAULT_SKIP_VERIFY=1 vault operator init -n 1 -t 1
第一个命令启用库命令暂时忽略未向系统信任存储区添加公司证书的事实。它弥补了我们的自签名CA没有添加到该存储的事实。(对于生产使用,需要添加这样的证书。)
第二个命令创建一个单独的打开键,并要求提供一个单独的打开键来进行打开。(对于生产使用,一个实例将有多个打开键,需要输入的打开键多达这个数目。开封后的钥匙应交付给公司内部的钥匙管理员。使用单一密钥可能会被认为是一个安全问题,因为这允许金库由单一密钥保管人打开。)
Vault应该回复关于解封键和根令牌的信息,加上一些额外的文本(实际的解封键和根令牌值与这里显示的不同):
...打开密钥1:I2xwcFQc892O0Nt2pBiRNlnkHzTUrWS+JybL39BjcOE=初始根令牌:s.vTvXeo3tPEYehfcd9WH7oUKz…
将解封密钥和根令牌存储在安全的位置。
解除HashiCorp Vault服务器的密封。
使用此命令解锁Vault服务器:
库操作符开封
当提示输入unseal密钥时,使用之前在Vault初始化过程中获得的密钥。
保险库应该产生输出,表明设置已完成,保险库已打开密封。
登录HashiCorp Vault服务器,检查其状态。
准备以root身份登录所需的环境变量:
库登录s.vTvXeo3tPEYehfcd9WH7oUKz
对于该命令中的令牌值,替换之前在Vault初始化过程中获得的根令牌的内容。
检查Vault服务器状态:
库状态
输出应该包含以下行(其中包括其他行):
...初始化true密封false…
设置HashiCorp Vault认证和存储。
请注意只有在第一次运行Vault实例时才需要执行此步骤中描述的操作。之后不需要重复。
启用AppRole身份验证方法,并确认它在身份验证方法列表中:
保险库认证启用许可保险库认证列表
启用Vault KeyValue存储引擎:
保险库机密启用-version=1 kv
创建并设置一个角色,以便与
keyring_hashicorp
插件(在单行输入命令):Vault write auth/approle/role/mysql token_num_uses=0 token_ttl=20m token_max_ttl=30m secret_id_num_uses=0
添加AppRole安全策略。
请注意只有在第一次运行Vault实例时才需要执行此步骤中描述的操作。之后不需要重复。
准备一个策略,允许之前创建的角色访问适当的秘密。创建一个名为
mysql.hcl
内容如下:路径"kv/mysql/*" {capabilities = ["create", "read", "update", "delete", "list"]}
请注意kv / mysql /
在本例中,可能需要根据本地安装策略和安全需求进行调整。如果是,在其他地方做同样的调整kv / mysql /
出现在这些说明中。将策略文件导入Vault服务器,创建名为
mysql-policy
,然后将策略分配给新角色:数据库策略写入mysql-policy mysql。HCL vault write auth/approle/role/mysql policies=mysql-policy
获取新创建角色的ID,并将其存储在安全的位置:
库读取认证/ / mysql / role-id approle /作用
为角色生成一个秘密ID,并将其存储在一个安全的位置:
Vault write -f auth/approle/role/mysql/secret-id
在生成这些AppRole角色ID和秘密ID凭据之后,它们将无限期地保持有效。它们不需要重新生成
keyring_hashicorp
插件可以配置它们在一个持续的基础上使用。有关AuthRole身份验证的更多信息,请访问https://www.vaultproject.io/docs/auth/approle.html.
插件库文件包含keyring_hashicorp
插件和用户定义函数(UDF),keyring_hashicorp_update_config ()
.当插件初始化和终止时,它会自动加载和卸载UDF。不需要手动加载和卸载UDF。
的keyring_hashicorp
插件支持的配置参数如下表所示。要指定这些参数,请为相应的系统变量赋值。
配置参数 | 系统变量 | 强制性的 |
---|---|---|
HashiCorp服务器URL | keyring_hashicorp_server_url |
没有 |
AppRole角色ID | keyring_hashicorp_role_id |
是的 |
AppRole秘密ID | keyring_hashicorp_secret_id |
是的 |
存储路径 | keyring_hashicorp_store_path |
是的 |
授权路径 | keyring_hashicorp_auth_path |
没有 |
CA证书文件路径 | keyring_hashicorp_ca_path |
没有 |
缓存控制 | keyring_hashicorp_caching |
没有 |
为了在服务器启动过程中可用,keyring_hashicorp
必须使用——early-plugin-load
选择。如上表所示,几个与插件相关的系统变量是必需的,也必须设置。例如,在服务器中使用这些行my.cnf
文件,调整所以
根据需要为平台添加后缀和文件位置:
(mysqld) early-plugin-load = keyring_hashicorp。因此keyring_hashicorp_role_id='ee3b495c-d0c9-11e9-8881-8444c71c32aa' keyring_hashicorp_secret_id='0512af29-d0ca-11e9-95ee-0010e00dd718' keyring_hashicorp_store_path='/v1/kv/mysql' keyring_hashicorp_auth_path='/v1/auth/approle/login'
根据HashiCorp文10bet官方网站档,所有的API路由都以协议版本作为前缀(在前面的例子中可以看到为/ v1 /
在keyring_hashicorp_store_path
而且keyring_hashicorp_auth_path
值)。如果HashiCorp开发了新的协议版本,可能需要进行更改/ v1 /
到配置中的其他东西。
MySQL服务器使用AppRole认证对HashiCorp Vault进行身份验证。成功的身份验证需要向Vault提供两个秘密,一个角色ID和一个秘密ID,它们在概念上类似于用户名和密码。要使用的角色ID和秘密ID值是在前面执行的HashiCorp Vault设置过程中获得的值。要指定这两个id,请将它们各自的值分配给keyring_hashicorp_role_id
而且keyring_hashicorp_secret_id
系统变量。设置过程还会生成一个存储路径/ v1 / kv / mysql
,这是要赋值的值keyring_hashicorp_commit_store_path
.
在插件初始化时,keyring_hashicorp
尝试使用配置值连接到HashiCorp Vault服务器。如果连接成功,插件将在具有的相应系统变量中存储值_commit_
在他们的名字。例如,在成功连接之后,插件存储的值keyring_hashicorp_role_id
而且keyring_hashicorp_store_path
在keyring_hashicorp_commit_role_id
而且keyring_hashicorp_commit_store_path
.
的帮助下可以执行运行时的重新配置keyring_hashicorp_update_config ()
UDF:
使用
集
语句将所需的新值赋给上表中所示的配置系统变量。这些赋值本身对正在进行的插件操作没有影响。调用
keyring_hashicorp_update_config ()
使插件重新配置并使用新的变量值重新连接到HashiCorp Vault服务器。如果连接成功,插件将更新的配置值存储在具有
_commit_
在他们的名字。
例如,如果您已经重新配置HashiCorp Vault,使其监听端口8201而不是默认的8200,则需要重新配置keyring_hashicorp
是这样的:
SET GLOBAL keyring_hashicorp_server_url = 'https://127.0.0.1:8201';查询OK, 0 rows affected (0.00 sec) mysql> SELECT keyring_hashicorp_update_config();+--------------------------------------+ | keyring_hashicorp_update_config () | +--------------------------------------+ | 配置更新成功。| +--------------------------------------+ 1行集(0.03秒)
如果插件在初始化或重新配置期间无法连接到HashiCorp Vault,并且没有现有的连接,则_commit_
系统变量设置为没有提交的
对于字符串值的变量,和从
Boolean-valued变量。如果插件无法连接,但存在现有的连接,则该连接保持活动状态_commit_
变量反映用于它的值。
如果在服务器启动时没有设置强制系统变量,或者出现其他插件初始化错误,初始化会失败。在这种情况下,您可以使用运行时重新配置过程来初始化插件,而无需重新启动服务器。
有关的更多信息keyring_hashicorp
特定于插件的系统变量和UDF,参见第6.4.18节,“密匙环系统变量”,第6.4.15节“特定于插件的密钥环密钥管理功能”.