使用KMS自动解封的详细指南

478 阅读3分钟

使用KMS自动解封

Hashicorp的Vault提供了一个解决方案来保护、存储和控制对秘密和其他敏感数据的访问。有多种方法可以实现高可用的Vault设置,有些人可能使用Vault服务器集群,还有一些人可能采用主从部署策略。在这篇博客中,我们将选择一种穷人的方法,以最小的配置和资源来实现一个不复杂和小规模的项目的高可用性。

这篇文章假设你对Vault有一个基本的了解,以及如何安装它。要了解更多关于在EC2实例上安装Vault服务器的信息,请参考我们关于Vault的SSH访问管理的博文。

为什么要为HA自动解封?

在我们进入实施细节之前,我们需要回答一个问题,为什么自动解封对于高可用性是必要的?Vault服务器总是在密封状态下启动。Vault存储中的数据总是以加密的形式存储。Vault被配置为知道如何访问物理存储和它的位置,但不知道如何解密其中的任何内容。解封是构建读取解密密钥以解密数据所需的主密钥的过程。如果Vault服务器自行重启或被用户手动重启,它就会回到密封状态,并将不得不手动解封。这可能会导致重大故障,在非工作时间会出现不必要的惊喜。

自动解封是一个过程,解封保险库所需的密钥存储在密钥管理系统中,如AWS KMS,并提供给保险库,以便在意外或强制重启时解封,不需要任何手动中断。

本解决方案中使用的组件:(我们将使用AWS作为云提供商)

  • AWS KMS密钥
  • 访问AWS KMS密钥所需的AWS IAM策略和角色
  • 具有自动恢复功能的EC2服务器(以尽量减少因硬件故障而造成的中断)
  • 将在EC2上部署Vault二进制文件

IAM和KMS设置

  1. 通过创建名为 "IAM "的策略开始实施。VaultKMSUnsealPolicy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["kms:Encrypt", "kms:Decrypt", "kms:DescribeKey"],
      "Resource": "*"
    }
  ]
}
  1. 创建一个名为VaultKMSUnsealRole 的IAM角色,并将VaultKMSUnsealPolicy

  2. 创建一个启用了自动恢复功能的EC2实例。(要了解更多关于自动恢复的信息,请浏览AWS博客)。

  3. 现在将VaultKMSUnsealRole 角色附加到EC2实例上。(如果你已经有一个IAM角色附加到你的实例上,跳过第2步,直接将VaultKMSUnsealPolicy 附加到现有的角色上)

  4. 进入AWS KMS部分,创建一个新的同步密钥,名为vault 。请注意密钥的ID,因为我们将在下一步使用它。

Vault配置设置

下载并安装Vault二进制文件。

在初始化保险库之前,必须执行以下步骤。一旦初始化,它就已经有了默认提供的5个密钥,然后必须用它来手动解封保险库。

注意。这个步骤必须在 vault operator init 运行之前完成。

修改或创建金库配置/etc/vault.d/vault.hcl以包括以下模块:

seal "awskms" {
  region     = "${aws_region}"
  kms_key_id = "${kms_key}"
}
  • awskms 是Vault用来与AWS KMS通信以获取和更新密钥的模块。
  • aws_region 指的是设置AWS KMS密钥的AWS区域
  • kms_key_id 是指在IAM和KMS设置部分创建的AWS KMS密钥( )的密钥ID。vault

一旦配置被更新为上述内容,用以下命令初始化保险库:

$ export VAULT_ADDR="http://127.0.0.1:8200"
$ vault operator init >> ~/vault.keys
Initial Root Token: s.######

Unseal Key 1: key1###
Unseal Key 2: key2###
Unseal Key 3: key3###
Unseal Key 4: key4###
Unseal Key 5: key5###

是的,我们做到了!!

我们现在有一个设置了自动解封功能的Vault服务器,部署在一个可自动恢复的EC2实例上。现在,如果你的EC2实例由于硬件故障或人为错误造成的事故而重新启动,Vault服务器将自动在解封状态下启动,并准备好使用,无需任何人工干预。