Amazon Web Services ブログ

新機能 – Amazon S3 向け、追加のチェックサムアルゴリズム

Amazon Simple Storage Service (Amazon S3) は、オブジェクトおよびオブジェクトに関連付けられたメタデータのために 99.999999999% (イレブンナイン) の耐久性を提供するように設計されています。S3 は PUT した内容を正確に格納し、GET 時に格納された内容を正確に返すので、安心してご利用いただけます。オブジェクトが適切にやり取りされるように、S3 はチェックサムを使用します。チェックサムは基本的にデジタルフィンガープリントの一種です。

S3 の PutObject 関数では、オブジェクトの MD5 チェックサムを渡すことが既に許可されており、指定した値が S3 によって計算された値と一致する場合にのみオペレーションを受け付けます。これにより S3 はデータ転送エラーを検出できますが、PutObject を呼び出す前または GetObject を呼び出した後にチェックサムを計算する必要があります。さらに、大きな (マルチ GB またはマルチ TB) オブジェクトに関するチェックサムの計算により、コンピューティング負荷が高くなり、ボトルネックにつながる可能性があります。実際、大規模 S3 ユーザーの中には、チェックサムのコンピューティングと検証のためだけに専用の EC2 フリートを構築しているユーザーもいます。

新しいチェックサムのサポート
2022 年 2 月 25 日(米国時間)は、S3 の 4 つのチェックサムアルゴリズムの新しいサポートについてお話しします。Amazon S3 に保存されているデータのチェックサムを計算して保存し、そのチェックサムを使用してアップロードおよびダウンロードリクエストの整合性を確認することが非常に簡単になりました。この新機能を使用して、業界に固有のデジタル保存のベストプラクティスおよびコントロールを実装できます。特に、各オブジェクトを S3 にアップロードするときに、広く使用されている 4 つのチェックサムアルゴリズム (SHA-1SHA-256CRC-32、および CRC-32C) のいずれかを使用することを指定できます。

この新機能の主な特徴は次のとおりです。

オブジェクトアップロード – AWS SDK の最新バージョンでは、指定されたチェックサムがアップロードの一部として計算され、アップロードの終了時に HTTP トレーラーに含められます。また、事前計算済みチェックサムを指定するオプションもあります。いずれの場合も、S3 はチェックサムを検証し、リクエストの値が S3 によって計算された値と一致する場合はオペレーションを受け入れます。この機能を HTTP トレーラーの使用と組み合わせることで、クライアント側の整合性チェックを大幅に高速化できます。

マルチパートオブジェクトアップロード – AWS SDK は、クライアント側の並列処理を活用し、マルチパートアップロードの各パートに関してチェックサムを計算するようになりました。すべてのパートのチェックサムが自らに対してチェックサムを実行し、アップロードが完了すると、このチェックサムのチェックサムが S3 に送信されます。

チェックサムのストレージと永続性 – 検証されたチェックサムは、指定されたアルゴリズムとともに、オブジェクトのメタデータの一部として保存されます。KMS キーによるサーバー側の暗号化がオブジェクトについてリクエストされた場合、チェックサムは暗号化された形式で保存されます。アルゴリズムとチェックサムは、ストレージクラスが変更されたり、新しいバージョンに置き換えられたりしても、その存続期間を通じてオブジェクトに保持されます。また、S3 レプリケーションの一部として転送されます。

チェックサムの取得 – 新しい GetObjectAttributes 関数は、オブジェクトと各パート (該当する場合) のチェックサムを返します。

チェックサムの動作
この機能には、AWS Command Line Interface (CLI)AWS SDK、または S3 コンソールからアクセスできます。コンソールで、オブジェクトのアップロードの準備をする際に、[Additional Checksums] (追加のチェックサム) オプションを有効にします。

その後、[Checksum function] (チェックサム関数) を選択します。

チェックサムを既に計算していれば入力できます。そうでなければ、コンソールがそれを計算します。

アップロードが完了したら、オブジェクトのプロパティを表示してチェックサムを確認できます。

各オブジェクトのチェックサム関数は、S3 インベントリレポートにも表示されます。

SDK は独自のコードからチェックサムを計算できます。

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'] からオブジェクトを読み込んだときに実際の検証が行われ、不一致がある場合は例外が発生します。

デモを視聴する
次のデモでは、この新機能が機能しているところをご覧いただけます (re:Invent 2021 で初公開)。

今すぐご利用いただけます
追加された 4 つのチェックサムは、追加料金なしで、すべての商用 AWS リージョンで今すぐご利用を開始していただけます。

Jeff;

原文はこちらです。