如何使用 AWS 数据库加密 SDK 进行客户端加密并在 DynamoDB 表中对加密属性进行搜索
使用 AWS 数据库加密 SDK 进行客户端加密并对 DynamoDB 表中的加密属性执行搜索
文章重点
在本文中,我们将介绍如何使用 AWS 数据库加密 SDK (DBESDK) 进行客户端数据加密,以保护客户的敏感信息。我们将讨论配置加密、在加密数据上进行搜索的步骤,以及如何在 DynamoDB 中实现这些功能。本文旨在帮助开发者提高应用程序的安全性,同时满足数据隐私法规的要求。
重要信息
随着现代应用程序收集大量客户数据,其中往往包含需要保护的个人身份信息PII,开发者往往需要在遵循如 通用数据保护法规 (GDPR) 和 加利福尼亚消费者隐私法案 (CCPA) 等数据隐私法规的同时,快速可靠地访问客户数据。Amazon DynamoDB 是高性能应用的理想选择。
尽管已有服务器端加密选项可以保护客户数据,开发者还可以添加客户端加密以增强数据安全。在本文中,我们将详细介绍如何利用 AWS 数据库加密 SDK 以保护敏感数据,并在 DynamoDB 表中对加密记录执行搜索。
客户端加密概述
为了保护静态数据,许多 AWS 服务与 AWS 密钥管理服务 (AWS KMS) 集成。在使用服务器端加密时,明文数据通过 HTTPS 加密后传输,再在服务端解密,最后重新加密后存储。而客户端加密 则是在本地加密数据,以确保数据在传输和静态状态中的安全性。
在使用客户端加密时,您需要在将数据发送到 AWS 服务之前,从源例如应用程序对明文数据进行加密。仅有正确权限的用户才能解密密文数据,因为数据是在您控制的环境中加密的,因此不会暴露给任何第三方,包括 AWS。
虽然客户端加密可以提升整体安全性,但它也会额外增加应用程序的复杂性,如密钥管理和安全执行加密任务。此外,客户端加密会减少数据的可携带性。对于加密后存储在数据库中的数据,通常无法在不先进行本地解密的情况下执行其他操作,如为数据创建索引或直接搜索。
蘑菇加速器pc端接下来,我们将介绍如何通过 AWS 数据库加密 SDK (DBESDK) 解决这些问题,以便在 DynamoDB 工作负载中实现客户端加密并执行搜索。
AWS 数据库加密 SDK 功能
DBESDK 可用来加密敏感属性,如含有 PII 的属性,以便在将其存储到 DynamoDB 表中时保护敏感数据。通过 DBESDK,应用程序能够确保在传输和存储时数据的安全性,因为数据不会暴露,除非被应用程序解密。同时,DBESDK 允许您通过对加密属性进行搜索来查找信息,使数据在数据库中保持安全。
在密钥管理方面,DBESDK 让您对数据进行直接控制,您可以指定自己的加密密钥。如果您使用 AWS KMS,则可通过策略清楚地区分可以访问特定加密数据的用户及无法访问的用户。如应用程序需要在单个表中存储多个租户的数据,DBESDK 支持为每个租户配置独立的密钥,以确保数据保护。有关多租户数据库可搜索加密的更多信息,请查看这里。
尽管 DBESDK 提供了多项功能来帮助您对数据库中的数据进行加密,本文将重点介绍在加密数据上搜索的能力。
AWS 数据库加密 SDK 如何与 DynamoDB 一起工作
在开始使用 AWS 数据库加密 SDK 之前,您需要完成几个步骤。首先,需要设置您的加密材料提供者库 (MPL),它为管理用于加密和解密的加密材料即密钥环和包裹密钥提供了底层抽象层。MPL 提供了与 AWS KMS 的集成,允许您使用对称 KMS 密钥作为包裹密钥。
以下是如何使用 DBESDK 进行客户端加密的一般步骤:
设置 MLP:为加密和解密设置 MLP。配置 DynamoDB 表:定义需要加密的属性并配置搜索条件。生成密钥和加密数据: 对数据进行加密并实现搜索逻辑。接下来,我们将通过示例更深入的探讨如何完成这些步骤。
AWS 数据库加密 SDK 示例
下面我们将展示如何设置 DBESDK 并查看其实际应用。为了方便说明,我们将构建一个简单的应用程序来添加记录并执行搜索。
1 配置库和密钥
为确保客户端加密正常工作,您需要设置集成开发环境 (IDE),比如AWS Cloud9。
首先,创建用于加密的 KMS 密钥并创建 DynamoDB 表作为密钥库,以存储分支密钥。这一步骤只需执行一次。
2 定义 DynamoDB 表及其属性
在这一步,您将定义表架构和需要加密的属性。以下是示例代码:
javaprivate static void keyStoreCreateTable(String keyStoreTableName String logicalKeyStoreName String kmsKeyArn) { // 创建密钥库表的逻辑}
3 插入和查询数据
接下来,您可以使用 DBESDK 从应用程序中向 DynamoDB 表中插入新项目。DBESDK 会自动从密钥环中获取数据密钥,执行本地加密,然后调用 put 方法将数据存储。
以下是代码示例,用于插入数据并查询特定订单:
javaprivate static void insertOrder(HashMap order DynamoDbClient ddb String ddbTableName) { // 插入订单数据逻辑}
private static void runQueryEmail(DynamoDbClient ddb String ddbTableName) { // 查询邮箱的订单逻辑}
结论
您刚刚了解了如何构建一个在客户端加密敏感数据、将其存储在 DynamoDB 表中并透明地在加密数据上执行查询的应用程序。这使您的应用能够充分利用加密数据,同时遵循安全性和合规性要求。
示例代码可在 GitHub 查看。要深入了解,您可以参考 AWS 数据库加密 SDK 的文档。
如果您对此文章有反馈,请在评论部分留言。如对文章有疑问,欢迎联系 AWS 支持。

欲了解更多 AWS 安全新闻,欢迎关注我们的 Twitter。
使用 AWS DMS 优化数据库迁移成本:第二部分 数据库博客
优化 AWS DMS 数据库迁移成本:第二部分关键要点在本系列的第二部分中,我们将聚焦于如何定期评估 AWS DMS 实例的大小并根据需求进行扩展或缩减,同时介绍如何利用 AWS DMS 的功能和配置来优化迁移成本。我们强调了以下策略:定期评估实例大小以保持最佳性能和成本效益。通常在完整加载和 CD...
将 Tableau 和 Microsoft Entra ID 与 Amazon Redshift 整
将 Tableau 和 Microsoft Entra ID 与 Amazon Redshift 集成使用 AWS IAM 身份中心关键要点在这篇文章中,我们将介绍如何通过 AWS IAM 身份中心,将 Tableau 和 Microsoft Entra ID 集成到 Amazon Redshift...