MySQL8 中文参考(二十九)(3)https://developer.aliyun.com/article/1566124
keyring_hashicorp 配置
插件库文件包含keyring_hashicorp
插件和一个可加载的函数,keyring_hashicorp_update_config()
。当插件初始化和终止时,它会自动加载和卸载该函数。无需手动加载和卸载该函数。
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 |
否 |
为了在服务器启动过程中可用,必须使用--early-plugin-load
选项加载keyring_hashicorp
。如前表所示,还必须设置几个与插件相关的系统变量。例如,在服务器的my.cnf
文件中使用以下行,根据需要调整.so
后缀和文件位置:
[mysqld] early-plugin-load=keyring_hashicorp.so 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 文档,所有 API 路由都以协议版本为前缀(在前面的示例中可以看到为/v1/
,在keyring_hashicorp_store_path
和keyring_hashicorp_auth_path
的值中)。如果 HashiCorp 开发新的协议版本,可能需要在配置中将/v1/
更改为其他内容。
MySQL 服务器使用 AppRole 身份验证对 HashiCorp Vault 进行身份验证。成功的身份验证需要向 Vault 提供两个秘密,一个角色 ID 和一个秘密 ID,类似于用户名和密码的概念。要指定这两个 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()
函数在运行时重新配置:
- 使用
SET
语句将所需的新值分配给前表中显示的配置系统变量。这些分配本身对正在进行的插件操作没有影响。 - 调用
keyring_hashicorp_update_config()
函数会导致插件重新配置并使用新的变量值重新连接到 HashiCorp Vault 服务器。 - 如果连接成功,插件会将更新后的配置数值存储在相应的系统变量中,这些变量的名称中包含
_commit_
。
例如,如果已将 HashiCorp Vault 重新配置为监听端口 8201 而不是默认的 8200,则像这样重新配置keyring_hashicorp
:
mysql> SET GLOBAL keyring_hashicorp_server_url = 'https://127.0.0.1:8201'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT keyring_hashicorp_update_config(); +--------------------------------------+ | keyring_hashicorp_update_config() | +--------------------------------------+ | Configuration update was successful. | +--------------------------------------+ 1 row in set (0.03 sec)
如果插件在初始化或重新配置期间无法连接到 HashiCorp Vault,并且没有现有连接,则对于字符串值变量,_commit_
系统变量将设置为'Not committed'
,对于布尔值变量,将设置为OFF
。如果插件无法连接但存在现有连接,则该连接保持活动状态,并且_commit_
变量反映用于它的值。
注意
如果在服务器启动时未设置必需的系统变量,或者发生其他插件初始化错误,初始化将失败。在这种情况下,您可以使用运行时重新配置过程来初始化插件,而无需重新启动服务器。
有关keyring_hashicorp
插件特定系统变量和功能的其他信息,请参见 Section 8.4.4.19, “Keyring System Variables”和 Section 8.4.4.16, “Plugin-Specific Keyring Key-Management Functions”。
原文:
dev.mysql.com/doc/refman/8.0/en/keyring-oci-component.html
8.4.4.11 使用 Oracle Cloud Infrastructure Vault 密钥环组件
注意
Oracle Cloud Infrastructure Vault 密钥环组件包含在 MySQL Enterprise Edition 中,这是一个商业产品。要了解更多关于商业产品的信息,请参见 www.mysql.com/products/
。
component_keyring_oci
是与 Oracle Cloud Infrastructure Vault 进行后端存储通信的组件基础设施的一部分。没有任何密钥信息永久存储在 MySQL 服务器本地存储中。所有密钥都存储在 Oracle Cloud Infrastructure Vault 中,使得这个组件非常适合 Oracle Cloud Infrastructure MySQL 客户管理他们的 MySQL Enterprise Edition 密钥。
在 MySQL 8.0.24 中,MySQL Keyring 开始从插件过渡到使用组件基础设施。MySQL 8.0.31 中引入的 component_keyring_oci
是这一努力的延续。有关更多信息,请参见 密钥环组件与密钥环插件。
注意
一次只能启用一个密钥环组件或插件。启用多个密钥环组件或插件是不受支持的,结果可能不如预期。
要使用 component_keyring_oci
进行密钥库管理,您必须:
- 编写一个清单,告诉服务器加载
component_keyring_oci
,如 Section 8.4.4.2, “密钥环组件安装” 中所述。 - 编写一个
component_keyring_oci
的配置文件,如此处所述。
在编写清单和配置文件之后,只要您指定相同的配置选项集来初始化密钥环组件,您就应该能够访问使用 keyring_oci
插件创建的密钥。component_keyring_oci
的内置向后兼容性简化了从密钥环插件迁移到组件的过程。
- 配置注意事项
- 验证组件安装
- Vault 密钥环组件使用
配置注意事项
当初始化时,component_keyring_oci
会读取全局配置文件,或者全局配置文件与本地配置文件配对:
- 该组件尝试从安装组件库文件的目录(即服务器插件目录)读取其全局配置文件。
- 如果全局配置文件指示使用本地配置文件,则组件将尝试从数据目录读取其本地配置文件。
- 尽管全局和本地配置文件位于不同的目录中,但文件名在两个位置都是
component_keyring_oci.cnf
。 - 如果不存在配置文件,则会出现错误。没有有效配置时,
component_keyring_oci
无法初始化。
本地配置文件允许设置多个服务器实例以使用 component_keyring_oci
,因此每个服务器实例的组件配置特定于给定的数据目录实例。这使得可以为每个实例使用不同的 Oracle Cloud Infrastructure 保险库来使用相同的密钥环组件。
假设您熟悉 Oracle Cloud Infrastructure 概念,但在设置资源以供 component_keyring_oci
使用时,以下文档可能会有所帮助:
component_keyring_oci
配置文件具有以下属性:
- 配置文件必须采用有效的 JSON 格式。
- 配置文件允许这些配置项:
"read_local_config"
:此项仅允许在全局配置文件中。如果该项不存在,则组件仅使用全局配置文件。如果该项存在,则其值为true
或false
,表示组件是否应从本地配置文件中读取配置信息。如果全局配置文件中同时存在"read_local_config"
项和其他项,则组件首先检查"read_local_config"
项的值:
- 如果值为
false
,组件将处理全局配置文件中的其他项,并忽略本地配置文件。 - 如果值为
true
,组件将忽略全局配置文件中的其他项,并尝试读取本地配置文件。
“user”
:component_keyring_oci
用于连接的 Oracle Cloud Infrastructure 用户的 OCID。在使用component_keyring_oci
之前,用户帐户必须存在并被授予访问权限以使用配置的 Oracle Cloud Infrastructure 租户、区段和保险库资源。要从控制台获取用户 OCID,请使用 所需密钥和 OCID 中的说明。
此值为必填项。“tenancy”
: Oracle Cloud Infrastructure 租户的 OCID,component_keyring_oci
用作 MySQL 区域的位置。在使用component_keyring_oci
之前,如果租户不存在,则必须创建一个租户。要从控制台获取租户 OCID,请使用必需的密钥和 OCID中的说明。
此值为必填项。“compartment”
: 租户区域的 OCID,component_keyring_oci
用作 MySQL 密钥的位置。在使用component_keyring_oci
之前,如果 MySQL 区域或子区域不存在,则必须创建一个。此区域不应包含保险库密钥或保险库机密。它不应被除 MySQL Keyring 之外的系统使用。有关管理区域和获取 OCID 的信息,请参阅管理区域。
此值为必填项。“virtual_vault”
: Oracle Cloud Infrastructure Vault 的 OCID,component_keyring_oci
用于加密操作。在使用component_keyring_oci
之前,如果 MySQL 区域不存在,则必须在 MySQL 区域中创建一个新的保险库。(或者,您可以重用位于 MySQL 区域的父区域中的现有保险库。)区域用户只能看到并使用其各自区域中的密钥。有关创建保险库和获取保险库 OCID 的信息,请参阅管理保险库。
此值为必填项。“encryption_endpoint”
: Oracle Cloud Infrastructure 加密服务器的端点,component_keyring_oci
用于为新密钥生成加密或编码信息(密文)。加密端点是与保险库相关的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。"management_endpoint"
: Oracle Cloud Infrastructure 密钥管理服务器的端点,component_keyring_oci
用于列出现有密钥的端点。密钥管理端点是与保险库相关的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。“vaults_endpoint”
: Oracle Cloud Infrastructure 保险库服务器的终端点,component_keyring_oci
用于获取秘密的值。保险库终端点是特定于保险库的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取终端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。“secrets_endpoint”
: Oracle Cloud Infrastructure 秘密服务器的终端点,component_keyring_oci
用于列出、创建和撤销秘密。秘密终端点是特定于保险库的,Oracle Cloud Infrastructure 在创建保险库时分配它。要获取终端点 OCID,请查看您的 keyring_oci 保险库的配置详细信息,使用管理保险库中的说明。
此值为必填项。“master_key”
: Oracle Cloud Infrastructure 主加密密钥的 OCID,component_keyring_oci
用于加密秘密。在使用component_keyring_oci
之前,如果不存在,您必须为 Oracle Cloud Infrastructure 区段创建一个加密密钥。为生成的密钥提供一个特定于 MySQL 的名称,并且不要将其用于其他目的。有关密钥创建的信息,请参阅管理密钥。
此值为必填项。“key_file”
: 包含 RSA 私钥的文件路径名,component_keyring_oci
用于 Oracle Cloud Infrastructure 身份验证。您还必须使用控制台上传相应的 RSA 公钥。控制台显示密钥指纹值,您可以使用它来设置"key_fingerprint"
值。有关生成和上传 API 密钥的信息,请参阅必需的密钥和 OCIDs。
此值为必填项。“key_fingerprint”
: RSA 私钥的指纹,component_keyring_oci
用于 Oracle Cloud Infrastructure 身份验证。在创建 API 密钥时获取密钥指纹,请执行此命令:
openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c
- 或者,从控制台获取指纹,当您上传 RSA 公钥时,控制台会自动显示指纹。有关获取密钥指纹的信息,请参阅必需的密钥和 OCID。
此值为必填项。 “ca_certificate”
:component_keyring_oci
组件用于 Oracle Cloud Infrastructure 证书验证的 CA 证书捆绑文件的路径名。该文件包含一个或多个用于对等验证的证书。如果未指定文件,则使用系统上安装的默认 CA 捆绑。如果值设置为disabled
(区分大小写),component_keyring_oci
不执行证书验证。
鉴于上述配置文件属性,要配置component_keyring_oci
,请在安装component_keyring_oci
库文件的目录中创建一个名为component_keyring_oci.cnf
的全局配置文件,并可选地在数据目录中创建一个名为component_keyring_oci.cnf
的本地配置文件。
验证组件安装
执行任何特定于组件的配置后,启动服务器。通过检查性能模式keyring_component_status
表来验证组件安装:
mysql> SELECT * FROM performance_schema.keyring_component_status; +---------------------+--------------------------------------------------------------------+ | STATUS_KEY | STATUS_VALUE | +---------------------+--------------------------------------------------------------------+ | Component_name | component_keyring_oci | | Author | Oracle Corporation | | License | PROPRIETARY | | Implementation_name | component_keyring_oci | | Version | 1.0 | | Component_status | Active | | user | ocid1.user.oc1..aaaaaaaasqly<...> | | tenancy | ocid1.tenancy.oc1..aaaaaaaai<...> | | compartment | ocid1.compartment.oc1..aaaaaaaah2swh<...> | | virtual_vault | ocid1.vault.oc1.iad.bbo5xyzkaaeuk.abuwcljtmvxp4r<...> | | master_key | ocid1.key.oc1.iad.bbo5xyzkaaeuk.abuwcljrbsrewgap<...> | | encryption_endpoint | bbo5xyzkaaeuk-crypto.kms.us-<...> | | management_endpoint | bbo5xyzkaaeuk-management.kms.us-<...> | | vaults_endpoint | vaults.us-<...> | | secrets_endpoint | secrets.vaults.us-<...> | | key_file | ~/.oci/oci_api_key.pem | | key_fingerprint | ca:7c:e1:fa:86:b6:40:af:39:d6<...> | | ca_certificate | disabled | +---------------------+--------------------------------------------------------------------+
Component_status
值为Active
表示组件初始化成功。
如果组件无法加载,服务器启动将失败。检查服务器错误日志以获取诊断消息。如果组件加载但由于配置问题而无法初始化,则服务器启动,但Component_status
值为Disabled
。检查服务器错误日志,纠正配置问题,并使用ALTER INSTANCE RELOAD KEYRING
语句重新加载配置。
可以查询 MySQL 服务器以获取现有密钥列表。要查看存在哪些密钥,请检查性能模式keyring_keys
表。
mysql> SELECT * FROM performance_schema.keyring_keys; +-----------------------------+--------------+----------------+ | KEY_ID | KEY_OWNER | BACKEND_KEY_ID | +-----------------------------+--------------+----------------+ | audit_log-20210322T130749-1 | | | | MyKey | me@localhost | | | YourKey | me@localhost | | +-----------------------------+--------------+----------------+
保险库密钥环组件用法
component_keyring_oci
支持组成标准 MySQL 密钥环服务接口的函数。这些函数执行的密钥环操作可在两个级别访问:
- SQL 接口:在 SQL 语句中,调用第 8.4.4.15 节,“通用密钥环密钥管理函数”中描述的函数。
- C 接口:在 C 语言代码中,调用第 7.6.9.2 节,“密钥环服务”中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate('MyKey', 'AES', 32); SELECT keyring_key_remove('MyKey');
有关component_keyring_oci
允许的密钥值特性的信息,请参见第 8.4.4.13 节,“支持的密钥类型和长度”。
MySQL8 中文参考(二十九)(5)https://developer.aliyun.com/article/1566126