KMS 迁移
概念
KES 服务器连接到密钥管理服务 (KMS)。KMS 充当持久且安全的密钥存储。KES 服务器在 KMS 中存储所有主密钥。
迁移 KMS 实例
一些情况下需要将 KMS 实例从一个迁移到另一个,例如从云服务迁移到本地解决方案。在这些情况下,您必须将部分或全部主密钥迁移到新的 KMS 实例。
虽然可以使用特定于 KMS 的工具手动执行此操作,但我们不建议手动进行关键操作(如密钥迁移)。手动迁移单个密钥会增加泄露或丢失主密钥的风险。
相反,KES CLI 提供了一个迁移命令,kes migrate
。
migrate
命令支持将主密钥从一个 KMS 实例迁移到另一个 KMS 实例。例如,您可以使用该命令将 Hashicorp Vault 实例迁移到另一个 Hashicorp Vault 实例。或者,kes migrate
可以将 Hashicorp Vault 实例迁移到或从 AWS Secrets Manager KMS 迁移。KMS 实例不需要是相同类型或提供商。
migrate
命令 **必须** 同时直接访问 **两个** KMS 实例。例如,如果源 KMS 运行在 A
上,目标 KMS 运行在 B
上,那么从 C
运行 migrate
命令,C
可以直接访问 A
和 B
。
最佳实践
为了最大限度地降低迁移过程中出现错误的风险,请遵循以下最佳实践。
-
确保源 KMS 和目标 KMS 都处于健康状态。
-
验证源 KMS 和目标 KMS 的有效 KES 配置。
-
验证每个 KES 服务器是否可以访问其 KMS 实例。特别是,检查以下命令是否可以成功启动 KES 服务器。
kes server --config <your-config-file.yml>
-
如果您的用户权限允许您 列出密钥 或者您具有
root
访问权限,您可以通过以下方式列出应该迁移的密钥:export KES_SERVER=https://<KES-endpoint> export KES_CLIENT_KEY=<your-private-key> export KES_CLIENT_CERT=<your-certificate> kes key list
提示:您也可以通过指定连接到目标 KMS 的 KES 服务器的环境变量来列出目标 KMS 上的密钥。您可能已经在那里有密钥。
-
准备好源 KMS 实例和目标 KMS 实例的 KES 配置文件。
迁移密钥
迁移所有主密钥
以下命令将所有密钥从源服务器迁移到目标服务器。
kes migrate --from <source.yml> --target <target.yml>
迁移一些主密钥
要迁移所有主密钥的子集,请指定一个模式。只有与该模式匹配的主密钥才会迁移。
kes migrate --from <source.yml> --target <target.yml> <pattern>
例如
kes migrate --from source.yml --target target.yml my-key*
迁移单个密钥
要迁移单个主密钥,请指定密钥名称。
kes migrate --from <source.yml> --target <target.yml> <key-name>
例如
kes migrate --from source.yml --target target.yml my-master-key
行为
目标上的现有密钥
覆盖密钥
默认情况下,migrate
命令不会覆盖目标 KMS 上的现有密钥。相反,如果该命令无法将密钥从源迁移到目标,则会报告错误。
使用 --force
标志在迁移过程中覆盖现有密钥。
合并密钥
您可以使用 --merge
标志将源 KMS 合并到目标 KMS 中,而不是覆盖目标 KMS 上的现有密钥。
--merge
仅迁移目标 KMS 中不存在的主密钥。如果源 KMS 和目标 KMS 都有名称相同但值不同的密钥,--merge
**不会** 迁移该密钥。仅当重复迁移尝试或使用模式分批进行迁移时,才使用 --merge
。
获取迁移帮助
在执行实时迁移之前,请考虑为这个关键过程获得帮助。
- 首先使用两个本地 KES + FS 部署 进行练习。
- [联系我们](mailto:hello@min.io?subj=KES migration)