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

最終更新日: 2019 年 9 月 23 日

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

簡単な説明

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

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

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

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

解決方法

重要: この解決方法では、Content-MD5 ヘッダーを使用してオブジェクトの整合性を検証します。アップロードが AWS 署名バージョン 4 で署名されている場合、代わりに x-amz-content-sha256 ヘッダーを使用する必要があります。詳細については、「AWS CLI はチェックサムを検証しますか?」を参照してください。

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

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

1.    File Checksum Integrity Verifier (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 コマンドラインインターフェイス (AWS CLI) コマンド aws s3api put-object を使用し、--content-md5 オプションを含めます。--content-md5 の値には、次のように計算した base64 でエンコードされた MD5 チェックサム値を入力します。

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

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

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

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