使用服务器端加密保护数据
重要
Amazon S3 现在将具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)作为 Amazon S3 中每个存储桶的基本加密级别。从 2023 年 1 月 5 日起,上传到 Amazon S3 的所有新对象都将自动加密,不会产生额外费用,也不会影响性能。S3 存储桶默认加密配置和上传的新对象的自动加密状态可在 AWS CloudTrail 日志、S3 清单、S3 Storage Lens 存储统计管理工具、Amazon S3 控制台中获得,并可用作 AWS Command Line Interface 和 AWS SDK 中的附加 Amazon S3 API 响应标头。有关更多信息,请参阅默认加密常见问题解答。
服务器端加密是指由接收数据的应用程序或服务在目标位置对数据进行加密。Amazon S3 在将您的数据写入 AWS 数据中心内的磁盘时会在对象级别加密这些数据,并在您访问这些数据时解密这些数据。只要您验证了您的请求并且拥有访问权限,您访问加密和未加密对象的方式就没有区别。例如,如果您使用预签名的 URL 来共享您的对象,那么对于加密和解密的对象,该 URL 的工作方式是相同的。此外,在您列出存储桶中的对象时,列表 API 操作会返回所有对象的列表(无论对象是否加密)。
默认情况下,所有 Amazon S3 存储桶都配置了加密,所有上传到 S3 存储桶的新对象都会自动静态加密。具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)是 Amazon S3 中每个存储桶的默认加密配置。要使用其他类型的加密,您可以指定要在 S3 PUT
请求中使用的服务器端加密类型,也可以在目标存储桶中设置默认加密配置。
如果您想在 PUT
请求中指定不同的加密类型,则可以使用具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)、具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS)或具有客户提供的密钥的服务器端加密(SSE-C)。如果您想在目标存储桶中设置不同的默认加密配置,则可以使用 SSE-KMS 或 DSSE-KMS。
注意
您不能对同一个对象应用不同类型的服务器端加密。
如果您需要加密现有对象,请使用 S3 批量操作和 S3 清单。有关更多信息,请参阅使用 Amazon S3 批量操作加密对象
对于服务器端加密,您有四个互斥的选项,具体取决于您选择如何管理加密密钥和要应用的加密层数。
具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)
默认情况下,所有 Amazon S3 存储桶都配置了加密。服务器端加密的默认选项是使用 Amazon S3 托管式密钥(SSE-S3)。每个对象都使用唯一的密钥来进行加密。作为额外的保护措施,SSE-S3 使用定期轮换的根密钥加密密钥本身。SSE-S3 使用可用的最强数据块密码之一 [即 256 位高级加密标准(AES-256)] 来加密您的数据。有关更多信息,请参阅 使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)。
具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)
具有 AWS KMS keys 的服务器端加密(SSE-KMS)是通过将 AWS KMS 服务与 Amazon S3 集成来提供的。使用 AWS KMS,您可以更好地控制您的密钥。例如,您可以查看单独的密钥、编辑控制策略以及遵循 AWS CloudTrail 中的密钥。此外,您还可以创建和管理客户自主管理型密钥,或者使用对于您、服务和区域为唯一的 AWS 托管式密钥。有关更多信息,请参阅 使用具有 AWS KMS 密钥的服务器端加密(SSE-KMS)。
具有 AWS Key Management Service(AWS KMS)密钥的双层服务器端加密(DSSE-KMS)
使用 AWS KMS keys 的双层服务器端加密(DSSE-KMS)与 SSE-KMS 类似,但 DSSE-KMS 应用的是两层单独的对象级加密,而不是一层。由于两层加密都应用于服务器端的对象,因此您可以使用各种 AWS 服务和工具来分析 S3 中的数据,同时使用可以满足合规性要求的加密方法。有关更多信息,请参阅 使用具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS)。
具有客户提供密钥的服务器端加密(SSE-C)
使用具有客户提供的密钥的服务器端加密(SSE-C)时,您管理加密密钥,而 Amazon S3 管理加密(在它对磁盘进行写入时)和解密(在您访问您的对象时)。有关更多信息,请参阅 使用具有客户提供的密钥的服务器端加密(SSE-C)。