Oracle Cloud Infrastructure Vault 密钥环组件包含在 MySQL Enterprise Edition 中,这是一个商业产品。要了解更多关于商业产品的信息,请参阅 https://www.mysql.com/products/。
component_keyring_oci
是组件基础结构的一部分,用于与 Oracle Cloud Infrastructure Vault 进行后端存储通信。在 MySQL 服务器本地存储中不永久存储密钥信息。所有密钥都存储在 Oracle Cloud Infrastructure Vault 中,使得该组件非常适合 Oracle Cloud Infrastructure MySQL 客户管理他们的 MySQL Enterprise Edition 密钥。
MySQL 密钥环开始从插件转换为使用组件基础结构。component_keyring_oci
的引入是该努力的继续。有关更多信息,请参阅 密钥环组件与密钥环插件。
一次只能启用一个密钥环组件或插件。启用多个密钥环组件或插件是不支持的,结果可能不如预期。
要使用 component_keyring_oci
进行密钥库管理,您必须:
-
编写一个清单,告诉服务器加载
component_keyring_oci
,如 第 8.4.4.2 节“密钥环组件安装”所述。 -
编写
component_keyring_oci
的配置文件,如下所述。
编写清单和配置文件后,您应该能够访问使用 keyring_oci
插件创建的密钥,前提是您指定了相同的一组配置选项来初始化密钥环组件。component_keyring_oci
的内置向后兼容性简化了从密钥环插件迁移到组件。
在初始化时,component_keyring_oci
读取全局配置文件或全局配置文件与本地配置文件的组合:
-
组件尝试从组件库文件所在的目录(即服务器插件目录)中读取其全局配置文件。
-
如果全局配置文件指示使用本地配置文件,组件尝试从数据目录中读取其本地配置文件。
-
尽管全局和本地配置文件位于不同的目录中,但文件名在两个位置都是
component_keyring_oci.cnf
。 -
如果没有配置文件存在,则是一个错误。
component_keyring_oci
无法初始化没有有效配置的情况。
本地配置文件允许设置多个服务器实例使用 component_keyring_oci
,这样每个服务器实例的组件配置都是特定于给定数据目录实例的。这使得同一个密钥环组件可以与每个实例的 Oracle Cloud Infrastructure Vault 一起使用。
假设您熟悉 Oracle Cloud Infrastructure 概念,但以下文档可能在设置 component_keyring_oci
使用的资源时有所帮助:
component_keyring_oci
配置文件具有以下属性:
-
配置文件必须是有效的 JSON 格式。
-
配置文件允许以下配置项:
-
"read_local_config"
:该项仅在全局配置文件中允许。如果该项不存在,组件将仅使用全局配置文件。如果该项存在,其值为true
或false
,指示组件是否从本地配置文件中读取配置信息。如果
"read_local_config"
项在全局配置文件中存在,组件将首先检查该项的值:-
如果值为
false
,组件将处理全局配置文件中的其他项,并忽略本地配置文件。 -
如果值为
true
,组件将忽略全局配置文件中的其他项,并尝试读取本地配置文件。
-
-
“user”
:Oracle Cloud Infrastructure 用户的 OCID,component_keyring_oci
用于连接。在使用component_keyring_oci
之前,用户账户必须存在并被授予访问配置的 Oracle Cloud Infrastructure 租户、compartment 和 vault 资源的权限。要从控制台获取用户 OCID,请按照 Required Keys and OCIDs 中的说明操作。该值是必需的。
-
“tenancy”
:Oracle Cloud Infrastructure 租户的 OCID,component_keyring_oci
用于 MySQL compartment 的位置。在使用component_keyring_oci
之前,您必须创建一个租户,如果它不存在。要从控制台获取租户 OCID,请按照 Required Keys and OCIDs 中的说明操作。该值是必需的。
-
“compartment”
:Oracle Cloud Infrastructure compartment 的 OCID,component_keyring_oci
用于 MySQL 键的位置。在使用component_keyring_oci
之前,您必须创建一个 MySQL compartment 或子 compartment,如果它不存在。该 compartment 应该不包含任何 vault 键或 vault 秘密。它不应该被其他系统以外的 MySQL Keyring 使用。有关管理 compartment 和获取 OCID 的信息,请参阅 Managing Compartments。该值是必需的。
-
“virtual_vault”
:Oracle Cloud Infrastructure Vault 的 OCID,component_keyring_oci
用于加密操作。在使用component_keyring_oci
之前,您必须在 MySQL compartment 中创建一个新的 vault,如果它不存在。(或者,您可以重用一个已经存在的 vault,该 vault 位于 MySQL compartment 的父 compartment 中。)compartment 用户只能看到和使用他们各自 compartment 中的键。有关创建 vault 和获取 vault OCID 的信息,请参阅 Managing Vaults。该值是必需的。
-
“encryption_endpoint”
:Oracle Cloud Infrastructure 加密服务器的端点,component_keyring_oci
用于生成新的加密或编码信息(密文)。加密端点是 vault 特定的,Oracle Cloud Infrastructure 在 vault 创建时分配它。要获取端点 OCID,请查看您的 keyring_oci vault 的配置详细信息,使用 Managing Vaults 中的说明。该值是必需的。
-
"management_endpoint"
:Oracle Cloud Infrastructure 密钥管理服务器的端点,component_keyring_oci
用于列出现有的密钥。密钥管理端点是 vault 特定的,Oracle Cloud Infrastructure 在 vault 创建时分配它。要获取端点 OCID,请查看您的 keyring_oci vault 的配置详细信息,使用 Managing Vaults 中的说明。该值是必需的。
-
“vaults_endpoint”
:Oracle Cloud Infrastructure vaults 服务器的端点,component_keyring_oci
用于获取秘密的值。vaults 端点是 vault 特定的,Oracle Cloud Infrastructure 在 vault 创建时分配它。要获取端点 OCID,请查看您的 keyring_oci vault 的配置详细信息,使用 Managing Vaults 中的说明。该值是必需的。
-
“secrets_endpoint”
: Oracle Cloud Infrastructure 秘密服务器的端点,component_keyring_oci
用于列出、创建和退休秘密。该秘密端点是 vault 特定的,Oracle Cloud Infrastructure 在 vault 创建时分配它。要获取端点 OCID,请查看您的 keyring_oci vault 配置详细信息,按照 管理 Vault 中的说明。该值是必需的。
-
“master_key”
: Oracle Cloud Infrastructure 主加密密钥的 OCID,component_keyring_oci
用于秘密加密。在使用component_keyring_oci
之前,您必须创建 Oracle Cloud Infrastructure comparment 的加密密钥,如果不存在。为生成的密钥提供 MySQL 特定的名称,不要用于其他目的。有关密钥创建的信息,请参阅 管理密钥。该值是必需的。
-
“key_file”
: 包含 RSA 私钥的文件路径,component_keyring_oci
用于 Oracle Cloud Infrastructure 身份验证。您还必须使用控制台上传相应的 RSA 公钥。控制台将显示密钥指纹值,您可以使用它来设置"key_fingerprint"
值。有关生成和上传 API 密钥的信息,请参阅 Required Keys and OCIDs。该值是必需的。
-
“key_fingerprint”
:component_keyring_oci
用于 Oracle Cloud Infrastructure 身份验证的 RSA 私钥指纹。要获取密钥指纹,请执行以下命令:openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c
或者,从控制台获取指纹,该控制台在您上传 RSA 公钥时自动显示指纹。有关获取密钥指纹的信息,请参阅 Required Keys and OCIDs。
该值是必需的。
-
“ca_certificate”
:component_keyring_oci
组件用于 Oracle Cloud Infrastructure 证书验证的 CA 证书 bundle 文件路径。该文件包含一个或多个用于对等验证的证书。如果未指定文件,将使用系统上安装的默认 CA bundle。如果值设置为disabled
(区分大小写),component_keyring_oci
将不执行证书验证。
-
根据前面的配置文件属性,为了配置 component_keyring_oci
,请在 component_keyring_oci
库文件安装的目录中创建一个名为 component_keyring_oci.cnf
的全局配置文件,并可选地在数据目录中创建一个名为 component_keyring_oci.cnf
的本地配置文件。
在执行任何组件特定配置后,启动服务器。通过检查 Performance Schema 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 服务器以获取现有密钥的列表。要查看哪些密钥存在,请检查 Performance Schema 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 服务接口的函数。这些函数的密钥操作可以在两个级别上访问:
-
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 节,“支持的密钥环密钥类型和长度”。