启用密钥加密

本文档介绍了如何启用存储在 Cassandra 数据库中的 开发者应用消费者密钥(客户端凭据)的加密功能。

概览

传统上,Apigee Edge for Private Cloud 为键值对映射 (KVM) 数据和 OAuth 访问令牌提供了可选加密功能。

下表介绍了适用于私有云的 Apigee 中静态数据的加密选项:

实体 默认启用加密 可选加密 相关文档
KVM 否 是 请参阅关于加密的 KVM。
OAuth 访问令牌 否 是 请参阅对令牌进行哈希处理以提高安全性。
开发者应用消费者密钥 否 是 如需启用,请执行本文档中的配置步骤。

如需启用客户端凭据加密,您需要在所有消息处理器和管理服务器节点上执行以下任务:

  • 创建密钥库以存储 密钥加密密钥 (KEK)。Apigee 使用此加密密钥来加密加密数据所需的密钥。
  • 修改所有管理服务器和消息处理器节点上的配置属性。
  • 创建开发者应用以触发密钥创建。
  • 重启节点。

本文档介绍了这些任务。

关于密钥 加密功能,您需要了解以下信息

本文档中的步骤介绍了如何启用 KEK 功能,该功能允许 Apigee 在开发者应用 消费者密钥静态存储在 Cassandra 数据库中时,对用于加密这些密钥的 密钥进行加密。

默认情况下,数据库中的任何现有值都将保持不变(纯文本),并将 继续像以前一样工作。

如果您对未加密的实体执行任何写入操作,则在保存该 操作时,该实体将被加密。例如,如果您撤消未加密的令牌,然后稍后批准 该令牌,则新批准的令牌将被加密。

确保密钥安全

请务必将存储 KEK 的密钥库的副本 存储在安全的位置。我们建议您使用自己的 安全机制来保存密钥库的副本。如本文档中的说明所述, 必须在每个消息处理器和管理服务器节点上放置一个密钥库,以便本地 配置文件可以引用它。 但同样重要的是,将密钥库的 副本存储在其他位置,以确保安全并作为备份。

启用密钥加密

请按照以下步骤操作,以启用消费者密钥加密:

前提条件

在执行本文档中的步骤之前,您必须满足以下要求:

  • 您必须安装或升级到 Apigee Edge for Private Cloud 4.50.00.10 或更高版本。
  • 您必须是适用于私有云的 Apigee Edge 管理员。

第 1 步:生成密钥库

请按照以下步骤创建密钥库以保存密钥加密密钥 (KEK):

  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 不适用 如果您使用环境变量设置这些属性,则此属性为可选属性。另请参阅 使用环境变量设置配置属性。