View a markdown version of this page

Cálculos de assinatura para cabeçalhos finais (uploads fragmentados) (AWS Signature Version 4) - Amazon Simple Storage Service

Cálculos de assinatura para cabeçalhos finais (uploads fragmentados) (AWS Signature Version 4)

Ao autenticar solicitações usando o cabeçalho Authorization, você também pode fazer upload da carga útil em fragmentos. Ao enviar os dados do objeto em fragmentos, você também tem a opção de incluir cabeçalhos finais. (Para ter mais informações, consulte Cálculos de assinatura para o cabeçalho de autorização: transferência de carga útil em vários fragmentos (upload fragmentado) (AWS Signature Version 4).) Esta seção descreve as etapas que você precisa seguir quando quiser incluir um cabeçalho final ao término do upload de vários fragmentos.

Importante

Ao incluir cabeçalhos finais, você deve enviar o seguinte no cabeçalho inicial:

Os cabeçalhos finais só são enviados após o upload dos fragmentos. Os fragmentos anteriores são enviados normalmente e assinados conforme descrito nas seções anteriores, incluindo o envio do fragmento final com uma carga útil de 0 bytes. Os cabeçalhos finais são incluídos como seu próprio fragmento e enviados após o fragmento final com uma carga útil de 0 bytes. Por exemplo, se os dados terminassem com um fragmento de 100 KB, você enviaria o seguinte:

  • Fragmentos de dados anteriores

  • Fragmento final de 100 KB do objeto

  • Fragmento de 0 bytes que indica o fim do objeto

  • Fragmento de cabeçalhos finais

Exemplos: verificação de cálculos de assinatura

Você pode usar os exemplos desta seção como uma referência para verificar os cálculos de assinatura no seu código. Antes de analisar os exemplos, observe o seguinte:

  • Os cálculos de assinatura nesses exemplos usam os seguintes exemplos de credenciais de segurança.

    Parâmetro Valor
    AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
    AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  • Todos os exemplos usam o carimbo de data/hora de solicitação 20130524T000000Z (Fri, 24 May 2013 00:00:00 GMT).

  • Todos os exemplos usam examplebucket como nome do bucket.

  • Presume-se que o bucket esteja na região Leste dos EUA (Norte da Virgínia) e a credencial Scope e os cálculos de Signing Key usem us-east-1 como especificador da região. Para obter mais informações, consulte Regiões e endpoints do na Referência geral do Amazon Web Services.

  • Você pode usar solicitações no estilo de caminho ou no estilo hospedado virtual. Os exemplos a seguir usam solicitações de estilo hospedado virtual, por exemplo:

    https://examplebucket.s3.amazonaws.com/photos/photo1.jpg

    Para obter mais informações, consulte Hospedagem virtual de buckets no Guia do usuário do Amazon Simple Storage Service.

O exemplo a seguir envia uma solicitação PUT para fazer upload de um objeto. Os cálculos de assinatura presumem o seguinte:

  • Você está fazendo o upload de um arquivo de texto de 65 KB, e o conteúdo do arquivo é uma string de um único caractere composta pela letra ‘a’.

  • O fragmento tem 64 KB. Como resultado, a carga útil é carregada em três fragmentos: 64 KB, 1 KB e o fragmento final com 0 bytes de dados.

  • O objeto resultante tem o nome de chave chunkObject.txt.

  • Você está solicitando REDUCED_REDUNDANCY como classe de armazenamento adicionando o cabeçalho de solicitação x-amz-storage-class.

  • A transferência inclui um valor de soma de verificação CRC32C como cabeçalho final.

Para obter informações sobre a ação da API, consulte PutObject. A sintaxe de solicitação geral é a seguinte:

PUT /examplebucket/chunkObject.txt HTTP/1.1 Host: s3.amazonaws.com x-amz-date: 20130524T000000Z x-amz-storage-class: REDUCED_REDUNDANCY Authorization: SignatureToBeCalculated x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER Content-Encoding: aws-chunked x-amz-decoded-content-length: 66560 x-amz-trailer: x-amz-checksum-crc32c Content-Length: 66946 <Payload>

As etapas a seguir mostram cálculos de assinatura.

  1. Assinatura inicial — Criar uma string a ser assinada
    1. CanonicalRequest

      PUT /examplebucket/chunkObject.txt content-encoding:aws-chunked host:s3.amazonaws.com x-amz-content-sha256:STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER x-amz-date:20130524T000000Z x-amz-decoded-content-length:66560 x-amz-storage-class:REDUCED_REDUNDANCY x-amz-trailer:x-amz-checksum-crc32c content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class;x-amz-trailer STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

      Na solicitação canônica, a terceira linha está vazia, pois não há parâmetros de consulta na solicitação. A última linha é a string constante fornecida como o valor da carga útil com hash, que deve ser igual ao valor de x-amz-content-sha256 header.

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 44d48b8c2f70eae815a0198cc73d7a546a73a93359c070abbaa5e6c7de112559

      nota

      Para obter informações sobre cada linha na string a ser assinada, consulte o diagrama que explica o cálculo da assinatura inicial.

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. Assinatura inicial

    106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e

  4. Cabeçalho de autorização

    O cabeçalho de autorização resultante é o seguinte:

    AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-encoding;content-length;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class,Signature=106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e

  5. Fragmento 1: (65536 bytes, com valor 97 para a letra ‘a’)
    1. String do fragmento a ser assinada:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 bf718b6f653bebc184e1479f1935b8da974d701b893afcf49e701f3e2f9f9c5a

      nota

      Para obter informações sobre cada linha na string a ser assinada, consulte o diagrama no tópico anterior (Cálculo da assinatura inicial) que mostra vários componentes da string a ser assinada. Por exemplo, as últimas três linhas consistem no seguinte:

      • previous-signature

      • hash("")

      • hash(current-chunk-data)

    2. Assinatura do fragmento:

      b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
    3. Dados do fragmento enviados:

      10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 <65536-bytes>
  6. Fragmento 2: (1024 bytes, com valor 97 para a letra ‘a’)
    1. String do fragmento a ser assinada:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a
    2. Assinatura do fragmento:

      1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7
    3. Dados do fragmento enviados:

      400;chunk-signature=1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 <1024-bytes>
  7. Fragmento 3: (0 bytes de dados)
    1. String do fragmento a ser assinada:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    2. Assinatura do fragmento:

      2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
    3. Dados do fragmento enviados:

      0;chunk-signature=2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
  8. Fragmento 4: cabeçalhos finais
    1. String do fragmento final a ser assinada:

      AWS4-HMAC-SHA256-TRAILER 20130524T000000Z 20130524/us-east-1/s3/aws4_request 2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 1e376db7e1a34a8ef1c4bcee131a2d60a1cb62503747488624e10995f448d774
      nota

      As duas últimas linhas são previous-signature (a assinatura do fragmento de dados de 0 bytes), hash(trailing-checksum-header-name: base64-encoded-trailing-checksum-value\n).

      O hash é calculado da seguinte forma, sem espaços em branco:

      • O nome do cabeçalho de soma de verificação final

      • Dois pontos (:)

      • O valor da soma de verificação final com codificação base64

      • Um caractere de nova linha (\n).

      Neste exemplo, onde estamos usando o algoritmo de hash crc32c, com o valor da soma de verificação com codificação base64 sOO8/Q==, podemos representar o cálculo da seguinte forma: hash('x-amz-checksum-crc32c:sOO8/Q==\n').

    2. Assinatura do fragmento:

      d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
    3. Dados do fragmento enviados:

      x-amz-checksum-crc32c:sOO8/Q== x-amz-trailer-signature:d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435