数据加密

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

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

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

加密密钥范围

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

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

如果 KVM 政策指定 apiproxy 或 policy(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

有关向后兼容性的说明

如果您第一次安装 Apigee Hybrid 时移除替换文件中的加密密钥,则将有效地停用加密,且值会以未加密的形式存储。如果以后通过提供密钥来启用加密,则退出数据将保持未加密状态。但是,将来添加的所有数据都将进行被加密。系统会继续使用未加密的数据和新的加密数据正常运行。

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

如何创建编码密钥

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

以下示例命令会生成适当的、随机生成的、32 个字符的 Base64 编码字符串,其中不包含非打印字符:

LC_ALL=C tr -dc A-Za-z0-9_\!\@\#\$\%\^\&\*\(\)\\-+= < /dev/urandom | head -c 32  | openssl base64
PSFvX0BPc1Z2NVklcXdxcF8xR0N4MV4temFveStITU4=

或

LC_ALL=C tr -dc "[:print:]" < /dev/urandom | head -c 32 | openssl base64