オブジェクトを Amazon S3 バケットにアップロードする際に、オブジェクトの MD5 チェックサム値を使用して、その整合性を検証したいのです。カスタム HTTP ヘッダーに MD5 チェックサム値を格納して、S3 からダウンロードしたオブジェクトの整合性の確認もしたいのです。

まず、S3 にアップロードするブジェクトの MD5 チェックサムを計算します。AWS コマンド ライン インターフェイス (CLI) でオブジェクトをアップロードする際に、整合性を確認する MD5 チェックサム値を HTTP ヘッダーに格納します。

次の手順で、オブジェクトの MD5 チェックサムを計算し、Amazon S3 へのアップロード時に整合性を確認し、カスタム HTTP ヘッダーに格納します。MD5 チェックサム値は、S3 からダウンロードしたオブジェクトの整合性を検証するためも使用できます。

1.アップロードするファイルの base64 MD5 チェックサム値の取得

Windows の場合File Checksum Integrity Verifier (FCIV) ユーティリティをダウンロードし、フォルダに格納します。表示されたコマンドプロンプトで次のコマンドを (管理者権限で) 実行し、格納されたフォルダの場所を Windows のシステム パスに追加します。この時、「c:\fciv」はユーティリティを格納したフォルダ パスで置き換えてください。

C:>set path=%path%;c:\fciv

コマンドプロンプトで変更した Windows システムパスは、再起動時には適用されない点に注意してください。Windows のシステムパス環境変数を永続的に変更する方法は、Windows のマニュアルを参照するか、サーチエンジンに「Change Windows Xpath variable」と入力して探してください。この際、「X」 はお使いの Window システムのバージョンで置き換えます。

FCIV ユーティリティをインストールし、環境変数 %path% に格納場所を追加した後、このコマンドを実行すると、S3 にアップロードしたファイルの MD5 チェックサムが 16 進数で戻ってきます。c:\S3\testfile を S3 がアップロードされたファイルの場所で置き換えて次のコマンドを実行してください。

fciv.exe c:\s3\testfile

注:パスにスペースが含まれている場合は、パスを引用符 (") で囲んでください。

戻り値は、C:\Windows\explorer.exe の MD5 チェックサムを計算したときに返される次の値と似ています。

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

重要: FCIV ユーティリティからの MD5 チェックサムは 16 進数であり、チェックサム値として使用するために base64 に変換する必要があります。16 進数の MD5 チェックサムを使用すると、「The Content-MD5 you specified is invalid」というエラーメッセージが表示されます。16 進数を base64 の文字列に変換するデコーダがいくつか Web 上で提供されています。お望みなら、HexToBase64 スクリプトなどのスクリプトコードをダウンロードできます。HexToBase64 は「http://www.rlmueller.net/Programs/HexToBase64.txt」からダウンロードできます。FCIV ユーティリティによって 16 進数から変換された base64 のエンコード値は、この例では、WZOTosUmxoARnYQVXZDx5Q == となります。

Linux の場合。Linux では初めから、ファイルの base64 MD5 チェックサムを計算する openssl コマンドが提供されています。Linux でファイルの base64 MD5 チェックサムを調べるには、Linux シェルで次のコマンドを実行します。

openssl md5 -binary PATH/TO/FILE | base64

戻り値は、/bin/bash ファイルの base64 MD5 チェックサムの値と同じような値になります。

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

2.Amazon S3 へのオブジェクトのアップロード

AWS CLI を起動して「aws s3api put-object」コマンドを実行して、オブジェクトを S3 バケットにアップロードします。S3 がオブジェクトの整合性を検証し、カスタム HTTP ヘッダーに MD5 チェックサムを格納するには、--content-md5 引数と--metadata 引数を適切なパラメータとともに使用する必要があります。

次の例では、aws s3api put-object コマンドでローカルファイル c:\S3\localfile.txt をmd5testbucket に fileupload.txt として S3 バケットにアップロードしています。また、このコマンドにより、指定した MD5 チェックサム値が custom HTTP header x-amz-meta-md5chksum に保存されると同時に、この MD5 チェックサム値でファイルの整合性が検証されます。

C:\S3\>aws s3api put-object --bucket md5testbucket --key fileupload.txt --body localfile.txt --metadata md5chksum=WZOTosUmxoARnYQVXZDx5Q== --content-md5 WZOTosUmxoARnYQVXZDx5Q==
{
    "ETag": "\"599393a2c526c680119d84155d90f1e5\""
}

注: ETag 値が返されない場合は、AWS CLI から次のようなエラーが返されます。

「A client error (InvalidDigest) occurred when calling the PutObject operation: The Content-MD5 you specified was invalid.」

このエラー メッセージは、指定された MD5 チェックサム値が S3 にアップロードしたオブジェクトと一致していないことを示しています。この不一致が修正されるまで、アップロードされたオブジェクトの整合性は検証されません。

オブジェクトのアップロードと MD5 チェックサム値のカスタム HTTP ヘッダーへの書き込みの確認には、AWS CLI から次のコマンドを実行します。

C:\S3>aws s3api head-object --bucket md5testbucket --key fileupload.txt
{
    "AcceptRanges": "bytes",
    "ContentType": "binary/octet-stream",
    "LastModified": "Thu, 31 Mar 2016 16:37:18 GMT",
    "ContentLength": 605,
    "ETag": "\"599393a2c526c680119d84155d90f1e5\"",
    "Metadata": {
        "md5chksum": "WZOTosUmxoARnYQVXZDx5Q=="
    }
}

ファイルの S3 へのアップロード時の指定値と md5chksum の戻り値は同じでなくてはなりません。この値は、S3 からダウンロードされたオブジェクトの整合性を検証するために使用できます。

Amazon S3, verify file integrity, upload, MD5 checksum, download, ETag, aws s3api, put-object, head-object, metadata, AWS CLI


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 04 月 01 日