Closed1

S3オブジェクトの整合性検証

YamahitsujiYamahitsuji

S3にオブジェクトをアップロードする際、何らかのエラーや攻撃(例えばMan-in-the-midle攻撃など)により、アップロードしようとしたオブジェクトとは別のオブジェクトが保存される可能性がある。

まず意図せずファイル内容が変わってしまう場合の対策として、MD5チェックサムを使う方法がある。事前に計算し、アップロードリクエストに付与する。S3はオブジェクトを受け取ると、オブジェクトからMD5を計算する。計算したMD5とリクエストに付与されたMD5が違う場合はエラーを返す。
また、ダウンロード時にもMD5を指定することが可能。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/data-integrity-s3/

また、2022/2からMD5以外のアルゴリズムがサポートされた。さらにSDKにハッシュ値を計算する実装も追加され、より行いやすくなった。
https://aws.amazon.com/jp/blogs/news/new-additional-checksum-algorithms-for-amazon-s3/

上記のアルゴリズムではMan-in-the-middle攻撃などを受けた場合の防御にはならない。攻撃者が差し替えたいオブジェクトと、そのオブジェクトのMD5リクエストに付与してアップロードすれば、成功してしまう。

アップロードされたオブジェクトが本当に自分がアップロードしたものであるかはEtag(エンティティータグ)を使って検証する。
Etagはアップロードされたオブジェクトの内容により決定される。ただしアップロードの方法によってMD5ダイジェストの場合もあれば、そうでない場合もある。

The entity tag is a hash of the object. The ETag reflects changes only to the contents of an object, not its metadata. The ETag may or may not be an MD5 digest of the object data. Whether or not it is depends on how the object was created and how it is encrypted as described below:

  • Objects created by the PUT Object, POST Object, or Copy operation, or through the AWS Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that are an MD5 digest of their object data.
  • Objects created by the PUT Object, POST Object, or Copy operation, or through the AWS Management Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5 digest of their object data.
  • If an object is created by either the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest, regardless of the method of encryption. If an object is larger than 16 MB, the AWS Management Console will upload or copy that object as a Multipart Upload, and therefore the ETag will not be an MD5 digest.
    https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/API/API_Object.html
このスクラップは2022/09/12にクローズされました