Je veux activer l'authentification AWS Identity and Access Management (IAM) pour l'accès intercompte à mon API HTTP Amazon API Gateway. Comment procéder ?
Brève description
Pour les API REST API Gateway, vous pouvez utiliser les politiques de ressources afin de fournir des authentifications IAM pour les intercomptes. Cependant, cette option n'est pas disponible pour les API HTTP API Gateway.
Vous pouvez utiliser l'action d'API sts:AssumeRole afin d'assumer un rôle pour le compte d'API HTTP. Le rôle assumé fournit des informations d'identification de sécurité temporaires pouvant être utilisées pour appeler l'API HTTP d'un autre compte.
Solution
Création des informations d'identification temporaires IAM
Remarque : si vous recevez des erreurs lors de l'exécution de commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.
1. Créez une politique IAM pour le compte A qui héberge l'API HTTP. Cette politique fournit une autorisation d'appel 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 « Trusted Entity Type » (Type d'entité fiable) pour « AWS Account » (Compte AWS), puis saisissez l'ID du compte B.
3. Attachez la politique IAM créée à l'étape 1 au rôle IAM créé à l'étape 2.
4. Créez une politique 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 politique IAM à l'utilisateur du compte B.
6. Exécutez la commande AWS CLI assume-role comme dans l'exemple suivant :
$ 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 assumé peuvent être utilisées pour appeler l'API HTTP.
Test de l'authentification IAM
Utilisez l'application Postman afin d'envoyer une demande à votre ressource d'API en utilisant la méthode pour laquelle vous avez activé l'authentification IAM.
Remarque : afin d'authentifier manuellement les demandes 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, veuillez consulter la section Signature des demandes d'API AWS.
1. Dans Postman, cliquez sur l'onglet Authorization (Autorisation) et procédez comme suit :
Pour Type, sélectionnez AWS Signature (Signature AWS).
Pour AccessKey, SecretKey et SessionToken, entrez les valeurs de l'appel d'API assume-role.
2. Pour Enter request URL (Entrez l'URL de la demande), saisissez l'URL d'appel de votre API comme dans l'exemple suivant :
https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>
Une demande authentifiée renvoie un code de réponse 200 OK. Une demande non autorisée renvoie le messageMissing Authentication Token (Jeton d'authentification manquant) et le code de réponse 403 Forbidden (403 Interdit).
informations connexes
Comment activer l'authentification IAM pour les API REST API Gateway ?