View a markdown version of this page

Autenticação de solicitações: usando o cabeçalho de autorização (AWSSignature Version 4) - Amazon Simple Storage Service

Autenticação de solicitações: usando o cabeçalho de autorização (AWSSignature Version 4)

Visão geral

Usar o cabeçalho HTTP Authorization é o método mais usado para fornecer informações de autenticação. Exceto para solicitações POST e solicitações assinadas usando parâmetros de consulta, todas as operações do Amazon S3 usam o cabeçalho de solicitação Authorization para fornecer informações de autenticação.

Veja a seguir um exemplo de um valor de cabeçalho Authorization. As quebras de linha foram adicionadas a este exemplo somente para facilitar a leitura:

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

A tabela a seguir descreve os vários componentes do valor do cabeçalho Authorization do exemplo anterior:

Componente Descrição
AWS4-HMAC-SHA256

O algoritmo que foi usado para calcular a assinatura. É necessário fornecer esse valor ao usar o AWS Signature Version 4 para autenticação.

A string especifica o AWS Signature Version 4 (AWS4) e o algoritmo de assinatura (HMAC-SHA256).

Credential

Seu ID de chave de acesso e as informações do escopo, como a data, a região e o serviço que foram usados para calcular a assinatura.

Essa string tem a seguinte forma:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

Em que:

  • O valor de <data> é especificado usando o formato YYYYMMDD.

  • O valor de <serviço da aws> é s3 ao enviar uma solicitação ao Amazon S3.

SignedHeaders

Uma lista separada por ponto e vírgula dos cabeçalhos de solicitação usados para computar a Signature. A lista contém somente nomes de cabeçalho, e os nomes dos cabeçalhos devem estar em letras minúsculas. Por exemplo:

host;range;x-amz-date
Signature A assinatura de 256 bits expressa como 64 caracteres hexadecimais minúsculos. Por exemplo:
fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
Os cálculos da assinatura variam de acordo com a opção escolhida para transferência de carga útil.

Os cálculos da assinatura variam de acordo com o método escolhido para transferência da carga útil da solicitação. O S3 oferece suporte às seguintes opções:

  • Transferir carga útil em um único bloco: nesse caso, você tem as seguintes opções de cálculo de assinatura:

    • Opção de carga útil assinada: se desejar, você pode calcular toda a soma de verificação da carga útil e incluí-la no cálculo da assinatura. Isso fornece segurança adicional, mas você precisa ler sua carga útil duas vezes ou armazená-la na memória.

      Por exemplo, para fazer upload de um arquivo, você precisa primeiro ler o arquivo para calcular um hash de carga útil para o cálculo da assinatura e novamente para transmissão ao criar a solicitação. Para cargas úteis menores, essa abordagem pode ser preferível. No entanto, para arquivos grandes, ler o arquivo duas vezes pode ser ineficaz, então talvez você queira carregar os dados em partes.

      Recomendamos que você inclua a soma de verificação da carga útil para aumentar a segurança.

    • Opção de carga útil não assinada: não inclua a soma de verificação da carga útil no cálculo da assinatura.

    Para obter instruções passo a passo sobre como calcular a assinatura e criar o valor do cabeçalho de autorização, consulte Cálculos de assinatura para o cabeçalho de autorização: transferência de carga útil em uma única parte (AWS Signature Version 4).

  • Transferir carga útil em vários blocos (upload em partes): nesse caso, você transfere a carga útil em partes. Você pode transferir uma carga útil em partes, independentemente do tamanho.

    Você pode dividir sua carga útil em partes. Podem ser partes de tamanho fixo ou variável. Ao carregar dados em partes, você evita ler toda a carga útil para calcular a assinatura. Em vez disso, para a primeira parte, você calcula uma assinatura inicial que usa somente os cabeçalhos da solicitação. A segunda parte contém a assinatura da primeira, e cada parte subsequente contém a assinatura da parte anterior. Ao final do upload, você envia uma parte final com 0 bytes de dados que contém a assinatura da última parte da carga útil. Para obter 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).

Ao assinar suas solicitações, você pode usar o AWS Signature Version 4 ou o AWS Signature Version 4A. A principal diferença entre os dois está na forma como a assinatura é calculada. Com o AWS Signature Version 4A, a assinatura não inclui informações específicas da região e é calculada usando o algoritmo AWS4-ECDSA-P256-SHA256.

Além dessas opções, você pode incluir um finalizador com sua solicitação. Para incluir um finalizador em sua solicitação, você precisa especificar isso no cabeçalho definindo x-amz-content-sha256 como o valor apropriado. Se você estiver usando um cabeçalho à direita, deverá incluir x-amz-trailer no cabeçalho e especificar os nomes dos cabeçalhos à direita como uma string em uma lista separada por vírgulas. Todos os cabeçalhos finais são gravados após a parte final. Se você estiver carregando os dados em várias partes, deverá enviar uma parte final com 0 bytes de dados antes de enviar o cabeçalho final.

Ao enviar uma solicitação, você deve informar ao Amazon S3 qual das opções anteriores foi escolhida no cálculo da assinatura, adicionando o cabeçalho x-amz-content-sha256 com um dos seguintes valores:

Valor de cabeçalho Descrição

Valor real da soma de verificação da carga útil

Esse valor é a soma de verificação real do objeto e só é possível quando você está carregando os dados em uma única parte.

UNSIGNED-PAYLOAD

Use isso ao fazer upload do objeto como uma única parte não assinada.

STREAMING-UNSIGNED-PAYLOAD-TRAILER

Use isso ao enviar uma carga útil não assinada em várias partes. Nesse caso, você também tem um cabeçalho final após o upload da parte.

STREAMING-AWS4-HMAC-SHA256-PAYLOAD

Use isso ao enviar uma carga útil em várias partes, e as partes são assinadas usando AWS4-HMAC-SHA256. Isso produz uma assinatura SigV4.

STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

Use isso ao enviar uma carga útil em várias partes, e as partes são assinadas usando AWS4-HMAC-SHA256. Isso produz uma assinatura SigV4. Além disso, o resumo das partes é incluído como cabeçalho final.

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD

Use isso ao enviar uma carga útil em várias partes, e as partes são assinadas usando AWS4-ECDSA-P256-SHA256. Isso produz uma assinatura SigV4A.

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD-TRAILER

Use isso ao enviar uma carga útil em várias partes, e as partes são assinadas usando AWS4-ECDSA-P256-SHA256. Isso produz uma assinatura SigV4A. Além disso, o resumo das partes é incluído como cabeçalho final.

Ao receber a solicitação, o Amazon S3 recria a string a ser assinada usando as informações no cabeçalho Authorization e no cabeçalho date. Em seguida, ele verifica com o serviço de autenticação se as assinaturas coincidem. A data da solicitação pode ser especificada usando o cabeçalho HTTP Date ou o cabeçalho x-amz-date. Se os dois cabeçalhos estiverem presentes, x-amz-date terá precedência.

Se as assinaturas coincidirem, o Amazon S3 processará sua solicitação; caso contrário, a solicitação falhará.

Para saber mais, consulte os seguintes tópicos:

Cálculos de assinatura para o cabeçalho de autorização: transferência de carga útil em uma única parte (AWS Signature Version 4)

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)

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