【问题标题】:DynamoDB: can we use encryption and cross-region replication together?DynamoDB:我们可以同时使用加密和跨区域复制吗?
【发布时间】:2016-11-09 17:12:02
【问题描述】:

DynamoDB:我们可以同时使用加密和跨区域复制吗?

我们正在为我们的新应用程序评估 DynamoDB。我们的要求是:

  • 静态数据加密
  • 用于灾难恢复的跨区域复制。我们在某个地区的应用必须仅依赖该地区的服务

使用 AWS 提供的 Java 库可以单独满足我们的要求。解决方案是:

但是,我们不确定这些解决方案是否可以协同工作。我们担心我们将无法解密跨区域复制的记录。客户端加密解决方案建议使用 KMS 管理的密钥在根处建立密钥层次结构。 KMS 是特定于区域的,因此如果我们将记录复制到另一个区域,我们将无法解密它们。其他区域无法访问加密密钥。

问题是:

  • 如果加密密钥在KMS中,是不是就无法解密或跨区域复制记录?
  • 是否有推荐的方法来复制加密的 DynamoDB 记录?以前有人这样做过吗?
  • 我们应该考虑其他替代方案吗?

【问题讨论】:

  • 我投票结束这个问题作为题外话。我不确定,但也许 dba 是一个更好的网站来询问这个问题。
  • 根据您需要恢复数据库的时间范围,您可以尝试备份到 S3 并复制它。 stackoverflow.com/questions/23510704/…

标签: amazon-web-services encryption amazon-dynamodb replication aws-kms


【解决方案1】:

你是对的。由于 KMS 密钥无法跨区域共享,因此设置将无法正常工作。

假设您将数据从区域 R1 复制到 R2,它们分别具有 KMS 密钥 K1 和 K2。我可以建议以下替代方案:

  1. 稍微修改库,使其在复制期间使用 K1 解密来自 R1 的数据并使用 K2 重新加密。您会对DynamoDBStreamsRecordTransformer 课程感兴趣。
  2. 在 R1 和 R2 中导入您自己的密钥材料。查看相关文档here
    • 警告:根据您的用例,操作上可能会很痛苦。

更新:也添加您的想法,以便它可以帮助将来遇到此问题的任何人:

  1. 创建您自己的纯文本数据密钥(可能使用 KMS 的 GenerateRandom API),同时使用 K1 和 K2(使用 Encrypt API)对其进行加密,并将生成的密码文本与您的数据一起存储在两个地区。
    • 警告:每次更新都需要跨区域调用。在选项 #1 中,更新是异步的。

【讨论】:

  • 谢谢!关于 DynamoDBStreamsRecordTransformer 的有趣想法。我将对此进行更详细的研究。同意处理自己的关键材料在操作上很困难。还有另一种破解加密库的可能性,使其存储数据加密密钥的两份副本——一份使用 K1 加密,另一份使用 K2 加密。然后 R1 中的代码使用 K1 解密数据加密密钥的第一个副本,R2 中的代码使用 K2 解密数据加密密钥的第二个副本。然后两个区域的代码都可以解密数据。
  • 只有当 you 可以向 KMS 提供明文数据密钥并返回加密数据密钥时才能工作。它支持吗?我在这里看不到类似的东西:docs.aws.amazon.com/kms/latest/APIReference/API_Operations.html
  • 我不确定将您自己的密钥材料导入两个区域的 KMS 是否可行。根据 AWS 文档,“密文在 CMK 之间不可移植。当您在 KMS CMK 下加密数据时,密文无法使用任何其他 CMK 解密。这适用于所有 KMS CMK,即使您导入相同的密钥材料也仍然适用进入不同的 CMK。”这似乎是说即使使用相同的密钥材料,不同的 CMK 也无法解密彼此的密文。注意 - 来自 ketan 在 #2 中链接到的同一链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多