【发布时间】:2015-08-17 18:34:12
【问题描述】:
我想在 Amazon S3 上启用 SSE-S3。我单击属性并选中 AES-256 的加密框。它说加密,然后完成。但是我仍然可以在不提供密钥的情况下读取文件,并且当我再次检查属性时,它会显示未选中的单选按钮。我做对了吗?是加密的吗?好混乱。
【问题讨论】:
我想在 Amazon S3 上启用 SSE-S3。我单击属性并选中 AES-256 的加密框。它说加密,然后完成。但是我仍然可以在不提供密钥的情况下读取文件,并且当我再次检查属性时,它会显示未选中的单选按钮。我做对了吗?是加密的吗?好混乱。
【问题讨论】:
您正在 S3 控制台中查看存储桶的视图,该视图显示多个文件,或仅显示一个文件但未选择该文件。单选按钮允许您将您选择的所有项目设置为您在单选按钮中选择的值,但是只要显示多个文件,单选按钮就会保持空白,因为它们只是为了让您进行更改而不是显示你现有对象的值。
单击单个文件并查看其属性,您会看到该文件以 server-side-encryption = AES256 存储。
是的,您无需解密即可下载文件,因为此功能是静态数据的服务器端加密——文件在存储到物理介质之前由 S3 加密S3 运行。这通常是出于合规目的,其中监管限制或其他合同义务要求数据在静态加密。
加密密钥由 S3 与对象分开存储,并由 S3 管理。事实上,加密密钥实际上是由 S3 存储、加密的。 (它们为每个对象生成一个密钥,并使用主密钥以加密形式存储该密钥)。
加密数据的解密无需您付出任何努力。当您
GET一个加密对象时,我们会获取并解密密钥,然后使用它来解密您的数据。https://aws.amazon.com/blogs/aws/new-amazon-s3-server-side-encryption/
对于传输中的数据,无论您何时使用 HTTPS,S3 都会对其进行加密。
不同于控制台中可用的功能,S3 also supports server-side AES-256 encryption with keys you manage。在这种称为 SSE-C 的场景中,您仍然不负责实际的加密/解密,因为 S3 仍然为您执行此操作。不同之处在于 S3 不存储密钥,您必须通过 GET 请求向 S3 提供密钥,以便 S3 获取对象、解密并将其返回给您。如果您没有提供正确的密钥,S3 将不会费心返回对象——即使是加密形式。 S3 知道您是否通过GET 请求发送了正确的密钥,因为 S3 将密钥的加盐 HMAC 与对象一起存储,以便稍后在您尝试获取对象时验证您发送的密钥。
此功能(您可以在其中管理自己的密钥)需要 HTTPS(否则您将通过 Internet 发送未加密的加密密钥)并且只能通过 API 而不是控制台访问。
您不能使用 Amazon S3 控制台上传对象和请求 SSE-C。您也不能使用控制台更新(例如,更改存储类或添加元数据)使用 SSE-C 存储的现有对象。
http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
当然,如果您没有可靠的密钥管理基础架构,这种方法(使用客户管理的密钥)尤其危险,因为如果您丢失了用于上传文件的密钥,该文件出于所有实际目的,已经丢失了。
【讨论】: