Referência geral da AWS
Guia de referência (Versão 1.0)

Assinar solicitações de API do AWS

Ao enviar solicitações de HTTP para a AWS, você assina as solicitações para que a AWS possa identificar quem as enviou. Para assinar solicitações, use a chave de acesso da AWS, que é formada por um ID da chave de acesso e a chave de acesso secreta. Algumas solicitações não precisam ser assinadas, como as solicitações anônimas para o Amazon Simple Storage Service (Amazon S3) e algumas operações de API no AWS Security Token Service (AWS STS), como AssumeRoleWithWebIdentity.

nota

Você precisa saber como assinar solicitações HTTP apenas quando as criar manualmente. Quando você usa a AWS Command Line Interface (AWS CLI) ou um dos SDKs da AWS para fazer solicitações para a AWS, essas ferramentas assinam automaticamente as solicitações para você com a chave de acesso que você especifica ao configurar as ferramentas. Se você usar essas ferramentas, não precisará saber como assinar solicitações por si mesmo.

Quando você precisa assinar solicitações?

Ao escrever um código personalizado para enviar solicitações HTTP para a AWS, é necessário incluir um código para assinar as solicitações. Você pode fazer isso pelas seguintes razões:

  • Você está trabalhando com uma linguagem de programação para a qual não há nenhum SDK da AWS.

  • Você deseja ter controle total sobre como uma solicitação é enviada para a AWS.

Você não precisa assinar uma solicitação quando usa a AWS Command Line Interface (AWS CLI) ou um dos AWS SDKs. Essas ferramentas gerenciam os detalhes da conexão, como calcular assinaturas, lidar com novas tentativas de solicitação e tratar erros. Na maioria dos casos, elas também contêm código de exemplo, tutoriais e outros recursos para ajudá-lo a começar a criar aplicativos que interagem com a AWS.

Por que as solicitações são assinadas

O processo de assinatura ajuda a proteger as solicitações das seguintes formas:

  • Verificar a identidade do solicitante

    A assinatura garante que a solicitação foi enviada por alguém com uma chave de acesso válida. Para obter mais informações, consulte Compreender os conceitos e suas credenciais de segurança.

  • Proteger dados em trânsito

    Para evitar violação de uma solicitação enquanto ela estiver em trânsito, alguns dos elementos de solicitação são usados para calcular um hash (resumo) da solicitação, e o valor de hash resultante é incluído como parte da solicitação. Quando um serviço da AWS recebe a solicitação, ele usa as mesmas informações para calcular um hash e as compara com o valor de hash na sua solicitação. Se os valores não coincidirem, a AWS nega a solicitação.

  • Proteger contra ataques potenciais de replay

    Na maioria dos casos, uma solicitação deve chegar à AWS no lapso de cinco minutos a partir da marca de tempo na solicitação. Caso contrário, a AWS negará a solicitação.

Solicitações de assinatura

Para assinar uma solicitação, primeiro calculamos um hash (resumo) da solicitação. Em seguida, você usa o valor do hash, algumas outras informações da solicitação e sua chave de acesso secreta para calcular outro hash conhecido como a assinatura. Depois, a assinatura é adicionada à solicitação de uma das seguintes formas:

  • Usando o cabeçalho Authorization HTTP.

  • Adicionando um valor de string de consulta à solicitação. Como a assinatura faz parte do URL nesse caso, esse tipo de URL é chamado de pre-signed URL.

Versões de assinatura

A AWS oferece suporte a duas versões de assinatura: Signature versão 4 e Signature versão 2. Você deve usar Signature versão 4. Todos os serviços da AWS oferecem suporte para Signature versão 4, exceto o Amazon SimpleDB, que requer o Signature versão 2. Para serviços da AWS que oferecem suporte para ambas as versões, recomendamos que você use o Signature versão 4.

Todas as regiões da AWS oferecem suporte para Signature versão 4.