Assinar solicitações de API do AWS
Importante
Caso use um AWS SDK (consulte Código de exemplo e Bibliotecas
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. Para calcular uma assinatura, primeiro concatene os elementos de solicitação selecionados para formar uma string, chamada de string a ser assinada. Em seguida, use uma chave de assinatura para calcular o código de autenticação de mensagens por hash (HMAC) da string para assinar.
No AWS Signature Version 4, você não usa sua chave de acesso secreta apenas para assinar a solicitação. Em vez disso, use primeiro sua chave de acesso secreta para derivar uma chave de assinatura. A chave de assinatura derivada é específica para data, serviço e região. Para obter mais informações sobre como criar uma chave de assinatura em diferentes linguagens de programação, consulte Exemplos de assinatura de solicitação.
A versão 4 do Signature é o protocolo de assinatura da AWS. A AWS também oferece suporte a uma extensão, a Signature Version 4A, que oferece suporte a assinaturas para solicitações de API multirregionais. Para obter mais informações, consulte o projeto sigv4a-signing-examples
O diagrama a seguir ilustra o processo geral de computação de uma assinatura.
-
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 variável 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. -
Para chave de assinatura, o diagrama mostra uma série de cálculos, em que o resultado de cada etapa é inserido na etapa seguinte. 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.
Conteúdo
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.
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.