8.4.4.9 Oracle 云基础架构 Vault 密钥环组件使用
MySQL Enterprise Edition 商业产品中包含了 Oracle Cloud Infrastructure Vault 密钥环组件。要了解更多关于商业产品,请访问https://www.mysql.com/products/。
component_keyring_oci
是 Oracle Cloud Infrastructure Vault 后端存储与 MySQL 服务器之间的通信组件 infrastructure 的一部分。MySQL 服务器本地存储中不永久存储任何密钥信息。所有密钥都存储在 Oracle Cloud Infrastructure Vault 中,这使得该组件非常适合 Oracle Cloud Infrastructure MySQL 客户端用于管理他们的 MySQL Enterprise Edition 密钥。
MySQL Keyring 正在从插件到使用组件 infrastructure 进行转换。component_keyring_oci
的引入是该努力的一部分。更多信息,请见Keyring Components Versus Keyring Plugins。
在同一时间只能启用一个密钥环组件或插件。启用多个密钥环组件或插件是未支持的,可能会导致不良结果。
要使用 component_keyring_oci
进行密钥存储管理,您必须:
-
编写一个 manifest,以便服务器加载
component_keyring_oci
,如Section 8.4.4.2, “Keyring Component Installation”中所述。 -
编写
component_keyring_oci
的配置文件,如这里所述。
当component_keyring_oci
初始化时,它将从组件库文件安装目录(即服务器插件目录)中读取全局配置文件,或者是全局配置文件与本地配置文件的组合:
-
该组件尝试从安装目录中读取其全局配置文件。
-
如果全局配置文件指示使用本地配置文件,组件将尝试从数据目录中读取其本地配置文件。
-
虽然全局和本地配置文件位于不同的目录,但文件名都是
component_keyring_oci.cnf
在两个位置。 -
如果没有配置文件存在,
component_keyring_oci
将无法初始化。该组件需要一个有效的配置文件才能初始化。
本地配置文件允许设置多个服务器实例使用component_keyring_oci
,这样每个服务器实例的组件配置都可以是特定于给定的数据目录实例。这使得同一个Keyring 组件可以与每个实例关联不同的Oracle Cloud Infrastructure Vault。
您被假设熟悉Oracle Cloud Infrastructure概念,但以下文档可能有助于设置用于component_keyring_oci
的资源:
component_keyring_oci
配置文件具有以下属性:
-
配置文件必须是有效的JSON格式。
-
配置文件允许这些配置项:
-
"read_local_config"
: 仅在全局配置文件中允许该项。如果该项不存在,组件将只使用全局配置文件。如果该项存在,它的值是true
或false
,表示组件是否应该从本地配置文件中读取配置信息。如果在全局配置文件中找到
"read_local_config"
项,并且与其他项一起存在,组件将首先检查"read_local_config"
项的值:-
如果该值为
false
,组件将处理全局配置文件中的其他项,并忽略本地配置文件。 -
如果该值为
true
,组件将忽略全局配置文件中的其他项,并尝试读取本地配置文件。
-
-
“user”
:Oracle Cloud Infrastructure 中的 Oracle Cloud Infrastructure 用户 OCID,component_keyring_oci
使用该用户 OCID 进行连接。在使用component_keyring_oci
之前,必须确保用户账户存在,并授予访问配置的 Oracle Cloud Infrastructure 租户、 compartment 和安全存储资源的权限。从 Console 中获取用户 OCID,可以按照Required Keys and OCIDs中的说明进行操作。该值是必需的。
-
“tenancy”
:Oracle Cloud Infrastructure 中的 Oracle Cloud Infrastructure 租户 OCID,component_keyring_oci
使用该租户 OCID 作为 MySQL 容器的位置。在使用component_keyring_oci
之前,必须创建租户如果它不存在。从 Console 中获取租户 OCID,可以按照Required Keys and OCIDs中的说明进行操作。该值是必需的。
-
“compartment”
: MySQL密钥使用的Oracle Cloud Infrastructure tenancy compartment的OCID。使用component_keyring_oci
之前,您需要创建一个MySQL compartment或子compartment,如果不存在。该compartment不应包含任何安全存储或机密。它不能被其他系统使用。有关管理compartment和获取OCID的信息,请见Managing Compartments。该值是必需的。
-
“virtual_vault”
: MySQL密钥使用的Oracle Cloud Infrastructure安全存储的OCID。使用component_keyring_oci
之前,您需要创建一个新的安全存储在MySQL compartment中,如果不存在。 (Alternatively, you can reuse an existing vault that is in a parent compartment of the MySQL compartment.) compartment用户只能看到和使用他们所属compartment中的密钥。有关创建安全存储和获取vault OCID的信息,请见Managing Vaults。该值是必需的。
-
“加密终点”
: Oracle Cloud Infrastructure 加密服务器的终点,component_keyring_oci
使用该终点生成加密或编码信息(明文)用于新建密钥。加密终点是 vault 特定的,Oracle Cloud Infrastructure 在创建 vault 时分配。要获取终点 OCID,请查看您的 keyring_oci 密钥库配置详细信息,使用以下指南:管理密钥库。该值是必需的。
-
“管理终点”
: Oracle Cloud Infrastructure 密钥管理服务器的终点,component_keyring_oci
使用该终点列出现有密钥。密钥管理终点是 vault 特定的,Oracle Cloud Infrastructure 在创建 vault 时分配。要获取终点 OCID,请查看您的 keyring_oci 密钥库配置详细信息,使用以下指南:管理密钥库。该值是必需的。
-
“密钥库终点”
: Oracle Cloud Infrastructure 密钥库服务器的终点,component_keyring_oci
使用该终点获取秘密值。密钥库终点是 vault 特定的,Oracle Cloud Infrastructure 在创建 vault 时分配。要获取终点 OCID,请查看您的 keyring_oci 密钥库配置详细信息,使用以下指南:管理密钥库。该值是必需的。
-
“secrets_endpoint”
: Oracle Cloud Infrastructure 私有云秘密服务器的终结点,component_keyring_oci
使用该终结点来列出、创建和退休秘密。私有云秘密服务器的终结点是 vault 特定的,Oracle Cloud Infrastructure 在 vault 创建时分配。要获取终结点 OCID,请查看您的 keyring_oci 密钥库配置详细信息,使用Managing Vaults中的指令。该值是必需的。
-
“master_key”
: Oracle Cloud Infrastructure 主加密密钥的 OCID,component_keyring_oci
使用该密钥对秘密进行加密。使用component_keyring_oci
之前,您必须在 Oracle Cloud Infrastructure 容器中创建一个加密密钥,如果不存在。为生成的密钥提供 MySQL-特定的名称,并且不要将其用于其他目的。关于密钥创建的信息,请查看Managing Keys。该值是必需的。
-
“key_文件”
:component_keyring_oci
使用 Oracle Cloud Infrastructure 认证时,包含 RSA 私钥的文件路径名。您还必须使用 Console 上传相应的 RSA 公共密钥。Console 显示了密钥指纹值,您可以将其用于设置"key_ fingerprint"
值。关于生成和上传 API 密钥的信息,请查看Required Keys and OCIDs。该值是必需的。
-
“key_指纹”
: Oracle Cloud Infrastructure认证中component_ keyring_oci
使用的RSA私钥指纹。创建API密钥时,可以执行以下命令获取指纹:openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c
或者,您可以从控制台获取指纹,当您上传 RSA 公钥时,控制台会自动显示指纹。有关获取密钥指纹的信息,请参阅 必需的密钥和 OCID。
此值是必填项。
-
“ca_证书”
: Oracle Cloud Infrastructure证书验证中component_keyring_oci
组件使用的CA证书包文件路径名。该文件包含一个或多个证书用于对等验证。如果未指定文件,系统安装的默认CA包将被使用。如果值设置为disabled
(大小写敏感),component_keyring_oci
将不进行证书验证。
-
根据前面的配置文件属性,要配置 component_keyring_oci
,请在 component_keyring_oci
库文件安装的目录中创建一个名为 component_keyring_oci.cnf
的全局配置文件,并可选择在数据目录中创建一个也名为 component_keyring_oci.cnf
的本地配置文件。
在执行任何组件特定的配置后,启动服务器。通过检查性能chema中的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服务器以获取现有密钥的列表。要查看哪些密钥存在,检查性能chema中的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 Keyring服务接口的函数。Keyring操作由这些函数执行,可以在两个级别上访问:
-
SQL接口:在SQL语句中,调用第8.4.4.12节,“通用Keyring密钥管理函数”中描述的函数。
-
C接口:在C语言代码中,调用《第7.6.9.2节,“Keyring服务”》中描述的keyring服务函数。
示例(使用SQL接口):
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
关于component_ keyring_oci
允许的密钥值特征,请参阅《第8.4.4.10节,“支持的Keyring密钥类型和长度”》。