awskms 封印

AWS KMS 封印配置了 Vault 如何使用 AWS KMS 封装封印密钥。AWS KMS 封印可以由以下任一方式激活:

  • Vault 配置文件中设置了 seal "awskms"
  • 环境变量 VAULT_SEAL_TYPE 的值被设置为 awskms。如果通过环境变量启用该功能,必须通过环境变量提供所有 AWS KMS 所需要的其他值和所有有助进行身份验证的环境变量。(例如 AWS_ACCESS_KEY_ID

awskms 例子

下面的例子显示了通过 Vault 配置文件提供所有必要的值来配置 AWS KMS 封印:

seal "awskms" {
  region     = "us-east-1"
  access_key = "AKIAIOSFODNN7EXAMPLE"
  secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
  kms_key_id = "19ec80b0-dfdd-4d97-8164-c6examplekey"
  endpoint   = "https://vpce-0e1bb1852241f8cc6-pzi0do8n.kms.us-east-1.vpce.amazonaws.com"
}

awskms 参数

以下参数可以在 Vault 配置文件的 seal 配置节当中使用:

  • region (string: "us-east-1"): 加密密钥所处的 AWS 区域。可以通过设置环境变量 AWS_REGION 或是 AWS_DEFAULT_REGION 来配置,也可以在 ~/.aws/config 文件中配置,或是使用实例元信息。
  • access_key (string: <required>): 使用的 AWS access key。可以通过设置环境变量 AWS_ACCESS_KEY_ID 来配置,或是在 AWS 命令行配置文件或实例配置文件中配置。
  • session_token (string: ""): 配置 AWS 会话(session)令牌。可以通过设置环境变量 AWS_SESSION_TOKEN 来配置。
  • secret_key (string: <required>): 使用的 AWS secret key。可以通过设置环境变量 AWS_SECRET_ACCESS_KEY 来配置,或是在 AWS 命令行配置文件或实例配置文件中配置。
  • kms_key_id (string: <required>): 加解密密钥的 KMS key ID 或是 ARN。可以通过设置环境变量 VAULT_AWSKMS_SEAL_KEY_ID 来配置。
  • endpoint (string: ""): 用于接收 AWS KMS 请求的 KMS API 终端节点。也可以由 AWS_KMS_ENDPOINT 环境变量指定。有时,比如说需要通过 VPC 端点走内网连接 KMS 时该参数会很有用。如果没有设置该参数,Vault 将使用您所在地区的默认 API 端点。

身份验证

必须设置身份验证参数,可以通过环境变量或是配置文件中的参数。

注意:虽然我们可以在配置文件中配置 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,但我们强烈推荐使用环境变量配置这两个参数。

AWS 身份验证参数有:

  • AWS_REGION 或是 AWS_DEFAULT_REGION
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

注意:客户端使用官方 AWS SDK,如果没有提供上面的 AWS 参数,,将按顺序使用指定的凭证、环境变量中的凭证、共享文件凭证或 IAM 角色/ECS 任务凭证。

Vault 需要对 KMS 密钥具有以下权限:

  • kms:Encrypt
  • kms:Decrypt
  • kms:DescribeKey

以上权限可以通过 Vault 使用的委托(principal)的对指定 KMS 密钥的密钥策略的 IAM 权限授予,也可以通过密钥的 KMS Grants配置。

awskms 环境变量

AWS KMS 封印也可以通过设置以下环境变量来启用

  • VAULT_SEAL_TYPE
  • VAULT_AWSKMS_SEAL_KEY_ID

密钥轮换

AWS KMS 封印支持轮换 AWS KMS 文档中定义的主密钥。因为密钥信息与加密数据一起存储,所以KMS 支持自动轮换和手动轮换。旧密钥不得禁用或删除,并用于解密旧数据。任何新增或更新的数据都将使用封印配置中定义的当前密钥,或者利用密钥别名设置为当前密钥的密钥进行加密。

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。

results matching ""

    No results matching ""