Autenticação de solicitações: usando o cabeçalho de autorização (AWSSignature Version 4)
Tópicos
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 ( |
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:
Em que:
|
SignedHeaders |
Uma lista separada por ponto e vírgula dos cabeçalhos de solicitação usados para computar a
|
Signature |
A assinatura de 256 bits expressa como 64 caracteres hexadecimais minúsculos. Por exemplo: 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 |
|
STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER |
Use isso ao enviar uma carga útil em várias partes, e as partes são assinadas usando |
|
STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD |
Use isso ao enviar uma carga útil em várias partes, e as partes são assinadas usando |
|
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 |
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 cabeçalhos finais (uploads fragmentados) (AWS Signature Version 4)