¿Cómo puedo proporcionar autorización de IAM entre cuentas para las API HTTP de API Gateway?

Última actualización: 31-08-2022

Quiero activar la autenticación de AWS Identity and Access Management (IAM) para el acceso entre cuentas a mi API HTTP de Amazon API Gateway. ¿Cómo se configura?

Descripción corta

Para las API de REST de API Gateway, puede utilizar políticas de recursos y, así, proporcionar autenticación de IAM entre cuentas. Sin embargo, esta opción no está disponible para las API HTTP de API Gateway.

Puede usar la acción de API sts:AssumeRole para asumir un rol para la cuenta de API HTTP. El rol asumido proporciona credenciales de seguridad temporales que se pueden usar para invocar la API HTTP en otra cuenta.

Resolución

Crear las credenciales temporales de IAM

Nota: Si se producen errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de que utiliza la versión más reciente de la AWS CLI.

1.    Cree una política de IAM para la cuenta A que aloje la API HTTP. Esta política proporciona permiso de invocación para el ARN execute-api de la 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.    Cree un rol de IAM en la cuenta A, agregue “Trusted Entity Type” (Tipo de entidad de confianza) como “AWS Account” (Cuenta de AWS) e ingrese el ID de la cuenta B.

3.    Adjunte la política de IAM creada en el paso 1 al rol de IAM creado en el paso 2.

4.    Cree una política de IAM para la cuenta B de modo que se permita la acción de la API sts:AssumeRole:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
    }
  ]
}

5.    Adjunte la política de IAM al usuario en la cuenta B.

6.    Ejecute el comando assume-role de la AWS CLI de esta manera:

$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session

Salida de ejemplo:

{
    "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"
    }
}

Dentro del objeto de credenciales necesita AccessKeyId, SecretAccessKey y SessionToken. Estas credenciales temporales proporcionadas por el rol asumido se pueden usar para invocar la API HTTP.

Probar la autenticación de IAM

Use la aplicación Postman para enviar una solicitud a su recurso de API mediante el método para el que activó la autenticación de IAM.

Nota: Para autenticar manualmente las solicitudes que se envían a API Gateway mediante otra herramienta o entorno, utilice el proceso de firma Signature Version 4 (SigV4). Para obtener más información, consulte Signing AWS API requests (Firma de solicitudes API de AWS).

1.    En Postman, seleccione la pestaña Authorization (Autorización) y haga lo siguiente:
En Type (Tipo) , elija AWS Signature (Firma de AWS).
En AccessKey, SecretKey y SessionToken, ingrese los valores de la llamada a la API assume-role.

2.    En Enter request URL (Ingresar URL de solicitud), ingrese la URL de invocación de su API de manera similar a la siguiente:

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

Una solicitud autenticada devuelve un código de respuesta 200 OK. Una solicitud no autorizada devuelve el mensaje Missing Authentication Token (Falta el token de autenticación) y un código de respuesta 403 Forbidden (403 Prohibido).


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?