首页 > 解决方案 > 是否可以使用 DynamoDB 存储后端横向扩展 Hashicorp Vault?

问题描述

我在 AWS 上使用 Vault 和 DynamoDB 后端。后端支持 HA。

storage "dynamodb" {
  ha_enabled = "true"
  region     = "us-west-2"
  table      = "vault-data"
}

阅读 HA 概念文档: https ://www.vaultproject.io/docs/concepts/ha.html

为了实现高可用性,一个 Vault 服务器节点会在数据存储中获取一个锁。然后成功的服务器节点成为活动节点;所有其他节点成为备用节点。此时,如果备用节点收到请求,它们将根据集群的当前配置和状态转发请求或重定向客户端——详细信息请参见下面的部分。由于这种架构,HA 无法提高可扩展性。

我对在 ELB 后面拥有一组 EC2 实例不感兴趣,其中只有一个实例表现得像一个主实例并与 DynamoDB 对话。

我想运行 N 个运行 Vault 的 Ec2 实例,它们独立于 DynamoDB 进行读写。

因为 DynamoDB 支持从多个 EC2 实例读取/写入,所以我希望能够同时从多个实例中解封 Vault 并执行读取和写入操作。即使在ha_enabled = "false"不进行领导者选举的情况下,这也应该有效。

为什么文档中没有建议这种架构?为什么它不应该工作?我是否缺少任何加密限制?

谢谢你

标签: amazon-dynamodbhashicorp-vault

解决方案


它是 Vault Enterprise 的一项功能。有了它,您可以设置一个主集群和尽可能多的“辅助”集群,也就是众所周知的性能副本。每个集群都有自己的存储和解封机制。因此,您可以在 Dynamo DB 上拥有一个集群,而在 Raft 上拥有另一个集群。如果两者都在 Dynamo DB 上,那么您将需要一个 Dynamo DB 表。

但请记住,性能副本将始终将写入操作转发到主集群。写入操作会影响 Vault 的全局状态。从这个意义上说,POST/transit不被视为写入操作。

另一种可能性是将您的 kv 存储安装在本地(使用-local标志)。然后,即使安装在性能副本上,它也会像主服务器一样运行,代价是无法复制到另一个集群。

最后一点:DR 集群是任何集群的精确副本。每个集群,无论是主集群还是副本集群,都可以拥有其 DR 集群。


推荐阅读