Ir para o conteúdo

Como posso fornecer autorização de IAM entre contas para APIs HTTP da API Gateway?

3 minuto de leitura
0

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?