Desejo ativar a autenticação do AWS Identity and Access Management (AWS IAM) para acesso entre contas da minha API HTTP da Amazon API Gateway.
Breve descrição
Para APIs REST da API Gateway, é possível usar políticas de recursos para fornecer autenticação do IAM entre contas. No entanto, essa opção não está disponível para APIs HTTP da API Gateway.
É possível usar a ação da API sts:AssumeRole para assumir uma função para a conta da API HTTP. O perfil assumido fornece credenciais de segurança temporárias que podem ser usadas para invocar a API HTTP em outra conta.
Resolução
Crie as credenciais temporárias do IAM
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.
1. Crie uma política do IAM para a Conta A que hospeda a API HTTP. Essa política fornece permissão de invocação para o ARN execute-api da API HTTP.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"execute-api:Invoke",
],
"Resource": [
"arn:aws:execute-api:us-east-1:<AccountA-id>:<Api-id>/$default/*/*"
]
}
]
}
2. Crie um perfil do IAM na Conta A, adicione “Tipo de entidade confiável” como “Conta da AWS” e insira o ID da Conta B.
3. Anexe a política do IAM criada na etapa 1 ao perfil do IAM criado na etapa 2.
4. Crie uma política do IAM para a Conta B para permitir a ação da API sts:AssumeRole:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
}
]
}
5. Anexe a política do IAM ao usuário na Conta B.
6. Execute o comando assume-role da AWS CLI semelhante ao seguinte:
$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session
Exemplo de saída:
{
"Credentials": {
"AccessKeyId": "A1B2C3D4E5E6G7H8J9K0",
"SecretAccessKey": "abcdefghijk123456789",
"SessionToken":
"11111111111122222222223333333333344444444455555566666667777777777778888888999999999aaaaaaaaaabbbbbbbbbcccccccc==",
"Expiration": "2022-07-11T15:55:25+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AAAAAAABBBBBBBBBBB:role_session",
"Arn": "arn:aws:sts::<account-id>:assumed-role/<AssumedRoleName>/role_session"
}
}
Verifique o objeto de credenciais para o AccessKeyID, SecretAccessKey e SessionToken. Essas credenciais temporárias fornecidas pela função assumida podem ser usadas para invocar a API HTTP.
Teste a autenticação do IAM
Use a aplicação Postman para enviar uma solicitação ao seu recurso de API usando o método para o qual você ativou a autenticação do IAM.
Observação: para autenticar manualmente as solicitações enviadas ao API Gateway usando outra ferramenta ou ambiente, use o processo de assinatura Signature Version 4 (SigV4). Para obter mais informações, consulte Assinatura de solicitações de API da AWS.
1. No Postman, escolha a guia Autorização e faça o seguinte:
Em Type, escolha AWS Signature.
Para AccessKey, SecretKey e SessionToken, insira os valores da chamada de API assume-role.
2. Em Inserir URL de solicitação, insira o URL de invocação da sua API semelhante ao seguinte:
https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>
Uma solicitação autenticada retorna um código de resposta de 200 OK. Uma solicitação não autorizada retorna a mensagem Missing Authentication Token e um código de resposta 403 Forbidden.
Informações relacionadas
How do I activate IAM authentication for API Gateway REST APIs?