KMS 迁移

K E S C l i e n t K E S S e r v e r - K K M M S S 1 2

概念

KES服务器连接到密钥管理服务(KMS)。 KMS充当持久且安全的密钥存储。 KES服务器将所有主密钥存储在KMS中。

迁移KMS实例

在某些情况下,您需要从一个KMS实例迁移到另一个KMS实例,例如从云服务迁移到本地部署解决方案。 在这种情况下,您必须将部分或全部主密钥迁移到新的KMS实例。

虽然使用KMS专用工具手动执行此操作是可行的,但我们不建议将密钥迁移这样关键的操作手动完成。手动迁移单个密钥会增加主密钥暴露或丢失的风险。

相反,KES CLI 提供了一个迁移命令,kes migrate.

Themigrate该命令支持将主密钥从一个KMS实例迁移到另一个KMS实例。 例如,您可以使用该命令将Hashicorp Vault实例迁移到另一个Hashicorp Vault实例。 或者,kes migrate可以将 Hashicorp Vault 实例迁移到或从 AWS Secrets Manager KMS 迁移。 KMS 实例不需要是相同类型或提供商。

Themigrate命令必须可以直接访问两者同时的 KMS 实例。 例如,如果源 KMS 运行在A目标 KMS 运行在B然后运行migrate来自命令C可以直接访问两者的AB:

A K M S 1 C m i g r a t e B K M S 2

最佳实践

为降低迁移过程中的错误风险,请遵循以下最佳实践:

  1. 确保源KMS和目标KMS都处于健康状态。

  2. 验证源和目标 KMS 的有效 KES 配置

  3. 验证每个 KES 服务器能否访问其 KMS 实例。 特别要检查以下命令能否成功启动 KES 服务器:

    kes server --config <your-config-file.yml>
    
  4. 如果您的用户权限允许列出键或者您有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 中列出密钥。 那里可能已经存在密钥。

  5. 准备好源和目标 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覆盖现有键的标志,作为迁移的一部分。

注意!
覆盖主密钥将擦除之前的密钥!

合并键

除了覆盖目标 KMS 中的现有密钥外,您还可以使用以下方式将源 KMS 合并到目标 KMS 中--mergeflag.

--merge仅迁移目标 KMS 中不存在的主密钥。

如果源KMS和目标KMS各自拥有名称相同但值不同的密钥,--mergedoes迁移密钥。 仅使用--merge当重复迁移尝试或使用模式进行批量迁移时。

获取迁移帮助

在执行实时迁移之前,请考虑为这一关键流程寻求协助。

  1. 首先使用两个本地KES + FS 部署
  2. [联系我们](mailto:hello@min.io?subj=KES migration)