S3 存储后端
S3 存储后端可以用来将 Vault 的数据保存到 Amazon S3 存储桶中。
- 无高可用集群支持 —— S3 存储后端不支持高可用集群。
- 仅有社区支持 —— S3 存储后端由社区支持。虽然它已经过 HashiCorp 员工的审查,但他们可能对该技术并不了解。如果遇到问题,该问题可能会被转交给原作者。
storage "s3" {
access_key = "abcd1234"
secret_key = "defg5678"
bucket = "my-bucket"
}
s3
参数
bucket
(string: <required>)
– 设置使用的 S3 存储桶名称。该参数也可以通过设置环境变量AWS_S3_BUCKET
来设置。endpoint
(string: "")
– 指定一个非默认的,兼容 AWS 规范的 S3 端点。该参数也可以通过设置环境变量AWS_S3_ENDPOINT
来设置。(可用来配置使用兼容 S3 协议的其他存储服务)region
(string "us-east-1")
– 指定使用的 AWS region。该参数也可以通过设置环境变量AWS_REGION
或AWS_DEFAULT_REGION
来设置,前者的优先级高于后者。
下列参数用于向 AWS 进行身份验证。如果您在 EC2 实例上运行 Vault 服务器,您还可以使用 EC2 实例配置文件服务来提供 Vault 用于调用 S3 API 的凭据。将 access_key
和 secret_key
字段留空将导致 Vault 尝试从 AWS 元数据服务检索凭证。
access_key
(string: <required>)
– 设置 AWS access key。该参数也可以通过设置环境变量AWS_ACCESS_KEY_ID
来设置,或者使用 AWS 凭据文件,又或者是 IAM 角色。secret_key
(string: <required>)
– 设置 AWS secret key。该参数也可以通过设置环境变量AWS_SECRET_ACCESS_KEY
来设置,或者使用 AWS 凭据文件,又或者是 IAM 角色。session_token
(string: "")
– 设置 AWS session token。该参数也可以通过设置环境变量AWS_SESSION_TOKEN
来设置。max_parallel
(string: "128")
– 设置与 S3 通信的最大并行请求数。s3_force_path_style
(string: "false")
- 设置是否使用虚拟托管风格域名访问配置的端点。disable_ssl
(string: "false")
- 设置是否为到端点的连接启用 SSL (强烈不推荐在生产环境关闭 SSL)。kms_key_id
(string: "")
- 设置用以加密 S3 后端中数据所使用的 KMS 密钥的 ID 或别名。Vault 必须对此密钥拥有kms:Encrypt
以及kms:Decrypt
权限。我们可以设置该参数为alias/aws/s3
来使用账号的默认密钥。path
(string: "")
- 设置 Vault 数据在 S3 存储桶中的存储路径。
s3
例子
默认例子
该例子演示使用 S3 作为存储后端:
storage "s3" {
access_key = "abcd1234"
secret_key = "defg5678"
bucket = "my-bucket"
}
使用 S3 KMS 默认密钥加密
该例子演示了使用 Amazon S3 作为存储后端,搭配账号默认的 S3 KMS 密钥加密:
storage "s3" {
access_key = "abcd1234"
secret_key = "defg5678"
bucket = "my-bucket"
kms_key_id = "alias/aws/s3"
}
使用自定义的 S3 KMS 密钥加密
该例子演示了使用 Amazon S3 作为存储后端,搭配用户管理的 KMS 密钥加密:
This example shows using Amazon S3 as a storage backend using KMS encryption with a customer managed KMS key.
storage "s3" {
access_key = "abcd1234"
secret_key = "defg5678"
bucket = "my-bucket"
kms_key_id = "001234ac-72d3-9902-a3fc-0123456789ab"
}
AWS 读取实例元数据超时
影响 Vault 1.4 及以后的版本
Vault 在 EC2 实例上使用实例元数据服务的时候,例如从实例配置文件中获取凭据,使用到实例元数据服务 (IMDSv2) 的 v2 版本时可能会出现延迟。 Vault 使用的 AWS SDK 首先尝试连接到 IMDSv2,如果超时,则回退到 v1。在 Vault 1.4 中,此超时最多可能需要 2 分钟。在 Vault 1.5.5 及更高版本中最多可能需要 2 秒钟。
超时会发生在 Vault 和 IMDSv2 之间存在代理,并且实例 hop 限制设置为小于 Vault 和 IMDSv2 之间的“hop”数的时候。例如,如果 Vault 在 EC2 实例上的 docker 中运行,并且实例 hop 限制设置为 1,AWS SDK 客户端将尝试连接到 IMDSv2,超时并回退到 IMDSv1,因为 docker 和 IMDS 之间存在额外的网络 hop.
为避免超时行为,可以在底层 EC2 实例上调整 hop 限制。对于 docker 示例,将 hop 限制设置为 2 就可以让 Vault 中的 AWS SDK 无延迟地连接到 IMDSv2。