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

3 minutos de lectura
0

Quiero activar la autenticación de AWS Identity and Access Management (IAM) para obtener acceso entre cuentas a mi API HTTP de Amazon API Gateway.

Descripción corta

En el caso de las API de REST de API Gateway, puede usar políticas de recursos para 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

Creación de las credenciales temporales de IAM

Nota: Si recibe errores al ejecutar comandos de la interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

1.    Cree una política de IAM para la cuenta A que aloja la API HTTP. Esta política proporciona permisos 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, añada «Tipo de entidad de confianza» como «Cuenta de AWS» e introduzca 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 para permitir 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 de la cuenta B.

6.    Ejecute el comando assume-role de la AWS CLI de forma similar al siguiente:

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

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

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

Prueba de 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 con otra herramienta o entorno, utilice el proceso de firma Signature Version 4 (SigV4). Para obtener más información, consulte Firma de solicitudes de API de AWS.

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

2.    En Introducir la URL de la solicitud, introduzca la URL de invocación de la API similar a la siguiente:

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

Una solicitud autenticada devuelve el código de respuesta 200 OK. Una solicitud no autorizada devuelve el mensaje Falta el token de autenticación y el código de respuesta 403 prohibido.

Información relacionada

How do I activate IAM authentication for API Gateway REST APIs?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un mes