Amazon S3 にアップロードするオブジェクトの整合性を確認する方法を教えてください。

最終更新日: 2021 年 1 月 5 日

オブジェクトを Amazon Simple Storage Service (Amazon S3) バケットにアップロードしたいと考えています。さらに、アップロードされたオブジェクトの整合性を確認したいのですが、どうすればそれができますか?

簡単な説明

MD5 チェックサム値を使用して、アップロードされたオブジェクトの整合性を検証するには、次の手順に従います。

注意: エンティティタグ (ETag) はオブジェクトのハッシュで、オブジェクトデータの MD5 ダイジェストではない場合があります。ETag が MD5 ダイジェストであるかどうかは、オブジェクトの作成方法と暗号化方法によって異なります。ETag は常に MD5 ダイジェストではないため、アップロードされたファイルの整合性の検証に常に使用できるとは限りません。

1.    オブジェクトの base64 でエンコードされた MD5 チェックサム値を取得します。

2.    アップロード中のオブジェクトの整合性を確認します。

解決方法

オブジェクトの base64 エンコードされた MD5 チェックサム値を取得する

Windows オペレーティングシステムを使用している場合は、次の手順に従います。

1.    ファイル チェックサム整合性検証ツール (FCIV) ユーティリティをインストールします。

2.    次のコマンドを使用して FCIV ユーティリティを実行します。

fciv.exe c:\S3\testfile

3.    レスポンスには、次のようなチェックサム値の 16 進形式が含まれます。

fciv C:\Windows\explorer.exe
                //
                // File Checksum Integrity Verifier version 2.05.
                //
                example111aaa222bbb33cc44dd5e6f7 c:\\windows\\explorer.exe

4.    16 進数の MD5 チェックサム値を base64 エンコード形式に変換します。base64 エンコード形式の値を取得するための 1 つのオプションについては、FCIV ユーティリティのサポートページのデータベースのストレージ形式を参照してください。

Linux オペレーティングシステムを使用している場合、次の Open SSL コマンドを実行します。

openssl md5 -binary PATH/TO/FILE | base64

レスポンスには、以下のような base64 エンコードされた MD5 チェックサム値が含まれます。

user@example:/home$ openssl md5 -binary /bin/bash | base64
                examplemd5value1234567==

アップロード時にオブジェクトの整合性を検証する

Amazon S3 へのアップロード時にオブジェクトの MD5 チェックサム値を検証するには、aws s3api put-object コマンドを使用します。

aws s3api put-object --bucket awsexamplebucket --key awsexampleobject.txt --body awsexampleobjectpath --content-md5 examplemd5value1234567==

必ず --content-md5 オプションを含めてから、計算した base64 エンコードされた MD5 チェックサム値を入力します。

必要に応じて、MD5 チェックサム値をメタデータ (カスタム HTTP ヘッダー) として保存する場合は、次のように --metadata オプションを使用することもできます。

aws s3api put-object --bucket awsexamplebucket --key awsexampleobject.txt --body awsexampleobjectpath --content-md5 examplemd5value1234567== --metadata md5checksum=examplemd5value1234567==

アップロード時に S3 が計算したチェックサムが --content-md5 で入力した値と一致しない場合、Amazon S3 はそのオブジェクトを保存しません。代わりに、レスポンスとしてエラーメッセージが返されます。詳細については、AWS CLI はチェックサムの検証を行いますか? を参照してください。

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドを実行する場合は、最新の AWS CLI バージョンを使用していることを確認してください