使用具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS) - Amazon Simple Storage Service

使用具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS)

在将对象上传到 Amazon S3 时,使用具有 AWS Key Management Service(AWS KMS)密钥的双层服务器端加密(DSSE-KMS)将会对于对象应用两层加密。DSSE-KMS 可帮助您更轻松地满足合规性标准,这些标准要求您对数据应用多层加密并完全控制您的加密密钥。

DSSE-KMS 中的“双”是指应用于数据的两个独立的 AES-256 加密层:

  • 第一层:数据使用由 AWS KMS 生成的唯一数据加密密钥(DEK)进行加密

  • 第二层:已加密的数据使用由 Amazon S3 管理的单独 AES-256 加密密钥再次加密

这与标准 SSE-KMS 不同,后者仅应用单层加密。双层方法可确保即使一个加密层遭到破坏,您的数据仍受到第二层保护,从而增强了安全性。这种额外的安全性伴随着处理开销和 AWS KMS API 调用的增加,与标准 SSE-KMS 相比,这会导致成本更高。有关 DSSE-KMS 定价的更多信息,请参阅《AWS Key Management Service Developer Guide》中的 AWS KMS key concepts 以及 AWS KMS 定价

将 DSSE-KMS 加密用于 Amazon S3 存储桶时,AWS KMS 密钥必须位于该存储桶所在的同一区域中。此外,当为对象请求 DSSE-KMS 时,作为对象元数据一部分的 S3 校验和将以加密形式存储。有关校验和的更多信息,请参阅在 Amazon S3 中检查对象完整性

注意

DSSE-KMS 不支持 S3 存储桶密钥。

DSSE-KMS 和标准 SSE-KMS 之间的主要区别在于:

  • 加密层:DSSE-KMS 应用两个独立的 AES-256 加密层,而标准 SSE-KMS 应用一层

  • 安全性:DSSE-KMS 提供针对潜在加密漏洞的增强保护

  • 合规性:DSSE-KMS 有助于满足强制要求多层加密的监管要求

  • 性能:由于额外的加密处理,DSSE-KMS 的延迟稍高

  • 成本:由于计算开销增加和额外的 AWS KMS 操作,DSSE-KMS 会产生更高的费用

要求使用具有 AWS KMS keys 的双层服务器端加密(DSSE-KMS)

如果要求对特定 Amazon S3 存储桶中的所有对象进行双层服务器端加密,则可以使用存储桶策略。例如,如果请求不包含用于请求服务器端加密(DSSE-KMS)的 x-amz-server-side-encryption 标头,则下面的存储桶策略将拒绝所有人的上传对象(s3:PutObject)权限。

JSON
{ "Version":"2012-10-17", "Id": "PutObjectPolicy", "Statement": [{ "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms:dsse" } } } ] }