服务器端加密是由接收数据的应用程序或服务在数据目的地对数据进行加密。Amazon S3 在将您的数据写入数据中心内的磁盘时会在对象级别上加密这些数据,并在您访问这些数据时为您解密这些数据。只要您验证了您的请求而且拥有访问权限,您访问加密和未加密对象的方式就没有区别。例如,若是您使用预签名的 URL 来共享您的对象,那么对于加密和解密对象,该 URL 的工做方式是相同的。此外,在您列出存储桶中的对象时,列表 API 会返回全部对象的列表(不管对象是否加密)。服务器
注意
您不能对同一个对象应用不一样类型的服务器端加密。ide
您有三个互斥选项,具体取决于您选择如何管理加密密钥:加密
具备 Amazon S3 托管密钥的服务器端加密 (SSE-S3)code
当您使用具备 Amazon S3 托管密钥的服务器端加密 (SSE-S3) 时,每一个对象均使用惟一密钥加密。做为额外的保护,它将使用按期轮换的主密钥对密钥自己进行加密。Amazon S3 服务器端加密使用可用的最强数据块密码之一(即 256 位高级加密标准 (AES-256))来加密您的数据。有关更多信息,请参阅使用具备 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 保护数据。对象
在 AWS Key Management Service 中存储客户主密钥 (CMK) 的服务器端加密 (SSE-KMS)it
在 AWS Key Management Service 中存储客户主密钥 (CMK) 的服务器端加密 (SSE-KMS) 与 SSE-S3 相似,使用该服务具备一些额外的好处,但也要额外收取费用。使用 CMK 须要单独的权限,该密钥可进一步防止未经受权地访问 Amazon S3 中的对象。SSE-KMS 还向您提供审核跟踪,显示您的 CMK 的使用时间和使用者。此外,您还能够建立和管理客户托管 CMK,或者使用您、服务和区域独有的 AWS 托管 CMK。有关更多信息,请参阅使用具备 AWS Key Management Service 中存储的 CMK 的服务器端加密 (SSE-KMS) 保护数据。class
具备客户提供密钥的服务器端加密 (SSE-C)服务器端
使用具备客户提供密钥的服务器端加密 (SSE-C) 时,您管理加密密钥,而 Amazon S3 管理加密(在它对磁盘进行写入时)和解密(在您访问您的对象时)。有关更多信息,请参阅经过使用客户提供的加密密钥的服务器端加密 (SSE-C) 保护数据。权限
客户端加密 是在将数据发送到 Amazon S3 以前加密数据的行为。要启用客户端加密,您能够选择如下方法:meta
在上传对象时 — 经过使用客户主密钥 (CMK) ID,客户端先向 AWS KMS 发送请求以获取可用于加密对象数据的 CMK。AWS KMS 返回两个随机生成的数据密钥版本:
下载对象时 — 客户端首先从 Amazon S3 下载加密的对象以及做为对象元数据存储的数据密钥的密码 blob 版本。而后,客户端将密码 blob 发送到 AWS KMS 以获取密钥的纯文本版本,以便让客户端解密对象数据。
客户端将为其上传的每一个对象获取一个惟一的数据密钥。
x-amz-meta-x-amz-key
)。您提供的客户端主密钥能够是对称密钥,也能够是公有/私有密钥对。