Meilleures pratiques pour la gestion sécurisée des identifiants avec l'AWS CLI
La gestion sécurisée des identifiants est primordiale lors de l'interaction avec Amazon Web Services (AWS) via l'Interface de Ligne de Commande (CLI). Les clés d'accès (ID de clé d'accès et Clé d'accès secrète) octroient un accès programmatique à vos ressources cloud, faisant de leur compromission un risque de sécurité significatif. Cet article présente les meilleures pratiques essentielles pour stocker, gérer et utiliser ces identifiants afin de minimiser l'exposition et de maintenir une posture de sécurité robuste lors de l'automatisation des tâches ou de la gestion des ressources via la CLI.
L'AWS CLI s'appuie sur des méthodes spécifiques pour localiser les identifiants. Comprendre ces méthodes – des fichiers de configuration aux variables d'environnement et aux rôles IAM – est la première étape vers la sécurisation de votre environnement. Nous allons explorer l'ordre de priorité recommandé et mettre en évidence des alternatives modernes et plus sûres au codage en dur des secrets.
Comprendre l'ordre de chargement des identifiants de l'AWS CLI
L'AWS CLI résout les identifiants en utilisant une hiérarchie définie. Connaître cet ordre vous aide à comprendre où la CLI cherche les identifiants en premier et garantit que votre configuration prévue, la plus sécurisée, prend le pas.
La CLI vérifie les identifiants dans l'ordre suivant (de la priorité la plus élevée à la plus basse) :
- Options de ligne de commande : Identifiants transmis directement via des drapeaux (
--access-key-idet--secret-access-key). - Variables d'environnement : Identifiants définis dans la session shell actuelle.
- Processus d'identifiants (Credential Process) : La sortie d'un processus d'identifiants configuré (souvent utilisé par le SSO ou des outils externes).
- Chaîne de fournisseurs d'identifiants AWS (AWS Credential Provider Chain) : Cette chaîne vérifie ce qui suit dans l'ordre :
a. Identifiants provenant d'un rôle IAM attribué à l'instance EC2 ou à la tâche ECS en cours d'exécution.
b. Identifiants stockés dans le fichier d'identifiants partagés (~/.aws/credentials). - Fichier de configuration : Si aucun identifiant n'est trouvé, la CLI arrête la recherche.
Conseil de sécurité : Il est généralement déconseillé de se fier aux drapeaux de ligne de commande pour une utilisation régulière, car l'historique des commandes (
.bash_history) peut exposer des informations sensibles.
1. Sécurisation des identifiants dans les fichiers de configuration (~/.aws/credentials)
Par défaut, l'AWS CLI stocke les identifiants dans le fichier d'identifiants partagés, généralement situé à ~/.aws/credentials. Bien que pratique, ce fichier doit être protégé.
Protection et permissions du fichier
Il est essentiel de restreindre l'accès en lecture à ce fichier. Sur les systèmes Linux/macOS, définissez les permissions de manière à ce que seul le propriétaire puisse lire ou écrire le fichier :
chmod 600 ~/.aws/credentials
Utilisation de profils pour la ségrégation
L'utilisation de profils distincts vous permet de séparer les identifiants pour différents environnements (par exemple, développement, staging, production) ou différents comptes. Cela empêche les actions accidentelles entre environnements.
Exemple ~/.aws/credentials :
[default]
aws_access_key_id = AKIABCDEFGHIJKLMNO
aws_secret_access_key = xYzdEfGhIjKlMnOpQrStUvWxYz1234567890
[production-user]
aws_access_key_id = AKIA9876543210ZYXWVU
aws_secret_access_key = aBcDeFgHiJkLmNoPqRsTuVwXyZ9876543210
Lorsque vous utilisez un profil nommé, vous devez le spécifier avec le drapeau --profile :
aws s3 ls --profile production-user
2. Tirer parti des variables d'environnement
Les variables d'environnement offrent un moyen dynamique de fournir des identifiants à la session CLI sans les écrire sur le disque. Ceci est souvent préféré pour un accès temporaire ou dans des environnements de script où l'écriture sur disque est restreinte ou indésirable.
Définissez les variables suivantes dans votre session shell :
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"
Note importante sur la précédence : Les identifiants définis via les variables d'environnement remplacent toujours ceux trouvés dans le fichier ~/.aws/credentials, car ils apparaissent plus haut dans la chaîne de chargement des identifiants.
Avertissement de sécurité : Soyez prudent lors de l'exportation des variables d'environnement, en particulier dans les terminaux partagés ou les scripts qui pourraient être journalisés. Annulez-les toujours immédiatement après utilisation :
bash unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY
3. La méthode la plus sécurisée : les rôles IAM (profils d'instance/identité web)
Pour les charges de travail exécutées sur l'infrastructure AWS (comme les instances EC2, les fonctions Lambda ou les tâches ECS), la pratique la plus sûre consiste à ne jamais utiliser d'identifiants statiques. Utilisez plutôt les rôles IAM.
Les rôles IAM vous permettent d'attribuer des identifiants de sécurité temporaires, automatiquement renouvelés, à la ressource via le service de métadonnées d'instance (IMDS). L'AWS CLI détecte et utilise automatiquement ces identifiants sans qu'ils ne soient jamais stockés sur le disque ou dans des variables d'environnement.
Comment cela fonctionne :
- Une instance EC2 est lancée avec un rôle IAM associé.
- La CLI exécutée sur cette instance interroge le Service de métadonnées d'instance (IMDS) pour obtenir des identifiants temporaires.
- La CLI utilise ces identifiants temporaires pour tous les appels d'API ultérieurs.
Ceci élimine entièrement le risque associé aux clés d'accès à longue durée de vie.
4. Utilisation du processus d'identifiants (Credential Process) et du SSO
La gestion moderne des identifiants s'appuie de plus en plus sur des fournisseurs d'authentification externes, souvent intégrés via la configuration credential_process.
AWS SSO (Authentification unique)
AWS SSO offre un moyen unifié de gérer l'accès à travers plusieurs comptes et rôles en utilisant des fournisseurs d'identité (IdP) existants. L'AWS CLI s'intègre parfaitement au SSO, faisant abstraction de la gestion des jetons de session temporaires.
Pour commencer à utiliser SSO, vous exécutez d'abord la commande de connexion :
aws sso login --profile <profile-name>
Ceci ouvre une fenêtre de navigateur pour l'authentification. Une fois l'opération réussie, la CLI stocke les jetons de session nécessaires, utilisant souvent le mécanisme credential_process en interne pour actualiser automatiquement les jetons, ce qui signifie que vous n'avez pas à gérer de clés secrètes brutes.
Configuration de credential_process
Vous pouvez configurer la CLI pour appeler un outil externe (comme un agent de coffre-fort ou un assistant SSO) afin de récupérer les identifiants de manière dynamique. Ceci est spécifié dans le fichier de configuration :
Exemple ~/.aws/config :
[profile my-vault-profile]
region = us-west-2
credential_process = /usr/local/bin/my-vault-cli get-aws-creds --profile my-vault-profile
Cette méthode est cruciale lors de l'intégration avec des outils de gestion des secrets comme HashiCorp Vault.
Résumé des meilleures pratiques et liste de contrôle
Pour maximiser la sécurité de vos opérations AWS CLI, adhérez à ces principes fondamentaux :
- Principe du moindre privilège : Assurez-vous que tous les utilisateurs et rôles IAM n'ont que les permissions strictement nécessaires pour effectuer leurs tâches.
- Préférer les rôles aux clés : Utilisez toujours les rôles IAM (profils d'instance) lorsque vous opérez au sein de l'infrastructure AWS.
- Utiliser le SSO : Pour une utilisation interactive humaine, utilisez AWS SSO pour gérer l'accès à plusieurs comptes.
- Ne jamais coder les clés en dur : Évitez de placer les clés d'accès directement dans les scripts, le code source ou l'historique des commandes.
- Protéger le fichier d'identifiants : Restreindre les permissions du système de fichiers (
chmod 600) sur~/.aws/credentials. - Renouveler les clés régulièrement : Si des clés statiques doivent être utilisées, appliquez un calendrier de renouvellement strict.
En donnant la priorité aux méthodes d'acquisition d'identifiants dynamiques comme les rôles IAM et le SSO par rapport aux clés d'accès statiques stockées sur disque, vous réduisez considérablement la surface d'attaque associée à votre utilisation de l'AWS CLI.