2017-02-13 32 views
0

私はS3を使用して、自分のビジネスにとって重要な大きなファイルをバックアップしています。一度アップロードすると、これらのファイルの整合性が確認され、元のままであることを確信できますか?AWS S3アップロードの整合性

スケーラビリティと可用性に関する多くのドキュメントがありますが、整合性やチェックサムについての情報はありませんでした。

+0

ここに 'Content-MD5'ヘッダーを確認してください。http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html – moondaisy

答えて

0

ローカルでMD5チェックサムを実行し、S3上のオブジェクトのMD5チェックサムと照合してデータの整合性を確認できます。 Content-MD5、S3にアップロードする際Here is a guide

1

は、オプションのリクエストヘッダがあります(私の意見ではないはオプションでなければなりませんが、私は話を戻そう)。この値をリクエスト本体のMD5ハッシュのbase64エンコーディングに設定すると、S3は不一致の場合にアップロードを完全に拒否し、破損したデータのアップロードを防ぎます。

ETagヘッダーは、オブジェクトの16進数でエンコードされたMD5ハッシュに設定されます(一部の種類のサーバー側の暗号化を除いて)。

マルチパートアップロードの場合、Content-MD5ヘッダーは同じ値に設定されていますが、各部分について設定されています。

S3は、最終的なオブジェクトにマルチアップロードの部品を組み合わせた場合、ETagヘッダは、各部分の連結バイナリエンコードされた(生バイト)MD5ハッシュの六角エンコードMD5ハッシュに設定されている、プラス-プラス部品数。

マルチパートアップロードの部分を結合する最後のステップをS3に依頼するとき、元のパートのアップロード中に与えたETagsを元に戻す必要があります。これはS3が何であるかを保証するものです結合はあなたがそれが結合していると思います。残念ながら、あなたがアップロードした部分についてS3に尋ねることができるAPIリクエストがあります。一部の怠惰な開発者はS3にこのリストを尋ねて、ドキュメントを直ちに送ってくるでしょうが、仕事をする、 "そうですか?

マルチパートのアップロードは5GBを超えるオブジェクトには必須で、5MBを超えるアップロードにはオプションです。

これらの機能を正しく使用すると、無傷のアップロードが保証されます。

シグネチャバージョン4を使用している場合は、古い領域ではオプションで、完全なメカニズムが追加されています。これはオプションではありません(実際にV4を使用している場合):アップロードにはリクエストヘッダーが必要ですx-amz-content-sha256ペイロードの16進数で符号化されたSHA-256ハッシュに設定され、ここでも不一致があれば要求は拒否されます。

私のテイク:これらの機能の一部はオプションであるため、コードを監査しない限り、どのツールもこれを正しく実行しているとは信じられません。

私のデータで誰も信用できません。私自身の目的では、内部的には「pedantic uploader」という独自のユーティリティを書いています。これはSDKを使用せず、REST APIに直接話します。ファイルのsha256を計算し、それをx-amz-meta-...メタデータとして追加して、比較のためにオブジェクトでフェッチできるようにします。圧縮ファイル(gzip/bzip2/xz)をアップロードすると、圧縮されたものと圧縮されていないものの両方がメタデータに格納されます。圧縮されたものと圧縮されていないものの両方をメタデータに格納します。

Content-MD5およびx-amz-content-sha256は、要求ヘッダーです。それらはダウンロードと共に返されません。ここで説明したように、この情報をオブジェクトメタデータに保存する場合。

EC2では、オブジェクトを実際にディスクに保存せずに、単にその完全性を確認するだけで、オブジェクトを簡単にダウンロードできます。 EC2インスタンスがバケットと同じ領域にある場合、パブリックIPv4またはIPv6アドレス、NATインスタンス、S3 VPCエンドポイント、またはIPv6出口ゲートウェイを使用してインスタンスを使用する場合、データ転送の請求は行われません。 (NATゲートウェイを介してIPv4経由でS3にアクセスする場合は、NATゲートウェイのデータスループットが請求されます)。明らかにこれを自動化する方法があるが、あなたはコンソールでオブジェクトを選択した場合、手動で、ダウンロードを選択し、右クリックして、結果のURLをコピーし、その後、次の操作を行います。

$ curl -v '<url from console>' | md5sum # or sha256sum etc. 

ちょうどコンソールからURLを包みます単一の'の引用符で囲まれています。これは事前署名されており、クエリ文字列に&が含まれているため、シェルは解釈したくありません。

+0

私はファイルをアップロードするためにブラウザを使用しています。 cliがチェックサムを実行するように見えます(http://docs.aws.amazon.com/cli/latest/topic/s3-faq.html)。ブラウザがチェックサムを実行するかどうかは誰にも分かりますか? –