数据加密

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

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

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

加密密钥范围

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

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

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

缓存 仅限环境

关于默认加密密钥

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

在您创建新的 Apigee Hybrid 组件时,默认密钥会应用于所有这些组件。

更改默认加密密钥

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

  1. 将以下节复制到您的替换文件中。通过此配置,您可以更改组织级别的 KMS 和 KVM 加密密钥以及环境级别的 KVM 和缓存加密密钥:
    defaults:
      org:
        kmsEncryptionKey: base64-encoded-key
        kvmEncryptionKey: base64-encoded-key
        contractEncryptionKey: base64-encoded-key
    
      env:
        kvmEncryptionKey: base64-encoded-key
        cacheEncryptionKey: base64-encoded-key
  2. 为您要替换的每个密钥生成一个新密钥。每个密钥必须是长度为 16、24 或 32 字节长的 Base64 编码字符串。另请参阅如何创建编码密钥
  3. 请将默认密钥替换为新密钥。在此示例中,所有默认密钥都替换为密钥:
    defaults:
      org:
        kmsEncryptionKey: "JVpTb1FwI0otUHo2RUdRN3pnVyQqVGlMSEFAJXYmb1c="
        kvmEncryptionKey: "T3VkRGM1U3cpOFgtNk9fMnNZU2NaSVA3I1BtZWxkaUU="
        contractEncryptionKey: "RDEyMzQ1Njc4OTAxMjM0NQ=="
      env:
        kvmEncryptionKey: "Q3h6M3R6OWdBeipxTURfKjQwQVdtTng2dU5mODFHcyE="
        cacheEncryptionKey: "b2NTVXdKKjBzN0NORF9XSm9tWFlYKGJ6NUhpNystJVI="

替换默认密钥

您可以替换替换文件中指定的组织或特定环境的密钥。创建组件时,您为组织或各个环境指定的密钥将替换默认密钥。

  1. 将以下节复制到您的替换文件中。通过此配置,您可以更改组织级别的 KMS 和 KVM 加密密钥以及环境级别的 KVM 和缓存加密密钥:
    org:YOUR_ORG_NAME
    
    kmsEncryptionKey: base64-encoded-key
    kvmEncryptionKey: base64-encoded-key
    contractEncryptionKey: base64-encoded-key
    
    envs
      - name: ENV_NAME
        kvmEncryptionKey: base64-encoded-key
        kmsEncryptionKey: base64-encoded-key
        cacheEncryptionKey: base64-encoded-key
    
      - name: 2ND_ENV_NAME
        kvmEncryptionKey: base64-encoded-key
        kmsEncryptionKey: base64-encoded-key
        cacheEncryptionKey: base64-encoded-key
  2. 为您要替换的每个密钥生成一个新密钥。每个密钥必须是长度为 16、24 或 32 字节长的 Base64 编码字符串。另请参阅如何创建编码密钥
  3. 指定要替换的密钥。在此示例中,所有默认密钥都替换为密钥:
    org:hybrid-org
    
    kmsEncryptionKey: "QTEyMz1b2jc4OTAxMjM0NQ=="
    kvmEncryptionKey: "QzEyM2c3Njc4OTAxMjM0NQ=="
    contractEncryptionKey: "RDEyMzQ1Njc4OTAxMjM0NQ=="
    
    envs:
      - name: prod
        kvmEncryptionKey: "QzEyM2c3Njc4OTAxMjM0NQ=="
        kmsEncryptionKey: "QTEyMz1b2jc4OTAxMjM0NQ=="
        cacheEncryptionKey: "QjEyAvC1Njc4OTAxMjM0NQ=="
    
    envs:
      - name: test
        kvmEncryptionKey: "A1b2C3d4E5f6G7h8I9j10K=="
        kmsEncryptionKey: "QTEyMz1b2jc4OTAxMjM0NQ=="
        cacheEncryptionKey: "B1c2D3e4F5f6H7i8J9k10L=="

应用密钥更改

使用以下 Helm 命令将替换文件应用于您的集群:
  • 如果您更改了组织的合同密钥或 KVM 密钥,请更新组织:
    helm upgrade ORG_NAME apigee-org/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    
  • 如果您更改了环境的缓存密钥或 KVM 密钥,请更新环境:
    helm upgrade ENV_NAME apigee-env/ \
      --namespace apigee \
      --atomic \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE.yaml
    
  • 如果您更改了 KMS 密钥,请更新组织和环境:
    helm upgrade ORG_NAME apigee-org/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    
    helm upgrade ENV_NAME apigee-env/ \
      --namespace apigee \
      --set env=ENV_NAME \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

有关向后兼容性的说明

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

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

如何创建编码密钥

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

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

head -c 32 /dev/random | openssl base64