Comment configurer et gérer efficacement plusieurs profils AWS CLI

Apprenez à gérer efficacement plusieurs comptes et environnements AWS à l'aide des profils nommés d'AWS CLI. Ce guide fournit des instructions étape par étape sur la configuration, la commutation entre et la sécurisation de différents ensembles d'identifiants et de paramètres AWS. Optimisez votre flux de travail cloud en maîtrisant la gestion des profils pour une productivité et une sécurité accrues.

Comment configurer et gérer efficacement plusieurs profils AWS CLI

Les profils AWS CLI maintiennent vos comptes, rôles, régions et paramètres de sortie séparés. Si vous gérez le développement, la préproduction et la production depuis le même ordinateur portable, les profils vous aident à éviter d'exécuter une commande sur le mauvais compte AWS.

L'objectif est simple : rendre le compte prévu explicite, réduire les identifiants de longue durée dans la mesure du possible, et vous donner des vérifications rapides avant les commandes destructrices.

Configuration de votre fichier de configuration AWS CLI

L'AWS CLI stocke les paramètres de profil dans deux fichiers partagés :

  • ~/.aws/credentials pour les clés d'accès et les identifiants de session.
  • ~/.aws/config pour la région, le format de sortie, les paramètres de rôle et d'autres options CLI.

Sous Windows, les mêmes fichiers se trouvent sous %USERPROFILE%\.aws\.

Profil par défaut

Lorsque vous exécutez aws configure sans --profile, il écrit les paramètres pour [default]. La CLI utilise ce profil lorsque vous n'en spécifiez pas un autre et qu'aucune variable d'environnement pertinente ne le remplace.

# Exemple de profil par défaut dans ~/.aws/credentials
[default]
aws_access_key_id = VOTRE_CLE_ACCES_PAR_DEFAUT
aws_secret_access_key = VOTRE_CLE_SECRETE_PAR_DEFAUT
# Exemple de profil par défaut dans ~/.aws/config
[default]
region = us-east-1
output = json

Création de profils nommés

Vous pouvez créer des profils nommés avec aws configure --profile :

aws configure --profile dev
aws configure --profile prod

Vous pouvez également modifier les fichiers directement. Utilisez des noms de profil simples dans ~/.aws/credentials :

~/.aws/credentials :

[default]
aws_access_key_id = VOTRE_CLE_ACCES_PAR_DEFAUT
aws_secret_access_key = VOTRE_CLE_SECRETE_PAR_DEFAUT

[prod]
aws_access_key_id = VOTRE_CLE_ACCES_PRODUCTION
aws_secret_access_key = VOTRE_CLE_SECRETE_PRODUCTION

[dev]
aws_access_key_id = VOTRE_CLE_ACCES_DEVELOPPEMENT
aws_secret_access_key = VOTRE_CLE_SECRETE_DEVELOPPEMENT

Dans ~/.aws/config, les profils nommés utilisent le préfixe profile :

~/.aws/config :

[default]
region = us-east-1
output = json

[profile prod]
region = us-west-2
output = text

[profile dev]
region = eu-central-1
output = json

Détails importants :

  • Lors de la définition de profils dans ~/.aws/config, vous devez préfixer le nom du profil avec profile (par exemple, [profile prod]). Ceci est différent de ~/.aws/credentials, où vous utilisez uniquement le nom du profil (par exemple, [prod]).
  • Le profil [default] n'agit pas automatiquement comme un parent pour les profils nommés. Si prod a besoin d'une région, définissez region sous [profile prod] ou fournissez-la d'une autre manière.

Basculement entre les profils

Une fois vos profils nommés configurés, vous pouvez les utiliser en spécifiant l'option --profile avec vos commandes AWS CLI.

Exemple : Pour lister les compartiments S3 dans votre compte de production :

aws s3 ls --profile prod

Exemple : Pour décrire les instances EC2 dans votre compte de développement :

aws ec2 describe-instances --profile dev

Avant d'exécuter une commande risquée, vérifiez qui vous êtes :

aws sts get-caller-identity --profile prod

Cela renvoie l'ID du compte et l'ARN pour les identifiants que la CLI utilise.

Définition d'un profil par défaut pour l'environnement

Taper constamment --profile peut être fastidieux. Vous pouvez définir AWS_PROFILE pour votre session shell actuelle.

Linux/macOS :

export AWS_PROFILE=prod

# Maintenant, les commandes utiliseront le profil 'prod' par défaut
aws s3 ls
aws ec2 describe-instances

Pour le désactiver :

unset AWS_PROFILE

Invite de commandes Windows :

set AWS_PROFILE=prod

