搜索

第 2 章 为 Record Encryption 过滤器准备 HashiCorp Vault

download PDF

要将 Vault 与 OpenShift 集群中的 Record Encryption 过滤器一起使用,请为您的 Vault 实例使用以下设置:

  • 启用 Transit Engine,因为 Record Encryption 过滤器依赖于其 API。
  • 为过滤器创建一个 Vault 策略,其具有生成和解密用于信封加密的数据加密密钥(DEK)的权限。
  • 获取包含过滤器策略的 Vault 令牌。

代理的部署配置使用 Vault Transit Engine 服务的 URL。

Vault 可以部署为现有实例、云实例或 OpenShift。通过对代理的可访问性,它可以与 Apache Kafka 代理的 Streams 共存,也可以远程部署。

有关在 OpenShift 上安装 Vault 并设置访问权限的详情,请参考 HashiCorp Vault 产品文档。

此流程概述了准备 Vault 的两个选项:

  • 使用带有 Apache Kafka 代理的 Streams 提供的临时部署配置的 Helm 将 Vault 部署到 OpenShift 集群。
  • 更新现有的 Vault 实例。

准备 Vault 实例时,您必须为 Record Encryption 过滤器创建 Vault 策略和令牌。

警告

示例部署配置不适用于生产环境。

Apache Kafka 的 Streams 在 examples/proxy/record-encryption/vault 文件夹中包括示例安装工件,其中包含与代理和记录加密过滤器兼容的预先配置 Vault 部署文件。

  • AMQstreams_proxy_encryption_filter_policy.hcl 为 Record Encryption 过滤器定义一个 Vault 策略
  • helm-dev-values.yaml 指定 Vault 的 Helm 部署配置

这些安装文件为尝试代理提供了一个快速设置。

先决条件

  • 安装需要具有 cluster-admin 角色的 OpenShift 用户,如 system:admin
  • oc 命令行工具已安装并配置为连接到具有 admin 访问权限的 OpenShift 集群。
  • helm 命令行工具已安装并配置为连接到具有 admin 访问权限的 OpenShift 集群。
  • 名为 proxy 的 OpenShift 项目命名空间,这是默认安装代理的同一命名空间。

有关此流程中使用的 ochelm 命令行选项的信息,请查看 --help

使用 Helm 部署配置示例部署 Vault

  1. 下载并提取 Apache Kafka 代理安装工件的 Streams。

    代理可从 Apache Kafka 软件下载页面 的 Streams 获取

    文件包含部署 Vault 所需的部署配置。

  2. 创建根令牌并记下它:

    cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 > vault.root.token
    export VAULT_TOKEN=$(cat vault.root.token)
  3. 使用 Helm 安装 Vault:

    helm repo add hashicorp https://helm.releases.hashicorp.com
    helm install vault hashicorp/vault \
      --create-namespace --namespace=vault \
      --version <helm_version> \
      --values vault/helm-dev-values.yaml \
      --set server.dev.devRootToken=${VAULT_TOKEN} \
      --wait

    root 令牌用于 Vault 实例。

  4. 检查部署的状态:

    oc get pods -n vault

    输出显示部署名称和就绪

    NAME                      READY  STATUS   RESTARTS
    vault-0                   1/1    Running  0

    标识创建的 pod 的 pod ID。

    使用默认部署,您可以安装单个代理 pod。

    READY 显示就绪/预期的副本数。当 STATUS 显示为 Running 时,部署成功。

  5. 创建 Vault 地址(VAULT_ADDR)环境变量以指向新的 Vault 实例:

    export VAULT_ADDR=$(oc get route -n vault vault --template='https://{{.spec.host}}')
  6. 以管理员身份登录到 Vault,并启用 Vault Transit secret 引擎:

    vault secrets enable transit

    如果已经启用了 secret 引擎,请忽略错误。

  7. 创建指向 Vault Transit 地址的环境变量:

    export VAULT_TRANSIT_URL=${VAULT_ADDR}/v1/transit

    地址在代理部署配置中使用。

  8. 创建 Vault 策略和令牌

配置您自己的 Vault 实例

如果您已经安装了 Kafka 实例,您可以更新它以用于 Apache Kafka 代理的 Streams。

  1. 创建一个 Vault 地址环境变量(VAULT_ADDRVAULT_NAMESPACE,如果使用 Enterprise)以指向 Vault 实例:

    export VAULT_ADDR=https://<vault server>:8200
    export VAULT_NAMESPACE=<namespaces>
  2. 以管理员身份登录到 Vault,并启用 Vault Transit secret 引擎:

    vault secrets enable transit

    如果已经启用了 secret 引擎,请忽略错误。

  3. 创建指向 Vault Transit 地址的环境变量:

    export VAULT_TRANSIT_URL=${VAULT_ADDR}/v1/${VAULT_NAMESPACE}/transit

    地址在代理部署配置中使用。

  4. 更新代理部署配置,以引用您的 Vault 实例:

    sed -i "s/\(vaultTransitEngineUrl:\).*$/\1 ${VAULT_TRANSIT_URL}/" */proxy/proxy-config.yaml
  5. 创建 Vault 策略和令牌

创建 Vault 策略和令牌

设置 Vault 实例后,为 Record Encryption 过滤器创建一个 Vault 策略和令牌。

  1. 创建 Vault 策略:

    vault policy write amqstreams_proxy_encryption_filter_policy vault/amqstreams_proxy_encryption_filter_policy.hcl

    使用由 Apache Kafka Proxy 的 Streams 提供的 HashiCorp 策略定义文件(.hcl)将策略写入 Vault。该策略名为 amqstreams_proxy_encryption_filter_policy

  2. 创建 Vault 令牌:

    vault token create \
      -display-name "amqstreams-proxy encryption filter" \
      -policy=amqstreams_proxy_encryption_filter_policy \
      -no-default-policy \
      -orphan \
      -field=token > vault.encryption.token

    该命令使用指定策略创建令牌,且没有关联的父令牌或默认策略。

  3. 创建包含令牌的 secret:

    oc create secret generic proxy-encryption-vault-token \
      -n proxy \
      --from-file=encryption-vault-token.txt=vault.encryption.token \
      --dry-run=client \
      -o yaml > base/proxy/proxy-encryption-vault-token-secret.yaml

    命令将 Vault 令牌存储在机密中,并将 secret 创建为 代理 命名空间中的 YAML 文件。

    当使用 Record Encryption 过滤器部署流 for Apache Kafka Proxy 时,proxy-encryption-vault-token-secret.yaml secret 会被应用到 OpenShift 集群。

提示

定期轮转密钥,以最大程度降低被入侵的密钥的影响。当使用密钥管理系统(KMS)时,如 HashiCorp Vault,轮转保存在 KMS 中的密钥加密密钥(KEK)。Apache Kafka 代理的流会自动管理 DEK 轮转。代理可能需要执行 occasional 重启才能获取新密钥。另外,加密的消息应包含密钥版本元数据来指示密钥轮转。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.