启用密钥加密

本文档介绍了如何启用 存储的开发者应用消费者密钥(客户端凭据) 存储在 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">
  1. 执行以下命令以生成密钥库,用于存储将用于 加密 KEK。请严格按照所示方式输入命令。(您可以根据需要提供任何密钥库名称):
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    出现提示时,输入密码。在稍后进行的操作中,您将使用该密码 配置管理服务器和消息处理器。

    此命令会生成一个 kekstore.p12 密钥库文件,其中包含具有 别名 KEYSTORE_NAME

  2. (可选)使用以下命令验证文件是否已正确生成。如果文件 正确,则该命令会返回别名为 KEYSTORE_NAME 的键:
    keytool -list -keystore kekstore.p12

第 2 步:配置管理服务器

接下来,配置管理服务器。如果您在多个节点上安装了管理服务器, 您必须在每个节点上重复这些步骤

  1. 将您在第 1 步中生成的密钥库文件复制到管理服务器节点上的某个目录中,例如 /opt/apigee/customer/application。例如:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. 确保 apigee 用户可以读取该文件:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. 将以下属性添加到 /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 相同,具体取决于用于生成密钥库的工具。

  4. 使用以下命令重启管理服务器:
    /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.
    
  5. 如果您在多个节点上安装了管理服务器,请针对每项管理服务重复执行上面的第 1-4 步 服务器节点。

第 3 步:创建开发者应用

现在,管理服务器已更新,您必须创建开发者应用以触发生成 用于加密客户端凭据数据的密钥:

  1. 创建一个开发者应用,以触发创建数据加密密钥 (KEK)。对于步数, 请参阅注册应用
  2. 如果需要,您可以删除开发者应用。加密完成后,您无需保留密钥 密钥。

第 4 步:配置消息处理器

在消息处理器中启用加密之前,运行时请求将无法处理任何加密的凭据。

  1. 将您在第 1 步中生成的密钥库文件复制到消息处理器节点上的目录中, 例如 /opt/apigee/customer/application。例如:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. 确保 apigee 用户可以读取该文件:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. 将以下属性添加到 /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 相同 具体取决于用于生成密钥库的工具。

  4. 使用以下命令重启消息处理器:
    /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.
  5. 如果在多个节点上安装了消息处理器,请在每个节点上重复执行第 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 不适用 如果您使用环境变量来设置这些属性,则为可选。另请参阅 使用环境 变量