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

まず、S3 にアップロードするオブジェクトの MD5 チェックサムを計算します。AWS コマンドラインインターフェイス (CLI) を使用してオブジェクトをアップロードするときに、特定のパラメータを指定してオブジェクトの整合性を検証し、オブジェクトの MD5 チェックサム値を HTTP ヘッダー内に保存します。

以下のステップに従って、オブジェクトの MD5 チェックサムを計算し、Amazon S3 にアップロードするオブジェクトの整合性を検証して、MD5 チェックサム値をカスタム HTTP ヘッダー内に保存します。MD5 チェックサム値を使用して、S3 からダウンロードするオブジェクトの整合性を検証できます。

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

Windows の場合ファイル チェックサム整合性検証ツール (FCIV) ユーティリティをダウンロードし、その内容をフォルダに抽出します。次に、このフォルダの場所を Windows システムパスに追加します。そのために次のコマンドを管理者特権でのコマンドプロンプトから実行します。c:\fciv は、抽出した FCIV ユーティリティのファイルが含まれているフォルダに置き換えてください。

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

Windows システムパスをコマンドプロンプトから変更すると、この変更は Windows の再起動時に保持されないことに注意してください。Windows システムパスの環境変数を永続的に変更する場合は、Windows ドキュメントを参照するか、ウェブで「Windows X Path 変数の変更」を検索してください。「X」は、お使いの Windows バージョンに置き換えてください。

FCIV ユーティリティをインストールし、%path% 環境変数を更新して抽出済みの FCIV ユーティリティファイルの場所を反映した後で、次のコマンドを実行します。このコマンドで返されたファイルの 16 進数の MD5 チェックサムを S3 にアップロードします。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 に変換してから、S3 にメッセージをアップロードするためのチェックサム値として使用する必要があります。16 進数の MD5 チェックサムを使用すると、「Content-MD5 you specified is invalid (指定した Content-MD5 は無効です)」というエラーメッセージが表示されます。16 進数を base64 の文字列に変換するデコーダがいくつかウェブで提供されています。必要に応じて、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 でオブジェクトの整合性を検証し、MD5 チェックサムをカスタム HTTP ヘッダーに保存するには、--content-md5 引数と --metadata 引数を適切なパラメータで使用する必要があります。

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

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=="
    }
}

md5chksum の戻り値は、ファイルを S3 にアップロードしたときに指定した値と一致するはずです。この値を使用して、S3 からダウンロードするオブジェクトの整合性を検証できます。

Amazon S3、整合性の検証、アップロード、MD5 チェックサム、ダウンロード、ETag、aws s3api、put-object、head-object、メタデータ、AWS CLI


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

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

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

公開日: 2016 年 04 月 01 日