Verificar a integridade do objeto no Amazon S3
O Amazon S3 usa valores de soma de verificação para verificar a integridade dos dados que você carrega ou baixa. Além disso, você pode solicitar que outro valor de soma de verificação seja calculado para qualquer objeto armazenado no Amazon S3. Você pode escolher um algoritmo de soma de verificação para operações de upload, cópia simples cópia em lote dos dados.
Quando você faz upload dos dados, o Amazon S3 usa o algoritmo que você escolheu para calcular uma soma de verificação do lado do servidor e a valida com o valor fornecido antes de armazenar o objeto e a soma de verificação como parte dos metadados do objeto. Essa validação funciona de maneira consistente em todos os modos de criptografia, tamanhos de objetos e classes de armazenamento para uploads de parte única e fracionados. No entanto, quando você faz uma cópia simples ou em lote dos dados, o Amazon S3 calcula a soma de verificação no objeto de origem e a move para o objeto de destino.
nota
Ao realizar um upload de parte única ou fracionado, você também pode incluir uma soma de verificação pré-calculada como parte da solicitação e usar o tipo de soma de verificação de objeto inteiro. Para usar valores pré-calculados com vários objetos, use a AWS CLI ou os AWS SDKs.
Usar algoritmos de soma de verificação compatíveis
Com o Amazon S3, você pode escolher um algoritmo de soma de verificação para validar os dados durante os uploads. O algoritmo de soma de verificação especificado é armazenado com o objeto e pode ser usado para validar a integridade dos dados durante os downloads. Você pode selecionar um dos seguintes algoritmos de soma de verificação Secure Hash Algorithms (SHA) ou Cyclic Redundancy Check (CRC) para calcular o valor da soma de verificação:
-
CRC-64/NVME (
CRC64NVME
) -
CRC-32 (
CRC32
) -
CRC-32C (
CRC32C
) -
SHA-1 (
SHA1
) -
SHA-256 (
SHA256
)
Além disso, você pode fornecer uma soma de verificação com cada solicitação usando o cabeçalho Content-MD5.
Ao fazer upload de um objeto, especifique o algoritmo que deseja usar:
-
Ao usar o AWS Management Console, escolha o algoritmo de soma de verificação que deseja usar. Você também pode especificar o valor da soma de verificação do objeto. Quando o Amazon S3 recebe o objeto, ele calcula a soma de verificação usando o algoritmo especificado. Se os dois valores de soma de verificação não corresponderem, o Amazon S3 gerará um erro.
-
Ao usar um SDK, esteja ciente do seguinte:
-
Defina o parâmetro
ChecksumAlgorithm
como o algoritmo que você deseja que o Amazon S3 use. Se você já tem uma soma de verificação pré-calculada, envie o valor da soma de verificação para o AWS SDK, que incluirá o valor na solicitação. Se você não enviar um valor de soma de verificação ou não especificar um algoritmo de soma de verificação, o SDK calculará automaticamente um valor de soma de verificação para você e o incluirá na solicitação a fim de fornecer proteções de integridade. Se o valor da soma de verificação individual não corresponder ao valor definido do algoritmo de soma de verificação, o Amazon S3 rejeitará a solicitação com um erroBadDigest
. -
Se você estiver usando um AWS SDK atualizado, o SDK escolherá um algoritmo de soma de verificação para você. No entanto, você pode substituir esse algoritmo de soma de verificação.
-
Se você não especificar um algoritmo de soma de verificação e o SDK também não calcular uma soma de verificação para você, o S3 escolherá automaticamente o algoritmo de soma de verificação CRC-64/NVME (
CRC64NVME
).
-
-
Ao utilizar a API REST, não use o parâmetro
x-amz-sdk-checksum-algorithm
. Em vez disso, use um dos cabeçalhos específicos do algoritmo (por exemplo,x-amz-checksum-crc32
).
Para aplicar qualquer um desses valores de soma de verificação a objetos que já foram carregados no Amazon S3, você pode copiar o objeto e especificar se deseja usar o algoritmo de soma de verificação existente ou um novo. Se você não especificar um algoritmo, o S3 usará o algoritmo existente. Se o objeto de origem não tiver um algoritmo de soma de verificação ou valor de soma de verificação especificado, o Amazon S3 usará o algoritmo CRC-64/NVME para calcular o valor da soma de verificação do objeto de destino. Também é possível especificar um algoritmo de soma de verificação ao copiar objetos usando a funcionalidade Operações em Lote do S3.
Importante
Se você usar um upload fracionado com somas de verificação para somas de verificação compostas (ou no nível da parte), os números de partes do upload fracionado deverão ser consecutivos e começar com 1. Se você tentar concluir uma solicitação de upload fracionado com números de parte não consecutivos, o Amazon S3 gerará um erro HTTP 500 Internal Server
.
Tipos de soma de verificação de objeto inteiro e composta
No Amazon S3, há dois tipos de somas de verificação compatíveis:
-
Somas de verificação de objeto inteiro: uma soma de verificação de objeto inteiro é calculada com base em todo o conteúdo de um upload fracionado, abrangendo todos os dados desde o primeiro byte da primeira parte até o último byte da última parte.
nota
Todas as solicitações PUT exigem um tipo de soma de verificação de objeto inteiro.
-
Somas de verificação compostas: uma soma de verificação composta é calculada com base nas somas de verificação individuais de cada parte em um upload fracionado. Em vez de calcular uma soma de verificação com base em todo o conteúdo dos dados, essa abordagem agrega as somas de verificação ao nível da parte (da primeira à última parte) para produzir uma única soma de verificação combinada para o objeto inteiro.
nota
Quando um objeto é carregado como um upload fracionado, a tag de entidade (ETag) do objeto não é um resumo MD5 do objeto inteiro. Em vez disso, o Amazon S3 calcula o resumo MD5 de cada parte à medida que são carregadas. Os resumos MD5 são usados para determinar a ETag do objeto final. O Amazon S3 concatena os bytes para os resumos MD5 e, depois, calcula o resumo MD5 desses valores concatenados. Durante a etapa final de criação da ETag, o Amazon S3 adiciona um traço com o número total de partes ao final.
O Amazon S3 oferece suporte aos seguintes tipos de algoritmo de soma de verificação de objeto inteiro e composta:
-
CRC-64/NVME (
CRC64NVME
): compatível somente com o tipo de algoritmo de objeto inteiro. -
CRC-32 (
CRC32
): compatível com os tipos de algoritmo de objeto inteiro e composto. -
CRC-32C (
CRC32C
): compatível com os tipos de algoritmo de objeto inteiro e composto. -
SHA-1 (
SHA1
): compatível com os tipos de algoritmo de objeto inteiro e composto. -
SHA-256 (
SHA256
): compatível com os tipos de algoritmo de objeto inteiro e composto.
Uploads de parte única
As somas de verificação de objetos que são carregados em uma única parte (usando PutObject
) são tratadas como somas de verificação de objeto inteiro. Ao fazer upload de um objeto no console do Amazon S3, você pode escolher o algoritmo de soma de verificação que deseja que o S3 use e também (opcionalmente) fornecer um valor pré-calculado. O Amazon S3 valida essa soma de verificação antes de armazenar o objeto e o valor de soma de verificação dele. Você pode verificar a integridade dos dados de um objeto ao solicitar o valor da soma de verificação durante os downloads de objetos.
Carregamentos fracionados
Ao fazer upload do objeto em várias partes usando a API MultipartUpload
, você pode especificar o algoritmo de soma de verificação que deseja que o Amazon S3 use e o tipo de soma de verificação (objeto inteiro ou composta).
A tabela a seguir indica qual tipo de algoritmo de soma de verificação é compatível com cada algoritmo de soma de verificação em um upload fracionado:
Algoritmo da soma de verificação | Objeto inteiro | Composto |
---|---|---|
CRC-64/NVME (CRC64NVME ) |
Sim | Não |
CRC-32 (CRC32 ) |
Sim | Sim |
CRC-32C (CRC32C ) |
Sim | Sim |
SHA-1 (SHA1 ) |
Sim | Sim |
SHA-256 (SHA256 ) |
Sim | Sim |
Usar somas de verificação de objetos inteiros para upload fracionado
Ao criar ou realizar um upload fracionado, você pode usar somas de verificação de objeto inteiro para validação no upload. Isso significa que é possível fornecer o algoritmo de soma de verificação para a API MultipartUpload
, simplificando as ferramentas de validação de integridade, pois você não precisa mais rastrear os limites das partes dos objetos carregados. Você pode fornecer a soma de verificação do objeto inteiro na solicitação CompleteMultipartUpload
com o tamanho do objeto.
Ao fornecer uma soma de verificação de objeto inteiro durante um upload fracionado, o AWS SDK envia a soma de verificação para o Amazon S3, e o S3 valida a integridade do objeto do lado do servidor, comparando-a com o valor recebido. Depois, o Amazon S3 armazena o objeto se os valores corresponderem. Se os dois valores não corresponderem, o S3 reprovará a solicitação com um erro BadDigest
. A soma de verificação do objeto também é armazenada nos metadados do objeto que você usará posteriormente para validar a integridade dos dados do objeto.
Para somas de verificação de objeto inteiro, você pode usar os algoritmos de soma de verificação CRC-64/NVME (CRC64NVME
), CRC-32 (CRC32
) ou CRC-32C (CRC32C
) no S3. As somas de verificação de objeto inteiro em uploads fracionados só estão disponíveis para somas de verificação baseadas em CRC porque podem ser linearizadas em uma soma de verificação de objeto inteiro. Essa linearização permite que o Amazon S3 paralelize as solicitações para melhorar a performance. Em particular, o S3 pode calcular a soma de verificação do objeto inteiro com base nas somas de verificação ao nível da parte. Esse tipo de validação não está disponível para outros algoritmos, como SHA e MD5. Como o S3 tem proteções de integridade padrão, se os objetos forem carregados sem uma soma de verificação, o S3 anexará automaticamente o algoritmo de soma de verificação CRC-64/NVME (CRC64NVME
) de objeto inteiro recomendado ao objeto.
nota
Para inicializar o upload fracionado, você pode especificar o algoritmo de soma de verificação e o tipo de soma de verificação de objeto inteiro. Depois de especificar o algoritmo de soma de verificação e o tipo de soma de verificação de objeto inteiro, você pode fornecer o valor da soma de verificação de objeto inteiro para o upload fracionado.
Usar somas de verificação ao nível da parte para upload fracionado
Quando os objetos são carregados no Amazon S3, eles podem ser carregados como um único objeto ou em partes por meio do processo de upload fracionado. Você pode escolher um tipo de Checksum para o upload fracionado. Para somas de verificação ao nível da parte (ou somas de verificação compostas) em uploads fracionados, o Amazon S3 calcula a soma de verificação de cada parte usando o algoritmo de soma de verificação especificado. Você pode usar UploadPart
para fornecer os valores de soma de verificação de cada parte. Se o objeto que você tentar carregar no console do Amazon S3 estiver configurado para usar o algoritmo de soma de verificação CRC-64/NVME (CRC64NVME
) e exceder 16 MB, ele será automaticamente designado como uma soma de verificação de objeto inteiro.
Depois, o Amazon S3 usa os valores de soma de verificação ao nível da parte armazenados para confirmar se cada parte foi carregada corretamente. Quando a soma de verificação de cada parte (para o objeto inteiro) é fornecida, o S3 usa os valores de soma de verificação armazenados de cada parte para calcular a soma de verificação do objeto inteiro internamente, comparando esse valor com o valor de soma de verificação fornecido. Isso minimiza os custos de computação, pois o S3 pode calcular uma soma de verificação de objeto inteiro usando a soma de verificação das partes. Para ter mais informações sobre os uploads fracionados, consulte Carregar e copiar objetos usando upload fracionado no Amazon S3 e Usar somas de verificação de objetos inteiros para upload fracionado.
Quando o objeto tiver sido completamente carregado, você poderá usar a soma de verificação final calculada para verificar a integridade dos dados do objeto.
Ao fazer upload de uma parte do upload fracionado, esteja ciente do seguinte:
-
Para recuperar informações sobre o objeto, incluindo o número de partes que compõem o objeto inteiro, você pode usar a operação
GetObjectAttributes
. Com somas de verificação adicionais, também é possível recuperar informações de cada parte, incluindo o valor da soma de verificação da parte. -
Para uploads concluídos, é possível obter a soma de verificação de uma parte individual usando as operações
GetObject
ouHeadObject
e especificando um número de partes ou intervalo de bytes que se alinha a uma única parte. Se você quiser recuperar os valores da soma de verificação para partes individuais de carregamentos fracionados ainda em andamento, poderá usarListParts
. -
Devido à forma como o Amazon S3 calcula a soma de verificação para objetos fracionados, o valor da soma de verificação do objeto poderá ser alterado se você copiá-lo. Se estiver usando um SDK ou a API REST e chamar
CopyObject
, o Amazon S3 copiará qualquer objeto até as limitações de tamanho da operação de APICopyObject
. O Amazon S3 faz essa cópia como uma única ação, independentemente de o objeto ter sido carregado em uma única solicitação ou como parte de um carregamento fracionado. Com um comando copy, a soma de verificação do objeto é uma soma de verificação direta do objeto completo. Se o objeto tiver sido originalmente carregado usando um upload fracionado, o valor da soma de verificação será alterado mesmo que os dados não mudem. -
Os objetos que ultrapassam as limitações de tamanho da operação de API
CopyObject
devem usar comandos de cópia de upload fracionado. -
Quando você executar algumas operações usando o AWS Management Console, o Amazon S3 usará o carregamento fracionado se o objeto tiver mais de 16 MB.
Operações de soma de verificação
Depois de fazer upload de objetos, você pode obter o valor da soma de verificação e compará-lo com um valor de soma de verificação pré-calculado ou armazenado anteriormente do mesmo tipo de algoritmo. Os exemplos a seguir mostram quais operações de soma de verificação ou métodos você pode usar para verificar a integridade dos dados.
Para saber mais sobre como usar o console e especificar algoritmos de soma de verificação a serem usados ao carregar objetos, consulte Fazer upload de objetos e Tutorial: verificar a integridade dos dados no Amazon S3 com somas de verificação adicionais
O exemplo a seguir mostra como usar os AWS SDKs para fazer upload de um arquivo grande com upload fracionado, baixar um arquivo grande e validar um arquivo de upload fracionado usando SHA-256 para validação de arquivos.
Você pode enviar solicitações REST para carregar um objeto com um valor de soma de verificação para verificar a integridade dos dados com PutObject. Você também pode recuperar o valor da soma de verificação para objetos usando GetObject ou HeadObject.
Você pode enviar uma solicitação PUT
para carregar um objeto de até 5 GB em uma única operação. Para obter mais informações, consulte PutObject
na Referência de comando da AWS CLI. Você também pode usar get-object
e head-object
para recuperar a soma de verificação de um objeto já carregado a fim de verificar a integridade dos dados.
Para obter informações, consulte Amazon S3 CLI FAQ no Guia do usuário da AWS Command Line Interface.
Usar Content-MD5 ao carregar objetos
Outra maneira de verificar a integridade do objeto após o carregamento é fornecer um resumo MD5 do objeto quando você o carrega. Se você calcular o resumo MD5 para seu objeto, poderá fornecê-lo com o comando PUT
usando o cabeçalho Content-MD5
.
Após o carregamento do objeto, o Amazon S3 calcula o resumo MD5 do objeto e o compara com o valor que você forneceu. A solicitação só será bem-sucedida se os dois resumos corresponderem.
Não é necessário fornecer um resumo MD5, mas você pode usá-lo para verificar a integridade do objeto como parte do processo de carregamento.
Usar Content-MD5 e a ETag para verificar objetos carregados
A etiqueta de entidade (ETag) de um objeto representa uma versão específica dele. Lembre-se de que a ETag reflete apenas as alterações no conteúdo de um objeto, não as alterações nos metadados dele. Se apenas os metadados de um objeto forem alterados, a ETag permanecerá a mesma.
Dependendo do objeto, a ETag do objeto pode ser um resumo MD5 dos dados do objeto:
-
Se um objeto for criado pela operação
PutObject
,PostObject
ouCopyObject
, ou por meio do AWS Management Console, e ele também for em texto simples ou criptografado no lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3), ele terá uma ETag que é um resumo MD5 dos respectivos dados. -
Se um objeto for criado pela operação
PutObject
,PostObject
ouCopyObject
, ou por meio do AWS Management Console, e for criptografado no lado do servidor com chaves fornecidas pelo cliente (SSE-C) ou com criptografia no lado do servidor com chaves AWS Key Management Service(AWS KMS) (SSE-KMS), ele terá uma ETag que não é um resumo MD5 dos respectivos dados. -
Se um objeto for criado pelo processo de carregamento fracionado ou pela operação
UploadPartCopy
, a respectiva ETag não será um resumo MD5, independentemente do método de criptografia. Se um objeto for maior que 16 MB, o AWS Management Console o carregará ou copiará como carregamento fracionado e, por isso, a ETag não será um resumo MD5.
Para objetos em que a ETag é o resumo Content-MD5
do objeto, você pode comparar o valor da ETag do objeto com um resumo Content-MD5
calculado ou armazenado anteriormente.
Usar somas de verificação à direita
Ao fazer upload de objetos no Amazon S3, você pode fornecer uma soma de verificação pré-calculada para o objeto ou usar um AWS SDK para criar automaticamente somas de verificação finais para uploads fragmentados em seu nome. Se você usar uma soma de verificação final, o Amazon S3 gerará automaticamente a soma de verificação usando o algoritmo especificado para validar a integridade do objeto nos uploads fragmentados, quando você fizer upload de um objeto.
Para criar uma soma de verificação à direita ao usar um AWS SDK, preencha o parâmetro ChecksumAlgorithm
com seu algoritmo preferido. O SDK usa esse algoritmo para calcular a soma de verificação do objeto (ou das partes do objeto) e a anexa automaticamente ao final da solicitação de upload fragmentado. Esse comportamento economiza tempo porque o Amazon S3 executa a verificação e o carregamento de seus dados em uma única passagem.
Importante
Se estiver usando o S3 Object Lambda, todas as solicitações ao S3 Object Lambda serão assinadas usando s3-object-lambda
em vez de s3
. Esse comportamento afeta a assinatura dos valores de soma de verificação à direita. Para obter mais informações sobre o S3 Object Lambda, consulte Transformar objetos com o S3 Object Lambda.
Cabeçalhos de soma de verificação final
Para fazer uma solicitação de codificação de conteúdo fragmentado, o Amazon S3 exige que os servidores clientes incluam vários cabeçalhos para analisar corretamente a solicitação. Os servidores clientes devem incluir os seguintes cabeçalhos:
-
x-amz-decoded-content-length
: esse cabeçalho indica o tamanho em texto simples dos dados reais que estão sendo carregados no Amazon S3 com a solicitação. -
x-amz-content-sha256
: esse cabeçalho indica o tipo de upload fragmentado incluído na solicitação. Para uploads fragmentados com somas de verificação finais, o valor do cabeçalho éSTREAMING-UNSIGNED-PAYLOAD-TRAILER
para solicitações que não usam assinatura de carga útil eSTREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER
para solicitações que usam assinatura de carga útil SigV4. (Para ter mais informações sobre a implementação de cargas úteis assinadas, consulte Signature calculations for the authorization header: Transferring a payload in multiple chunks.) -
x-amz-trailer
: esse cabeçalho indica o nome do cabeçalho final na solicitação. Se existirem somas de verificação finais (em que os AWS SDKs anexam somas de verificação aos corpos de solicitações codificadas), o valor do cabeçalhox-amz-trailer
inclui o prefixox-amz-checksum-
e termina com o nome do algoritmo. No momento, os seguintes valores dex-amz-trailer
são compatíveis:-
x-amz-checksum-crc32
-
x-amz-checksum-crc32c
-
x-amz-checksum-crc64nvme
-
x-amz-checksum-sha1
-
x-amz-checksum-sha256
-
nota
Você também pode incluir o cabeçalho Content-Encoding
, com o valor fragmentado, na solicitação. Embora esse cabeçalho não seja obrigatório, incluí-lo pode minimizar os problemas de proxy HTTP ao transmitir dados codificados. Se outro cabeçalho Content-Encoding
(como gzip) existir na solicitação, o cabeçalho Content-Encoding
incluirá o valor fragmentado em uma lista de codificações separadas por vírgulas. Por exemplo, Content-Encoding:
aws-chunked, gzip
.
Partes fragmentadas
Quando você faz upload de um objeto para o Amazon S3 usando codificação fragmentada, a solicitação de upload inclui os seguintes tipos de fragmentos (formatados na ordem listada):
-
Fragmentos de corpo de objeto: pode haver um, vários ou nenhum fragmento de corpo associado a uma solicitação de upload fragmentado.
-
Fragmentos de conclusão: pode haver um, vários ou nenhum fragmento de corpo associado a uma solicitação de upload fragmentado.
-
Fragmentos finais: a soma de verificação final é listada após o fragmento de conclusão. Só é permitido um fragmento final.
nota
Cada upload fragmentado deve terminar com um CRLF final (como \r\n
) para indicar o fim da solicitação.
Para conferir exemplos de formatação fragmentada, consulte Exemplos: uploads fragmentados com somas de verificação finais.
Fragmentos de corpo de objeto
Os fragmentos de corpo de objeto são os fragmentos que contêm os dados reais do objeto que estão sendo carregados no S3. Esses fragmentos têm restrições consistentes de tamanho e formato.
Tamanho do fragmento de corpo de objeto
Esses fragmentos devem conter pelo menos 8.192 bytes (ou 8 KiB) de dados do objeto, exceto o fragmento final do corpo, que pode ser menor. Não há um tamanho máximo explícito para os fragmentos, mas todos serão menores do que o tamanho máximo de upload de 5 GB. Os tamanhos dos fragmentos podem variar de um para o outro com base na implementação do servidor cliente.
Formato do fragmento de corpo de objeto
Os fragmentos de corpo de objeto começam com a codificação hexadecimal do número de bytes no fragmento de corpo de objeto, seguidos por um CRLF (Carriage Return Line Feed), os bytes do objeto desse fragmento e outro CRLF.
Por exemplo:
hex-encoding-of-object-bytes-in-chunk
\r\nchunk-object-bytes
\r\n
No entanto, quando o fragmento é assinado, o fragmento de corpo de objeto segue um formato diferente, em que a assinatura é anexada ao tamanho do fragmento com um delimitador de ponto e vírgula. Por exemplo:
hex-encoding-of-object-bytes-in-chunk
;chunk-signature
\r\nchunk-object-bytes
\r\n
Para ter mais informações sobre a assinatura de fragmentos, consulte Signature calculations for the Authorization Header: Transferring a payload in multiple chunks (AWS Signature Version 4). Para ter mais informações sobre a formatação de fragmentos, consulte Chunked transfer encoding
Fragmentos de conclusão
É necessário que os fragmentos de conclusão sejam o último fragmento de corpo de objeto de cada upload fragmentado. O formato de um fragmento de conclusão é semelhante ao de um fragmento de corpo, mas sempre contém zero byte de dados do objeto. (O valor de zero byte de dados do objeto indica que todos os dados foram carregados.) Os uploads fragmentados devem incluir um fragmento de conclusão como último fragmento de corpo de objeto, seguindo um formato como este:
0\r\n
No entanto, se a solicitação de codificação de conteúdo usar assinatura de carga útil, o formato será o seguinte:
0;
chunk-signature
\r\n
Fragmentos finalizadores
Os fragmentos finalizadores contêm a soma de verificação calculada para todas as solicitações de upload do S3. Os fragmentos finalizadores incluem dois campos: um campo de nome de cabeçalho e um campo de valor de cabeçalho. O campo de nome de cabeçalho de uma solicitação de upload deve corresponder ao valor enviado no cabeçalho da solicitação x-amz-trailer
. Por exemplo, se uma solicitação contiver x-amz-trailer: x-amz-checksum-crc32
e o fragmento finalizador tiver o nome de cabeçalho x-amz-checksum-sha1
, a solicitação falhará. O campo de valor no fragmento finalizador inclui uma codificação base64 do valor de soma de verificação big-endian desse objeto. (A ordenação big-endian armazena o byte de dados mais significativo no endereço de memória mais baixo e o byte menos significativo no maior endereço de memória.) O algoritmo usado para calcular essa soma de verificação é o mesmo que o sufixo do nome de cabeçalho (por exemplo, crc32
).
Formato do fragmento finalizador
Os fragmentos finalizadores usam o seguinte formato para solicitações de carga útil não assinadas:
x-amz-checksum-
lowercase-checksum-algorithm-name
:base64-checksum-value
\n\r\n\r\n
Para solicitações com cargas úteis assinadas com SigV4, o fragmento finalizador inclui uma assinatura finalizadora após o fragmento.
trailer-checksum
\n\r\ntrailer-signature
\r\n
Você também pode adicionar o CRLF diretamente ao final do valor de soma de verificação base64. Por exemplo:
x-amz-checksum-
lowercase-checksum-algorithm-name
:base64-checksum-value
\r\n\r\n
Exemplos: uploads fragmentados com somas de verificação finais
O Amazon S3 oferece suporte a uploads fragmentados que usam codificação de conteúdo aws-chunked
para solicitações PutObject
e UploadPart
com somas de verificação finais.
exemplo 1: solicitação PutObject
fragmentada não assinada com uma soma de verificação final CRC-32
Veja a seguir um exemplo de uma solicitação PutObject
fragmentada com uma soma de verificação final CRC-32. Nesse exemplo, o cliente faz upload de um objeto de 17 KB em três fragmentos não assinados e acrescenta um fragmento de soma de verificação final CRC-32 usando o cabeçalho x-amz-checksum-crc32
.
PUT /Key+ HTTP/1.1 Host:
amzn-s3-demo-bucket
Content-Encoding: aws-chunked x-amz-decoded-content-length:17408
x-amz-content-sha256: STREAMING-UNSIGNED-PAYLOAD-TRAILER x-amz-trailer: x-amz-checksum-crc322000
\r\n // Object body chunk 1 (8192 bytes)object-bytes
\r\n2000
\r\n // Object body chunk 2 (8192 bytes)object-bytes
\r\n400
\r\n // Object body chunk 3 (1024 bytes)object-bytes
\r\n0
\r\n // Completion chunk x-amz-checksum-crc32:YABb/g==
\n\r\n\r\n // Trailer chunk (note optional \n character) \r\n // CRLF
Veja aqui um exemplo de resposta:
HTTP/1.1 200 ETag: ETag x-amz-checksum-crc32: YABb/g==
nota
O uso da quebra de linha \n
no final do valor da soma de verificação pode variar entre os clientes.
exemplo 2: solicitação PutObject
fragmentada assinada com SigV4 com uma soma de verificação final CRC-32 (CRC32
)
Veja a seguir um exemplo de uma solicitação PutObject
fragmentada com uma soma de verificação final CRC-32. Essa solicitação usa a assinatura de carga útil SigV4. Nesse exemplo, o cliente faz upload de um objeto de 17 KB em três fragmentos assinados. Além dos fragmentos object
body
, o completion chunk
e o trailer chunk
também são assinados.
PUT /Key+ HTTP/1.1 Host:
amzn-s3-demo-bucket
.s3.amazonaws.com Content-Encoding: aws-chunked x-amz-decoded-content-length:17408
x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER x-amz-trailer: x-amz-checksum-crc32authorization-code
// SigV4 headers authorization2000
;chunk-signature=signature-value
...\r\n // Object body chunk 1 (8192 bytes)object-bytes
\r\n2000
;chunk-signature
\r\n // Object body chunk 2 (8192 bytes)object-bytes
\r\n400
;chunk-signature
\r\n // Object body chunk 3 (1024 bytes)object-bytes
\r\n0
;chunk-signature
\r\n // Completion chunk x-amz-checksum-crc32:YABb/g==
\n\r\n // Trailer chunk (note optional \n character)trailer-signature
\r\n \r\n // CRLF
Veja aqui um exemplo de resposta:
HTTP/1.1 200 ETag: ETag x-amz-checksum-crc32: YABb/g==