Je souhaite activer une authentification AWS Identity and Access Management (IAM) pour accéder à mon API REST Amazon API Gateway (API Gateway).
Brève description
Pour les API REST API Gateway, vous pouvez utiliser des stratégies de ressources pour garantir une authentification IAM pour les comptes croisés. Cependant, cette option n'est pas disponible pour les API HTTP API Gateway.
Vous pouvez utiliser l'action d'API sts:AssumeRole pour endosser un rôle pour le compte d'API HTTP. Le rôle endossé fournit des informations d'identification de sécurité temporaires qui peuvent être utilisées pour appeler l'API HTTP dans un autre compte.
Résolution
Créez les informations d'identification temporaires IAM
Remarque : Si des erreurs surviennent lors de l’exécution des commandes de l’interface de la ligne de commande (AWS CLI), vérifiez que vous utilisez la version la plus récente d’AWS CLI.
1. Créez une stratégie IAM pour le compte A qui héberge l'API HTTP. Cette stratégie fournit l'autorisation d'invocation pour l'ARN execute-api de l'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. Créez un rôle IAM dans le compte A, ajoutez « Type d'entité approuvée » comme « Compte AWS » et saisissez l'ID du compte B.
3. Attachez la stratégie IAM créée à l'étape 1 au rôle IAM créé à l'étape 2.
4. Créez une stratégie IAM pour le compte B afin d'autoriser l'action d'API sts:AssumeRole :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
}
]
}
5. Attachez la stratégie IAM à l'utilisateur du compte B.
6. Exécutez la commande assume-role de l'interface de ligne de commande AWS comme suit :
$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session
Exemple de sortie :
{
"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"
}
}
Vérifiez l'objet d'informations d'identification pour AccessKeyID, SecretAccessKey et SessionToken. Ces informations d'identification temporaires fournies par le rôle endossé peuvent être utilisées pour invoquer l'API HTTP.
Testez l'authentification IAM
Utilisez l’application Postman afin d’envoyer une requête à votre ressource d’API en utilisant la méthode pour laquelle vous avez activé l’authentification IAM.
Remarque : Pour authentifier manuellement les requêtes envoyées à API Gateway à l’aide d’un autre outil ou environnement, vous devez utiliser le processus de signature Signature Version 4 (SigV4). Pour plus d'informations, consultez la section Signature de requêtes d'API AWS.
1. Dans Postman, choisissez l'onglet Autorisation et procédez comme suit :
Dans Type, choisissez AWS Signature.
Pour AccessKey, SecretKey et SessionToken, saisissez les valeurs de l'appel d'API assume-role.
2. Pour Saisir l'URL de la requête, saisissez l'URL d'invocation de votre API similaire à l’URL suivante :
https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>
Une requête authentifiée renvoie un code de réponse 200 OK. Une demande non autorisée renvoie le message Jeton d’authentification manquant et un code de réponse 403 Forbidden.
Informations connexes
Comment puis-je activer l'authentification IAM pour les API REST API Gateway ?