本文档介绍了如何启用 存储的开发者应用消费者密钥(客户端凭据) 存储在 Cassandra 数据库中。
概览
传统上,适用于私有云的 Apigee Edge 为键值对映射提供可选加密 (KVM) 数据和 OAuth 访问令牌。
下表介绍了适用于私有云的 Apigee 中静态数据的加密选项:
实体 | 默认启用加密 | 加密(可选) | 相关文档 |
KVM | 否 | 是 | 请参阅关于加密的 KVM。 |
OAuth 访问令牌 | 否 | 是 | 请参阅对令牌进行哈希处理以提高安全性。 |
开发者应用的使用方密钥 | 否 | 是 | 如需启用,请执行本文档中的配置步骤。 |
如需启用客户端凭据加密,您需要在 所有消息处理器和管理服务器节点:
- 创建一个密钥库来存储 密钥加密密钥 (KEK)。Apigee 使用此加密密钥对加密数据所需的密钥进行加密。
- 可修改所有管理服务器和消息处理器节点上的配置属性。
- 创建开发者应用以触发密钥创建。
- 重启节点。
本文档介绍了这些任务。
关于密钥的注意事项 加密功能
本文档中的步骤说明了如何启用 KEK 功能,让 Apigee 能够加密 用于加密开发者应用的密钥 使用者密钥静态存储在 Cassandra 数据库中时需要。
默认情况下,数据库中的任何现有值都将保持不变(纯文本形式)并且 继续照常运作
<ph type="x-smartling-placeholder">如果您对未加密的实体执行任何写入操作,系统会在 操作被保存。例如,如果您撤消了未加密的令牌,稍后又批准了 新批准的令牌将会被加密
确保密钥安全
请务必将存放 KEK 的密钥库的副本存储在安全的位置。我们建议您使用自己的 保存密钥库副本的安全机制。正如本文档中的说明中所述, 每个消息处理器和管理服务器节点上必须放置一个密钥库, 配置文件可以引用它 但是,存储 将密钥库的副本保存在其他位置,以便安全保管和作为备份。
启用密钥加密
请按照以下步骤对使用方密钥进行加密:
前提条件
在执行本文档中的步骤之前,您必须满足以下要求:
- 您必须安装或升级到适用于 Private Cloud 4.50.00.10 或更高版本的 Apigee Edge。
- 您必须是适用于私有云的 Apigee Edge 管理员。
第 1 步:生成密钥库
如需创建密钥库来保存密钥加密密钥 (KEK),请按以下步骤操作:
<ph type="x-smartling-placeholder">- 执行以下命令以生成密钥库,用于存储将用于
加密 KEK。请严格按照所示方式输入命令。(您可以根据需要提供任何密钥库名称):
keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \ -keystore kekstore.p12 -storetype PKCS12
出现提示时,输入密码。在稍后进行的操作中,您将使用该密码 配置管理服务器和消息处理器。
此命令会生成一个 kekstore.p12 密钥库文件,其中包含具有 别名 KEYSTORE_NAME。
- (可选)使用以下命令验证文件是否已正确生成。如果文件
正确,则该命令会返回别名为 KEYSTORE_NAME 的键:
keytool -list -keystore kekstore.p12
第 2 步:配置管理服务器
接下来,配置管理服务器。如果您在多个节点上安装了管理服务器, 您必须在每个节点上重复这些步骤
- 将您在第 1 步中生成的密钥库文件复制到管理服务器节点上的某个目录中,例如
/opt/apigee/customer/application
。例如:cp certs/kekstore.p12 /opt/apigee/customer/application
- 确保
apigee
用户可以读取该文件:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
chmod 400 /opt/apigee/customer/application/kekstore.p12
- 将以下属性添加到
/opt/apigee/customer/application/management-server.properties
。 如果该文件不存在,请创建该文件。另请参阅属性文件参考。
conf_keymanagement_kmscred.encryption.enabled=true # Fallback is true to ensure your existing plaintext credentials continue to work conf_keymanagement_kmscred.encryption.allowFallback=true conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME # These could alternately be set as environment variables. These variables should be # accessible to Apigee user during bootup of the Java process. If environment # variables are specified, you can skip the password configs below. # KMSCRED_ENCRYPTION_KEYSTORE_PASS= # KMSCRED_ENCRYPTION_KEK_PASS= See also Using environment variables for configuration properties. conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD
请注意,
KEK_PASSWORD
可能与KEYSTORE_PASSWORD
相同,具体取决于用于生成密钥库的工具。 - 使用以下命令重启管理服务器:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready
管理服务器准备就绪后,
wait_for_ready
命令会返回以下消息:Checking if management-server is up: management-server is up.
- 如果您在多个节点上安装了管理服务器,请针对每项管理服务重复执行上面的第 1-4 步 服务器节点。
第 3 步:创建开发者应用
现在,管理服务器已更新,您必须创建开发者应用以触发生成 用于加密客户端凭据数据的密钥:
- 创建一个开发者应用,以触发创建数据加密密钥 (KEK)。对于步数, 请参阅注册应用。
- 如果需要,您可以删除开发者应用。加密完成后,您无需保留密钥 密钥。
第 4 步:配置消息处理器
在消息处理器中启用加密之前,运行时请求将无法处理任何加密的凭据。
- 将您在第 1 步中生成的密钥库文件复制到消息处理器节点上的目录中,
例如
/opt/apigee/customer/application
。例如:cp certs/kekstore.p12 /opt/apigee/customer/application
- 确保
apigee
用户可以读取该文件:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
- 将以下属性添加到
/opt/apigee/customer/application/message-processor.properties
。 如果该文件不存在,请创建该文件。另请参阅属性文件参考。conf_keymanagement_kmscred.encryption.enabled=true # Fallback is true to ensure your existing plaintext credentials continue to work conf_keymanagement_kmscred.encryption.allowFallback=true conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME # These could alternately be set as environment variables. These variables should be # accessible to Apigee user during bootup of the Java process. If environment # variables are specified, you can skip the password configs below. # KMSCRED_ENCRYPTION_KEYSTORE_PASS= # KMSCRED_ENCRYPTION_KEK_PASS= See also Using environment variables for configuration properties. conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD
请注意,
KEK_PASSWORD
可能与KEYSTORE_PASSWORD
相同 具体取决于用于生成密钥库的工具。 - 使用以下命令重启消息处理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready
当消息处理器出现时,
wait_for_ready
命令返回以下消息 已准备好处理消息:Checking if message-processor is up: message-processor is up.
- 如果在多个节点上安装了消息处理器,请在每个节点上重复执行第 1-4 步 消息处理器节点
摘要
从现在开始创建的所有开发者应用的凭据密钥都会在以下位置加密: 存储在 Cassandra 数据库中。
将环境变量用于 配置属性
您也可以设置以下消息处理器和管理服务器配置 使用环境变量管理属性如果已设置,环境变量会替换属性 消息处理器或管理服务器配置文件中设置的值。
conf_keymanagement_kmscred.encryption.keystore.pass= conf_keymanagement_kmscred.encryption.kek.pass=
相应的环境变量如下:
export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD
如果您设置了这些环境变量,则可以从 消息处理器和管理服务器节点上的配置文件,因为它们将会被忽略:
conf_keymanagement_kmscred.encryption.keystore.pass conf_keymanagement_kmscred.encryption.kek.pass
属性文件参考文档
本部分介绍了您必须在所有消息处理器上设置的配置属性 管理服务器节点,如本文档前面所述。
属性 | 默认 | 说明 |
conf_keymanagement_kmscred.encryption.enabled
|
false
|
必须为 true 才能启用密钥加密。
|
conf_keymanagement_kmscred.encryption.allowFallback
|
false
|
将 allowFallback 设置为 true 以确保现有明文凭据继续有效。
|
conf_keymanagement_kmscred.encryption.keystore.path
|
不适用 | 提供消息处理器或管理服务器节点上 KEK 密钥库的路径。 请参阅第 2 步:配置管理 服务器和第 3 步:配置消息处理器。 |
conf_keymanagement_kmscred.encryption.kek.alias
|
不适用 | 将 KEK 存储在密钥库中的别名。 |
conf_keymanagement_kmscred.encryption.keystore.pass
|
不适用 | 如果您使用环境变量来设置这些属性,则为可选。另请参阅 使用环境 变量。 |
conf_keymanagement_kmscred.encryption.kek.pass
|
不适用 | 如果您使用环境变量来设置这些属性,则为可选。另请参阅 使用环境 变量。 |