数据加密

默认情况下,以下数据以加密方式存储在 Hybrid 运行时层面中:

  • 密钥管理系统 (KMS) 数据
  • 键值对映射 (KVM) 数据
  • 缓存数据

数据加密不需要您执行任何特殊配置。但是,如果您出于某种原因想要使用自己的加密密钥(替换默认加密密钥),则可以按照本主题中的说明执行操作。

加密密钥范围

用于 KMS、KVM 和缓存的加密密钥具有范围。例如,KMS 密钥具有组织范围。这意味着该密钥用于加密整个组织的 KMS 数据。下表列出了每种密钥类型的范围:

加密密钥 范围
KMS 仅限组织
KVM 组织或环境

如果 KVM 政策指定 apiproxypolicy(API 代理修订版本)范围,则组织级别密钥将用于加密数据。如需了解如何在 Apigee Edge 中使用 KVM 的概览,请参阅使用键值对映射

缓存 仅限环境

关于默认加密密钥

默认情况下,Apigee Hybrid 提供一组用于加密 KVM、KMS 和缓存数据的 Base64 编码密钥。Apigee Hybrid 安装程序将密钥作为 Kubernetes Secret 存储在运行时层面,并使用这些密钥通过 AES-128 标准加密来加密数据。密钥由您控制;Hybrid 管理层面从不会注意到其存在。

更改默认加密密钥

虽然不是必需的,但是您可以根据需要更改任何默认加密密钥。要替换一个或多个默认密钥,请按以下步骤操作:

  1. 将以下节复制到您的替换文件中。通过此配置,您可以更改组织级别的 KMS 和 KVM 加密密钥以及环境级别的 KVM 和缓存加密密钥:
    defaults:
      org:
        kmsEncryptionKey: base64-encoded-key
        kvmEncryptionKey: base64-encoded-key
      env:
        kvmEncryptionKey: base64-encoded-key
        cacheEncryptionKey: base64-encoded-key
  2. 为您要替换的每个密钥生成一个新密钥。每个密钥必须是长度为 16、24 或 32 字节长的 Base64 编码字符串。另请参阅如何创建编码密钥
  3. 请将默认密钥替换为新密钥。在此示例中,所有默认密钥都替换为密钥:
    defaults:
      org:
        kmsEncryptionKey: "JVpTb1FwI0otUHo2RUdRN3pnVyQqVGlMSEFAJXYmb1c="
        kvmEncryptionKey: "T3VkRGM1U3cpOFgtNk9fMnNZU2NaSVA3I1BtZWxkaUU="
      env:
        kvmEncryptionKey: "Q3h6M3R6OWdBeipxTURfKjQwQVdtTng2dU5mODFHcyE="
        cacheEncryptionKey: "b2NTVXdKKjBzN0NORF9XSm9tWFlYKGJ6NUhpNystJVI="
  4. 按如下方式将替换文件应用于您的集群:
    • 如果您更改了 KVM 或缓存键,请仅更新环境:
      $APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --env env_name
    • 如果您更改了 KMS 密钥,请更新组织和环境:
      $APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --env env_name --org org_name
  5. 重启 apigee-runtimeapigee-mart pod。

有关向后兼容性的说明

首次安装 Apigee Hybrid 时,系统会使用默认加密密钥。如果您移除了加密密钥,则实际效果就是停用加密,且后续值会以未加密的形式存储。如果以后通过提供密钥来启用加密,则任何现有的未加密数据将保持未加密状态;但是,将来添加的所有数据都将进行加密。系统会继续使用未加密的数据和新的加密数据正常运行。

另请注意,运行时数据一旦加密,便无法再更改加密密钥。

如何创建编码密钥

KVM、KMS 和缓存加密需要使用格式正确的 Base-64 编码密钥。用于这些用途的密钥必须由 16、24 或 32 字节的字符串进行 Base-64 编码,如以下步骤所述:

以下示例命令会生成一个合适且随机生成的字符串,它包含 32 个字符并采用 Base64 编码:

head -c 32 /dev/random | openssl base64