Comment puis-je utiliser un jeton MFA pour authentifier l'accès à mes ressources AWS via l'interface de ligne de commande (CLI AWS)?

Dernière mise à jour : 21/08/2020

Comment puis-je utiliser un jeton MFA pour authentifier l'accès à mes ressources AWS via l'interface de ligne de commande (CLI AWS) ?

Solution

Une bonne pratique consiste à protéger votre compte et ses ressources à l'aide d'un périphérique Multi-Factor Authentication (MFA). Si vous prévoyez d'interagir avec vos ressources à l'aide de l'interface de ligne de commande AWS (AWS CLI) lorsque vous utilisez un périphérique MFA, vous devez créer une session temporaire. Si vous utilisez un périphérique matériel MFA, la valeur ARN est similaire à GAHT12345678. Si vous utilisez une authentification MFA virtuelle, la valeur est similaire à arn:aws:iam::123456789012:mfa/user. Pour plus d'informations, consultez la section Vérification du statut MFA.

Important :

Exécutez la commande sts get-session-token de l'interface de ligne de commande AWS en remplaçant les variables par les informations de votre compte, de vos ressources et du périphérique MFA :

$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token

Vous recevez une sortie avec des informations d'identification temporaires et un délai d'expiration (par défaut, 12 heures), similaire à ce qui suit :

{
    "Credentials": {
        "SecretAccessKey": "secret-access-key",
        "SessionToken": "temporary-session-token",
        "Expiration": "expiration-date-time",
        "AccessKeyId": "access-key-id"
    }
}

Remarque : vous pouvez spécifier une durée d'expiration (en seconde) à l'aide de l'option --duration-seconds dans la même commande sts get-session-token ; la durée peut être comprise entre 900 secondes (15 minutes) et 129 600 secondes (36 heures). Si vous utilisez les informations d'identification de l'utilisateur racine, la plage est comprise entre 900 secondes (15 minutes) et 3 600 secondes (1 heure).

Utilisation des informations d'identification temporaires avec des variables d'environnement

Vous pouvez utiliser des informations d'identification temporaires en exportant leurs valeurs vers des variables d'environnement à l'aide de ces commandes.

Linux:

export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output

Windows:

set AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
set AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
set AWS_SESSION_TOKEN=example-session-Token-as-in-previous-output

Si vous définissez les variables d'environnement, veillez à les annuler avant de faire un nouvel appel get-session-token à l'aide de ces commandes.

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

Utilisation d'informations d'identification temporaires avec des profils nommés

Vous pouvez également utiliser des profils nommés pour spécifier les commandes qui nécessitent une authentification MFA. Pour ce faire, modifiez le fichier des informations d'identification dans le dossier .aws du répertoire de base de l'utilisateur pour ajouter une nouvelle configuration de profil pour l'émission de commandes authentifiées par MFA. Voici un exemple de configuration de profil :

[mfa]
aws_access_key_id = example-access-key-as-in-returned-output
aws_secret_access_key = example-secret-access-key-as-in-returned-output
aws_session_token = example-session-Token-as-in-returned-output

Une fois les informations d'identification expirées, exécutez à nouveau la commande get-session-token puis exportez les valeurs renvoyées vers les variables d'environnement ou vers la configuration de profil.

Conseil : envisagez d'exécuter un script ou une tâche cron en arrière-plan qui vérifie « expiration » à partir de la sortie de la commande get-session-token, puis vous invite à procéder à une réauthentification.

Si l'interface de ligne de commande AWS est configurée à l'aide de la commande configure (configurer), il existe une configuration par défaut avec des informations d'identification de l'utilisateur AWS Identity and Access Management (IAM) permanentes. Cet utilisateur IAM peut utiliser des commandes qui ne nécessitent pas d'authentification MFA.

Exemple de configuration :

.aws/credentials

[default]
aws_access_key_id = example-access-Key-for-an-IAM-user
aws_secret_access_key = example-secret-access-key-for-IAM-user

Remarque : vous ne pouvez pas utiliser le paramètre mfa_serial avec des informations d'identification IAM permanentes.

Remarque : si vous utilisez des profils pour authentifier les commandes à l'aide de l'interface de ligne de commande AWS, spécifiez l'option --profile suivie du nom du profil pour vérifier que les appels sont authentifiés à l'aide de MFA.

Par exemple, cette commande utilise les informations d'identification de profil par défaut et n'est pas authentifiée via MFA.

$ aws s3 ls

Important : assurez-vous de bien comprendre la priorité des informations d'identification, afin de vérifier que les bonnes informations d'identification sont utilisées lors des appels d'API.

$ aws s3 ls --profile mfa

Vous pouvez également exiger qu'un utilisateur soit authentifié à l'aide d'une MFA pour effectuer des actions d'API spécifiques avec les conditions aws:MultiFactorAuthPresent ou aws:MultiFactorAuthAge dans une stratégie IAM.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?