前言
Amazon Simple Storage Service (Amazon S3) https://aws.amazon.com/s3/ 旨在为您的对象以及与您的对象关联的元数据提供 99.999999999%(11 个 9)的持久性。您可以放心的是,Amazon S3 会准确存储您放入
https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html 的内容,并且会准确返回您获取时存储的内容
https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html 。为了确保正确地来回传输对象,Amazon S3 会使用校验和,后者基本上来说是一种数字指纹。
Amazon S3 的 PutObgect 函数已经允许您传递对象的 MD5 https://en.wikipedia.org/wiki/MD5 校验和,并且仅在您提供的值与 Amazon S3 计算的值相匹配时才接受该运算。虽然这允许 Amazon S3 检测数据传输错误,但这确实意味着您需要在调用 PutObgect 之前或调用 GetObgect 之后计算校验和。此外,计算大型(多 GB 甚至多 TB)对象的校验和可能需要大量计算,并可能导致出现瓶颈。实际上,一些大型 Amazon S3 用户已经构建了专门用于计算和验证校验和的特殊用途 Amazon EC2 机群。
新的校验和支持
现在,您可以非常轻松地计算和存储 Amazon S3 中存储的数据的校验和,并使用校验和来检查上载和下载请求的完整性。您可以使用这项新功能来实施特定于您所在行业的数字保护最佳实践和控制措施。尤其是,在将每个对象上载到 S3 时,您可以指定使用四种广泛使用的校验和算法( SHA-1、SHA-256、CRC-32 和 CRC-32C )中的任何一种。
-
SHA-1:https://en.wikipedia.org/wiki/SHA-1
-
SHA-256:https://en.wikipedia.org/wiki/SHA-2
-
CRC-32: https://docs.microsoft.com/en-us/openspecs/office_protocols/ms-abs/06966aa2-70da-4bf9-8448-3355f277cd77?redirectedfrom=MSDN
-
CRC-32C:https://github.com/google/crc32c
以下是此项新功能的主要方面:
对象上载:
最新版本的亚马逊云科技开发工具包会在上载过程中计算指定的校验和,并在上载结束时将其包含在 HTTP 尾部 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Trailer 。
您还可以选择提供预先计算的校验和。无论使用哪种方式,如果请求中的值与 Amazon S3 计算的值匹配,Amazon S3 都会验证校验和并接受运算。结合使用 HTTP 尾部,此功能可以大大加快客户端完整性检查的速度。
分段对象上传:
亚马逊云科技开发工具包现在利用客户端并行机制,并为分段上传
https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html 的每个部分计算校验和。所有分段的校验和本身都已经过校验和,且这些校验和的校验和在上载完成时均被传输到 Amazon S3。Add-on的升级。接下来分别介绍这三部分的升级过程:
校验和存储和持久性
经过验证的校验和以及指定的算法作为对象元数据的一部分进行存储。如果为对象请求使用 KMS 密钥进行服务器端加密 https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html ,则校验和将以加密形式存储。算法和校验和在对象的整个生命周期中始终保持不变,即使它更改了存储类别 https://aws.amazon.com/s3/storage-classes/ 或被更新的版本取代也是如此。它们还作为 Amazon S3 复制
https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html 的一部分进行传输。
校验和检索
新的 GetObgectAttributes 函数返回对象以及每个部分(如果适用)的校验和。
校验和的实际应用
您可以通过亚马逊云科技命令行界面 (CLI) https://aws.amazon.com/cli/ 、 亚马逊云科技开发工具包 https://aws.amazon.com/tools/ 或 Amazon S3 控制台
https://s3.console.aws.amazon.com/s3/home 访问此功能。在控制台中,我在准备上载对象时启用了其他校验和选项:
然后我选择了一个校验和函数:
如果我已经计算了校验和,我可以输入它,否则控制台将计算它。
上载完成后,我可以查看对象的属性以查看校验和:
Amazon S3 清单报告
https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html 还列出了每个对象的校验和函数。
根据我自己的代码,开发工具包可以为我计算校验和:
with open(file_path, 'rb') as file:
r = s3.put_object(
Bucket=bucket,
Key=key,
Body=file,
ChecksumAlgorithm='sha1'
)
或者我可以自己计算校验和并将其传递给 put_object:
with open(file_path, 'rb') as file:
r = s3.put_object(
Bucket=bucket,
Key=key,
Body=file,
ChecksumSHA1='fUM9R+mPkIokxBJK7zU5QfeAHSy='
)
*左滑查看更多
当我检索对象时,我指定了校验和模式来指示我想要验证返回的对象:
r = s3.get_object(Bucket=bucket, Key=key, ChecksumMode='ENABLED')
*左滑查看更多
当我从 r['Body'] 读取对象时,会发生实际的验证,如果不匹配,将会引发异常。
现已推出
这四个额外的校验和现已在所有商用亚马逊云科技区域中提供,您现在即可开始使用它们,且无需额外付费。
本篇作者
Jeff Barr
首席布道师
亚马逊云科技首席布道师,他在2004年开始在亚马逊云科技更新博客,从那时起一直坚持内容产出。
听说,点完下面4个按钮
就不会碰到bug了!