# Maintenant, les commandes utiliseront le profil 'prod' par défaut
aws s3 ls

Pour le désactiver :

set AWS_PROFILE=

Windows PowerShell :

$env:AWS_PROFILE = "prod"

# Maintenant, les commandes utiliseront le profil 'prod' par défaut
aws s3 ls

Pour le désactiver :

Remove-Item Env:\AWS_PROFILE

Les options de ligne de commande ont une priorité plus élevée que les variables d'environnement. Si AWS_PROFILE=dev est défini mais que vous exécutez aws s3 ls --profile prod, la commande utilise prod.

Gestion de plusieurs comptes AWS avec des profils

Les profils sont utiles pour :

  • Développement vs. Production : Garder vos environnements de développement et de production séparés pour des raisons de sécurité.
  • Différentes équipes/projets : Isoler les ressources et les autorisations pour des équipes ou des projets distincts.
  • Accès multi-comptes : Si vous êtes un administrateur ou un développeur qui doit gérer des ressources dans plusieurs comptes.

Bonne pratique : Utilisation des rôles IAM

Évitez de stocker des clés d'accès de longue durée pour chaque compte. Un modèle courant consiste à conserver un profil source ou un profil SSO, puis à assumer des rôles dans les comptes cibles.

Pour l'assomption de rôle, configurez un profil comme ceci :

# ~/.aws/config

[profile dev-role]
role_arn = arn:aws:iam::ID_COMPTE:role/NOM_ROLE
source_profile = default
region = us-east-1
output = json

Lorsque vous exécutez une commande avec --profile dev-role, la CLI utilise le profil default pour appeler AWS STS, assume le rôle et utilise des identifiants temporaires pour la commande.

Si votre organisation utilise IAM Identity Center, votre profil peut utiliser des paramètres SSO au lieu de clés d'accès :

[profile sandbox]
sso_start_url = https://example.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = DeveloperAccess
region = us-east-1
output = json

Authentifiez-vous ensuite avec :

aws sso login --profile sandbox

Options de configuration avancées

Au-delà des identifiants et de la région, les profils peuvent spécifier d'autres paramètres AWS CLI :

  • output : json, text, table
  • region : par exemple, us-east-1
  • s3.max_concurrent_requests : Nombre de requêtes parallèles pour les opérations S3.
  • s3.max_queue_size : Taille de la file d'attente pour les téléchargements multipart S3.
  • cli_binary_format : Comment les paramètres binaires sont interprétés dans AWS CLI v2.

Exemple : Configuration des paramètres S3 pour un profil spécifique

Utilisez aws configure set pour éviter les erreurs d'indentation :

aws configure set s3.max_concurrent_requests 20 --profile s3-optimized
aws configure set s3.max_queue_size 10000 --profile s3-optimized

Cela écrit les paramètres S3 sous le profil dans ~/.aws/config :

# ~/.aws/config

[profile s3-optimized]
region = us-east-1
output = json
s3 =
    max_concurrent_requests = 20
    max_queue_size = 10000

Conseils et bonnes pratiques

  • Utilisez des noms de profil descriptifs : Rendez vos noms de profil clairs et indicateurs du compte ou de l'environnement qu'ils représentent (par exemple, prod-admin, dev-web, sandbox-research).
  • Sécurisez vos identifiants : Ne commettez jamais votre fichier ~/.aws/credentials dans le contrôle de version. Utilisez des rôles IAM pour l'accès multi-comptes autant que possible pour éviter de stocker des clés d'accès de longue durée.
  • Examinez régulièrement les clés d'accès : Si vous devez utiliser des clés d'accès, faites-les pivoter périodiquement et désactivez les anciennes.
  • Tirez parti des variables d'environnement : Utilisez AWS_PROFILE pour un basculement temporaire ou pour les pipelines CI/CD où vous devez cibler des comptes spécifiques.
  • Surveillez les variables d'environnement des identifiants : AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY et AWS_SESSION_TOKEN peuvent remplacer les identifiants des profils. Effacez-les si la CLI semble utiliser la mauvaise identité.
  • Nommez les profils en fonction du rayon d'impact : Des noms comme prod-readonly, prod-admin et sandbox-dev sont plus sûrs que des noms vagues comme main ou test.

En résumé

Utilisez des profils pour chaque compte et rôle que vous manipulez souvent, et vérifiez aws sts get-caller-identity avant de modifier les ressources de production. Préférez les profils basés sur SSO ou les rôles plutôt que les clés d'accès de longue durée, et gardez à l'esprit les variables d'environnement lorsqu'une commande semble cibler le mauvais compte.