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

3 minuto de leitura
0

Quero ativar a autenticação do AWS Identity and Access Management (IAM) para acesso entre contas à minha API HTTP do Amazon API Gateway. Como configuro isso?

Breve descrição

Para as APIs REST do API Gateway, você pode usar políticas de recursos para fornecer autenticação do IAM para várias contas. No entanto, essa opção não está disponível para APIs HTTP do API Gateway.

Você pode usar a ação de API sts:AssumeRole para assumir uma função para a conta da API HTTP. A função assumida fornece credenciais de segurança temporárias que podem ser usadas para invocar a API HTTP em outra conta.

Resolução

Criar as credenciais temporárias do IAM

Observação: se receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está 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 “Trusted Entity Type” (Tipo de entidade confiável) como “AWS Account” (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 AccessKeyId, SecretAccessKey e SessionToken. Essas credenciais temporárias fornecidas por assumed-role podem ser usadas para invocar a API HTTP.

Testar 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 Assinar solicitações de API da AWS.

1.    No Postman, escolha a guia Authorization (Autorização) e faça o seguinte:
Em Type (Tipo), escolha AWS Signature (Assinatura da AWS).
Em AccessKey, SecretKey e SessionToken, insira os valores da chamada de API assume-role.

2.    Em Enter request URL (Inserir URL da solicitação), insira o URL de invocação da API, semelhante ao seguinte:

https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>

Uma solicitação autenticada retorna um código de resposta 200 OK. Uma solicitação não autorizada retorna a mensagem Missing Authentication Token (Token de autenticação ausente) e um código de resposta 403 Forbidden (403 Proibido).


Informações relacionadas

Como faço para ativar a autenticação do IAM para APIs REST do API Gateway?