Quero fazer upload de um objeto em um bucket do Amazon Simple Storage Service (Amazon S3). Além disso, quero verificar a integridade do objeto carregado.
Resolução
Em buckets de uso geral, use o cabeçalho Content-MD5 para verificar a integridade dos objetos carregados. Em buckets de diretório, use um algoritmo de soma de verificação compatível para verificar a integridade dos objetos carregados.
Observação: o Amazon S3 não oferece suporte a verificações de integridade com o Content-MD5 quando você usa a operação PutObject em buckets de diretório. O Amazon S3 também não oferece suporte a verificações de integridade para buckets de vetor ou de tabela.
Buckets de uso geral
Em buckets de uso geral, calcule o valor Content-MD5 do objeto.
Observação: ao utilizar o cabeçalho Content-MD5, o Amazon S3 verifica o objeto em relação ao valor do Content-MD5 fornecido. Se os valores não corresponderem, você receberá uma mensagem de erro.
Sistema operacional Windows (SO)
Se você estiver usando um sistema operacional Windows, é possível usar o cmdlet Get-FileHash do Microsoft PowerShell Utility para calcular um resumo do MD5.
-
O comando a seguir recebe um resumo do MD5:
Get-FileHash \path\to\file -algorithm MD5 | Format-List
Observação: substitua \path\to\file pelo caminho para seu objeto.
Observação: o cmdlet Get-FileHash está disponível no Microsoft PowerShell Utility versão 4.0 e posterior.
Aqui está um exemplo de saída:
Algorithm : MD5Hash : C9A5A6878D97B48CC965C1E41859F034
Path : \path\to\file
-
Aplique a codificação base64 ao valor calculado de MD5Hash para obter o valor do Content-MD5 necessário:
hashString ='C9A5A6878D97B48CC965C1E41859F034'$hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
ContentMD5 = [System.Convert]::ToBase64String($hashByteArray)
Echo ContentMD5
yaWmh42XtIzJZcHkGFnwNA==
Neste exemplo, a saída do Echo ContentMD5, yaWmh42XtIzJZcHkGFnwNA==, é o valor do Content-MD5 necessário.
Sistema operacional Linux (SO)
Se você estiver usando um sistema operacional Linux, execute o seguinte comando OpenSSL para obter o valor de Content-MD5 do seu arquivo:
openssl md5 -binary path/to/file | base64
Observação: substitua path/to/file pelo caminho para seu objeto.
Buckets de diretório
Verifique a integridade dos objetos carregados em buckets de diretório com um algoritmo de soma de verificação compatível diferente do MD5. Por exemplo, use as etapas a seguir para verificar a integridade dos objetos carregados com o cabeçalho x-amz-checksum-sha256 (SHA256).
Observação: quando você usa o cabeçalho x-amz-checksum-sha256, o Amazon S3 compara o objeto com o valor de x-amz-checksum-sha256 fornecido. Se os valores não corresponderem, você receberá uma mensagem de erro.
SO Windows
Se você estiver usando um sistema operacional Windows, é possível usar o cmdlet Get-FileHash do Microsoft PowerShell Utility para calcular um resumo do SHA256.
-
O comando a seguir recebe um resumo do SHA256:
Get-FileHash \path\to\file -algorithm SHA256 | Format-List
Observação: substitua \path\to\file pelo caminho para seu objeto.
Aqui está um exemplo de saída:
Algorithm : SHA256
Hash : E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
Path : \path\to\file
-
Aplique a codificação base64 ao resumo do SHA256 calculado para obter o valor de SHA256 necessário:
hashString ='E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855'
hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
ContentSHA256 = [System.Convert]::ToBase64String($hashByteArray)
Echo ContentSHA256
`47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=`
Neste exemplo, a saída de Echo ContentSHA256, 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= é o valor de SHA256 necessário.
SO Linux
Se você estiver usando um sistema operacional Linux, execute o seguinte comando OpenSSL para obter o valor de SHA256 do seu arquivo:
openssl sha256 -binary path/to/file | base64
Observação: substitua path/to/file pelo caminho para seu objeto.
Verifique a integridade do objeto carregado
Ao usar PutObject para carregar objetos para o Amazon S3, passe o valor de Content-MD5 como um cabeçalho de solicitação em buckets de uso geral.
Em buckets de diretório, transmita um valor x-amz-checksum-sha256 e um cabeçalho x-amz-checksum-algorithm definido como SHA256 como cabeçalhos de solicitação. O Amazon S3 verifica o objeto em relação ao valor de Content-MD5/SHA256 fornecido. Se os valores não corresponderem, você receberá uma mensagem de erro. Também é possível usar o cabeçalho de solicitação SHA256 com a API UploadPart do Amazon S3.
Informações relacionadas
Common request headers (Cabeçalhos de solicitação comuns)
Amazon S3 error responses (Respostas a erros Amazon S3)