默认情况下,以下数据以加密方式存储在 Hybrid 运行时层面中:
- 缓存数据
- 合同密钥数据
- 密钥管理系统 (KMS) 数据
- 键值对映射 (KVM) 数据
数据加密不需要您执行任何特殊配置。但是,如果您出于某种原因想要使用自己的加密密钥(替换默认加密密钥),则可以按照本主题中的说明执行操作。
加密密钥范围
Apigee Hybrid 加密密钥具有范围。例如,KMS 密钥具有组织范围。这意味着该密钥用于加密整个组织的 KMS 数据。下表列出了每种密钥类型的范围:
加密密钥 | 范围 |
---|---|
合同形式 | 仅限组织 |
KMS | 仅限组织 |
KVM |
组织或环境
如果 KVM 政策指定 |
缓存 | 仅限环境 |
关于默认加密密钥
默认情况下,Apigee Hybrid 提供一组用于加密合同、KVM、KMS 和缓存数据的 Base64 编码密钥。Apigee Hybrid 安装程序将密钥作为 Kubernetes Secret 存储在运行时层面,并使用这些密钥通过 AES-128 标准加密来加密数据。密钥由您控制;Hybrid 管理层面从不会注意到其存在。
在您创建新的 Apigee Hybrid 组件时,默认密钥会应用于所有这些组件。
更改默认加密密钥
虽然不是必需的,但是您可以根据需要更改任何默认加密密钥。要替换一个或多个默认密钥,请按以下步骤操作:
- 将以下节复制到您的替换文件中。通过此配置,您可以更改组织级别的 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
- 为您要替换的每个密钥生成一个新密钥。每个密钥必须是长度为 16、24 或 32 字节长的 Base64 编码字符串。另请参阅如何创建编码密钥。
- 请将默认密钥替换为新密钥。在此示例中,所有默认密钥都替换为密钥:
defaults: org: kmsEncryptionKey: "JVpTb1FwI0otUHo2RUdRN3pnVyQqVGlMSEFAJXYmb1c=" kvmEncryptionKey: "T3VkRGM1U3cpOFgtNk9fMnNZU2NaSVA3I1BtZWxkaUU=" contractEncryptionKey: "RDEyMzQ1Njc4OTAxMjM0NQ==" env: kvmEncryptionKey: "Q3h6M3R6OWdBeipxTURfKjQwQVdtTng2dU5mODFHcyE=" cacheEncryptionKey: "b2NTVXdKKjBzN0NORF9XSm9tWFlYKGJ6NUhpNystJVI="
替换默认密钥
您可以替换替换文件中指定的组织或特定环境的密钥。创建组件时,您为组织或各个环境指定的密钥将替换默认密钥。
- 将以下节复制到您的替换文件中。通过此配置,您可以更改组织级别的 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
- 为您要替换的每个密钥生成一个新密钥。每个密钥必须是长度为 16、24 或 32 字节长的 Base64 编码字符串。另请参阅如何创建编码密钥。
- 指定要替换的密钥。在此示例中,所有默认密钥都替换为密钥:
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