AWS Signature Version 4 para solicitações de API
Importante
Caso use um SDK da AWS (consulte Sample Code and Libraries
Em regiões que oferecem suporte a várias versões de assinatura, assinar manualmente as solicitações significa que é necessário especificar qual versão de assinatura está sendo usada. Quando você fornece solicitações para pontos de acesso multirregionais, os SDKs e a CLI automaticamente alternam para o uso do Signature Version 4A, sem configuração adicional.
As informações de autenticação enviadas em uma solicitação devem incluir uma assinatura. O AWS Signature Version 4 (SigV4) é o protocolo de assinatura da AWS para adicionar informações de autenticação às solicitações de API da AWS.
Você não usa sua chave de acesso secreta para assinar solicitações da API. Em vez disso, você usa o processo de assinatura da SigV4. A assinatura de solicitações envolve:
-
A criação de uma solicitação canônica com base nos detalhes da solicitação.
-
O cálculo uma assinatura usando suas credenciais da AWS.
-
Adicionar essa assinatura à solicitação como um cabeçalho de autorização.
A AWS, em seguida, replica esse processo e verifica a assinatura, concedendo ou negando o acesso adequadamente.
A Symmetric SigV4 exige que você derive uma chave que tenha como escopo um único serviço da AWS, em uma única região da AWS, em um determinado dia. Isso torna a chave e a assinatura calculada diferentes para cada região, o que significa que você precisa saber a região à qual a assinatura se destina.
A Assymmetric Signature Versão 4 (SigV4a) é uma extensão compatível com assinatura por um novo algoritmo e geração de assinaturas individuais que podem ser verificadas em mais de uma região da AWS. Com a SIGv4a, você pode assinar uma solicitação para várias regiões com roteamento e failover sem problemas entre regiões. Quando você usa o AWS SDK ou a AWS CLI para invocar uma funcionalidade que exige assinatura multirregional, o tipo de assinatura é alterado automaticamente para usar a Sigv4a. Para obter detalhes, consulte Como a AWS SigV4 funciona.
Como o SigV4 da AWS funciona
As seguintes etapas descrevem o processo geral de computação de uma assinatura com a SigV4:
-
A string para assinar depende do tipo de solicitação. Por exemplo, ao usar o cabeçalho HTTP Authorization ou os parâmetros de consulta para autenticação, utilize uma combinação de elementos de solicitação para criar a string a ser assinada. Para uma solicitação HTTP POST, a política
POST
na solicitação é a string que você assina. -
A chave de assinatura é uma série de cálculos, com o resultado de cada etapa inserido na próxima. A etapa final é a chave de assinatura.
-
Ao receber uma solicitação autenticada, o serviço da AWS recria a assinatura usando as informações de autenticação contidas na solicitação. Se as assinaturas corresponderem, o serviço processará a solicitação. Caso contrário, rejeitará a solicitação.
Para ter mais informações, consulte Elementos de uma assinatura de solicitação de API da AWS.
Como a AWS SigV4 funciona
A Sigv4a usa assinaturas assimétricas baseadas em criptografia com chave pública-privada. A SigV4a passa por um processo de derivação de credenciais cujo escopo é semelhante ao da SigV4, exceto que a SigV4a usa a mesma chave para assinar todas as solicitações sem precisar derivar uma chave de assinatura distinta de acordo com a data, o serviço e a região. Um par de chaves de Algoritmo de Assinatura Digital de Curva Elíptica
O sistema usa criptografia assimétrica para verificar assinaturas multirregionais, de modo que a AWS só precise armazenar suas chaves públicas. As chaves públicas não são secretas e não podem ser usadas para assinar solicitações. Assinaturas assimétricas são necessárias para solicitações de API multirregionais, por exemplo, com os pontos de acesso multirregionais do Amazon S3.
As seguintes etapas descrevem o processo geral de computação de uma assinatura com a SigV4a:
-
A string para assinar depende do tipo de solicitação. Por exemplo, ao usar o cabeçalho HTTP Authorization ou os parâmetros de consulta para autenticação, utilize uma combinação de elementos de solicitação para criar a string a ser assinada. Para uma solicitação HTTP POST, a política
POST
na solicitação é a string que você assina. -
A chave de assinatura é derivada de uma chave de acesso secreta da AWS por uma série de cálculos, sendo que o resultado de cada etapa é inserido na próxima etapa. A etapa final produz o par de chaves.
-
Quando um serviço da AWS recebe uma solicitação assinada com a SigV4a, a AWS verifica a assinatura usando somente a metade pública do par de chaves. Se a assinatura for válida, a solicitação será autenticada e o serviço processará a solicitação. Solicitações com assinaturas inválidas são rejeitadas.
Para obter mais informações sobre a SigV4a para solicitações de API multirregionais, consulte o projeto sigv4a-signing-examples
Quando assinar solicitações
Ao escrever um código personalizado que envia solicitações de API para a AWS, é necessário incluir um código que assine as solicitações. Você poderá escrever um código personalizado porque:
-
Você está trabalhando com uma linguagem de programação para a qual não há nenhum SDK da AWS.
-
Você precisa ter controle total sobre como as solicitações são enviadas à AWS.
Enquanto as solicitações de API autenticam o acesso com o SigV4 da AWS, os SDKs da AWS e a AWS CLI autenticam suas solicitações usando as chaves de acesso que você fornece. Para obter mais informações sobre a autenticação com SDKs da AWS e a AWS CLI, consulte Recursos adicionais.
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
As solicitações autenticadas exigem uma assinatura que você cria usando as chaves de acesso (ID da chave de acesso, chave de acesso secreta). Se você usar credenciais de segurança temporárias, os cálculos da assinatura também exigirão um token de segurança. Para obter mais informações, consulte Credenciais de segurança da AWS, Acesso programático.
-
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. Ao receber a solicitação, um AWS service (Serviço da AWS) usa as mesmas informações para calcular um hash e o compara com o valor de hash na 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.
O SigV4 da AWS pode ser expresso no cabeçalho HTTP Authorization ou como uma string de consulta no URL. Para ter mais informações, consulte Métodos de autenticação.
Recursos adicionais
-
Para obter mais informações sobre o processo de assinatura do SigV4 para diferentes serviços, consulte Exemplos de assinatura de solicitação.
-
Para configurar credenciais para acesso programático à AWS CLI, consulte Authentication and access credentials no AWS Command Line Interface User Guide.
-
Os AWS SDKs incluem código-fonte no GitHub para assinar solicitações de API da AWS. Para obter exemplos de código, consulte Projetos de exemplo em repositório de amostras da AWS.
-
AWS SDK for .NET: AWS4Signer.cs
-
AWS SDK for C++: AWSAuthV4Signer.cpp
-
AWS SDK for Go: sigv4.go
-
AWS SDK for Java: BaseAws4Signer.java
-
AWS SDK for JavaScript: signature-v4
-
AWS SDK for PHP: SignatureV4.php
-
AWS SDK for Python (Boto): signers.py
-
AWS SDK for Ruby: signer.rb
-