オブジェクトを Amazon Simple Storage Service (Amazon S3) バケットにアップロードしたいと考えています。さらに、アップロードされたオブジェクトの整合性を確認したいのですが、どうすればそれができますか?
簡単な説明
Content-MD5 ヘッダーを使用することで、アップロードされたオブジェクトの整合性を確認するには、次の手順に従います。
注: Content-MD5 ヘッダーを使用する場合、Amazon S3 は指定された Content-MD5 値に対してオブジェクトをチェックします。値が一致しない場合、エラーが表示されます。
1. オブジェクトの Content-MD5 値を計算します。
2. オブジェクトのアップロード中に Content-MD5 値をリクエストヘッダーとして渡して、アップロードされたオブジェクトの整合性を確認します。
解決方法
オブジェクトの Content-MD5 値を計算する
Windows OS
Windows オペレーティングシステムを使用している場合は、次のように Microsoft PowerShell Utility の Get-FileHash コマンドレットを使用して MD5 ダイジェストを計算できます。
Get-FileHash \path\to\file -algorithm MD5 | Format-List
注: Get-FileHash コマンドレットは、Microsoft PowerShell ユーティリティのバージョン 4.0 以降で使用できます。
この出力例を次に示します。
Algorithm : MD5
Hash : C9A5A6878D97B48CC965C1E41859F034
Path : \path\to\file
次に、計算された MD5 ダイジェストに base64 エンコーディングを適用して、必要な Content-MD5 値を取得します。
$hashString ='C9A5A6878D97B48CC965C1E41859F034'
$hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
$ContentMD5 = [System.Convert]::ToBase64String($hashByteArray)
Echo $ContentMD5
yaWmh42XtIzJZcHkGFnwNA==
この例では、Echo $ContentMD5 の出力 (「yaWmh42XtIzJZcHkGFnwNA==」) が、必要な Content-MD5 値です。
Linux OS
Linux オペレーティングシステムを使用している場合は、次の OpenSSL コマンドを実行して、ファイルの Content-MD5 値を取得します。
openssl md5 -binary PATH/TO/FILE | base64
アップロードされたオブジェクトの整合性を確認する
PutObject を使用して Amazon S3 にオブジェクトをアップロードする場合は、Content-MD5 値をリクエストヘッダーとして渡します。Amazon S3 は、指定された Content-MD5 値に対してオブジェクトをチェックします。値が一致しない場合、エラーが表示されます。
Content-MD5 リクエストヘッダーは S3 UploadPart API でも使用できます。
関連情報
一般的なリクエストヘッダー
S3 エラーレスポンス