Assinar solicitações de API do AWS - AWS Identity and Access Management

Assinar solicitações de API do AWS

Importante

Caso use um AWS SDK (consulte Código de exemplo e Bibliotecas) ou a ferramenta AWS Command Line Interface (CLI) para enviar solicitações de API para a AWS, você pode pular esta seção, pois os clientes de SDK e CLI autenticam suas solicitações usando as chaves de acesso fornecidas por você. A menos que haja um bom motivo para não usar, é recomendável usar sempre um SDK ou a CLI.

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 no GitHub.

O diagrama a seguir ilustra o processo geral de computação de uma assinatura.


            Uma imagem das partes de uma assinatura, inclusive a string para assinar, a chave de assinatura e a assinatura calculada.
  • 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.

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.