使用具有 AWS KMS 托管密钥的服务器端加密 (SSE-KMS) 保护数据
SSE-KMS 的要点是:
-
您可以选择自行创建和管理加密密钥,也可以选择使用由服务按区域级别为某个客户生成的唯一的默认服务密钥。
-
响应中的 ETag 不是对象数据的 MD5。
-
用于加密您的数据的数据密钥也会被加密并与它们保护的数据一起存储。
-
可以从 AWS KMS 控制台创建、轮换或禁用可审核的主密钥。
-
AWS KMS 中的安全控制可帮助您满足与加密相关的合规性要求。
使用具有 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 保护数据
服务器端加密保护静态数据。Amazon S3 使用唯一的密钥来加密每个对象。作为额外的保护,它将使用定期轮换的主密钥对密钥本身进行加密。Amazon S3 服务器端加密使用可用的最强数据块密码之一(即 256 位高级加密标准 (AES-256))来加密您的数据。
如果需要对存储在存储桶中的所有对象执行服务器端加密,请使用存储桶策略。例如,以下存储桶策略拒绝上传对象的权限,除非请求包含用于请求服务器端加密的 x-amz-server-side-encryption
标头
通过使用客户提供的加密密钥的服务器端加密 (SSE-C) 保护数据
使用客户提供的加密密钥的服务器端加密 (SSE-C) 允许您设置自己的加密密钥。使用您作为请求的一部分提供的加密密钥,Amazon S3 在写入磁盘时管理加密并在您访问对象时管理解密。因此,您不需要维护任何代码来执行数据加密和解密。您只需管理您提供的加密密钥。
Amazon S3 不存储您提供的加密密钥,而是存储加密密钥添加了随机数据的 HMAC 值来验证未来的请求。无法使用添加了随机数据的 HMAC 值来推导出加密密钥的值或解密加密对象的内容。这意味着,如果您丢失加密密钥,则会失去该对象。
SSE-C 的要点是:
-
您必须使用 HTTPS。
重要
在使用 SSE-C 时,Amazon S3 会拒绝通过 HTTP 提出的所有请求。出于安全原因,我们建议您考虑您错误地使用 HTTP 发送的任何密钥都将被外泄。您应丢弃该密钥,并根据需要轮换密钥。
-
响应中的 ETag 不是对象数据的 MD5。
-
您管理哪个加密密钥用于加密哪个对象的映射。Amazon S3 不存储加密密钥。您负责跟踪为哪个对象提供了哪个加密密钥。
-
如果您的存储桶启用了版本控制,则您使用此功能上传的每个对象版本可能都具有自己的加密密钥。您负责跟踪哪个加密密钥用于哪个对象版本。
-
因为您在客户端管理加密密钥,所以也要在客户端管理所有额外的保护措施,例如密钥轮换。
警告
如果您丢失加密密钥,则针对某个对象的没有其加密密钥的任何 GET 请求都会失败,并且您将失去该对象。
-