2017-02-13 7 views
0

Я использую S3 для резервного копирования больших файлов, имеющих решающее значение для моего бизнеса. Могу ли я быть уверенным, что после загрузки эти файлы проверяются на целостность и не повреждены?AWS S3 Upload Integrity

Существует много документации по масштабируемости и доступности, но я не мог найти информацию о целостности и/или контрольных суммах.

+0

Проверьте заголовок Content-MD5 здесь http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html – moondaisy

ответ

0

Вы можете выполнить контрольную сумму MD5 локально, а затем проверить это на контрольной сумме MD5 объекта на S3 для обеспечения целостности данных. Here is a guide

1

При загрузке в S3, есть дополнительный запрос заголовок (который, по моему мнению, должен не быть необязательным, но я отвлекся), Content-MD5. Если вы установите это значение в base64-кодирование хэша MD5 тела запроса, S3 полностью отклонит вашу загрузку в случае несоответствия, что предотвратит загрузку поврежденных данных.

Заголовок ETag будет установлен в шестнадцатеричный хеш MD5 объекта, для однократной загрузки (с исключением для некоторых типов шифрования на стороне сервера).

Для многостраничных загрузок заголовок Content-MD5 установлен в одно и то же значение, но для каждой части.

Когда S3, сочетает в себе части многочастного загрузки в конечный объект, заголовок ETag устанавливается в шестнадцатеричной кодировке MD5 хэш из каскадных двоичной кодировке (сырые байт) MD5 хэш каждой части, а также - плюс количество деталей.

Когда вы просите S3 сделать последний шаг объединения частей многостраничной загрузки, вы должны вернуть ему ETags, который он дал вам во время загрузки исходных частей, что должно гарантировать, что S3 Объединение - это то, что, по вашему мнению, оно сочетает. К сожалению, есть запрос API, который вы можете задать, чтобы спросить S3 о загруженных вами частях, а некоторые ленивые разработчики просто попросят S3 для этого списка, а затем отправить его обратно, о чем предупреждает documentarion, но, похоже, это «кажется работать ", правильно?

Многостраничные загрузки требуются для объектов размером более 5 ГБ и не обязательно для загрузки более 5 МБ.

Правильно используемые, эти функции обеспечивают гарантию неповрежденных загрузок.

Если вы используете Signature Version 4, который также является дополнительным в старых регионах, существует дополнительный механизм целостности, и этот вариант не является дополнительным (если вы фактически используете V4): для загрузки должен быть заголовок запроса x-amz-content-sha256 , установите на хэш-шестнадцатеричный SHA-256 хэш полезной нагрузки, и запрос будет отклонен, если здесь есть несоответствие.

My take: Поскольку некоторые из этих функций являются необязательными, вы не можете доверять, что любые инструменты делают это правильно, если вы не проверяете их код.

Я не доверяю никому с моими данными, поэтому для своих целей я написал свою собственную утилиту, внутренне называемую «педантичным загрузчиком», которая не использует SDK и напрямую говорит с REST API. Он вычисляет sha256 файла и добавляет его как x-amz-meta-... метаданных, поэтому он может быть выбран с объектом для сравнения. Когда я загружаю сжатые файлы (gzip/bzip2/xz), я сохраняю sha как сжатых, так и несжатых в метаданных, а также храню сжатый и несжатый размер в октетах в метаданных.

Отметьте, что Content-MD5 и x-amz-content-sha256 являются request headers. Они не возвращаются с загрузками. Если вы хотите сохранить эту информацию в метаданных объекта, как я описал здесь.

В EC2 вы можете легко загрузить объект, не сохраняя его на диске, просто для проверки его целостности. Если экземпляр EC2 находится в том же регионе, что и ведро, вам не будет выставлен счет за передачу данных, если вы используете экземпляр с открытым адресом IPv4 или IPv6, экземпляр NAT, конечную точку S3 VPC или через выходной шлюз IPv6 , (Вам будет выставлен счет за пропускную способность NAT Gateway, если вы получите доступ к S3 через IPv4 через 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). Кто-нибудь знает, выполняет ли браузер контрольную сумму? –