On connait tous les avantages qu’offre l’adoption du Cloud AWS, on peut rapidement et facilement concevoir une architecture et commencer à l’exploiter, mais rapidement on se retrouve avec une multitude de services activés et ressources créées, sans pour autant maîtriser leurs cycles de vie ni leurs rôles exacts.
AWS Config vient répondre à cette problématique en offrant plusieurs possibilités :
- Fournir l’inventaire complet de services et ressources par compte et par région. Il y a la possibilité de faire des agrégations, et en plus, l’inventaire affiche les relations entre les ressources, ce qui est très utile pour la détection des dépendances et pour faire du re-engineering.
- Détecter les changements effectués aux configurations des ressources et les enregistrer. Du coup, on peut connaitre même les ressources supprimées.
- Définir des règles de conformité et auditer les ressources selon ces règles.
- Déclencher des notifications ou des actions si une règle n’est pas respectée.
Dans cet article, on va faire des actions simples comme l’activation du service et l’exploration des données.
Configuration et activation du service
Configuration de AWS Cli
Pour activer le service, on peut utiliser la console comme AWS Cli, pour le reste de l’article on utilisera les commandes awscli.
Ci-dessous deux articles intéressants pour configurer AWS Cli sous Windows et Linux:
Configurer son AWS Cli sous Linux
Windows Subsystem Linux et SDK Cloud
Configuration d’un bucket S3 pour le stockage des historiques
Ci-dessous la commande pour créer un bucket S3 pour l’enregistrement des actions, il peut agréger plusieurs comptes et plusieurs régions :
aws s3api create-bucket --bucket "config-recording-easyteam-123" --region us-east-1
Le service a besoin des droits pour écrire dans le nouveau bucket S3, ci-dessous les actions pour le faire.
Ajout d’une policy pour lire et écrire depuis le service Config :
aws s3api put-bucket-policy --bucket "config-recording-easyteam-123" --policy file://bucket-policy.json --region us-east-1
Voici le contenu de bucket-policy.json, config-recording-easyteam-123
est le nom du bucket S3 et 826065621341
est l’accound ID :
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AWSConfigBucketPermissionsCheck",
"Effect":"Allow",
"Principal":{
"Service":"config.amazonaws.com"
},
"Action":"s3:GetBucketAcl",
"Resource":"arn:aws:s3:::config-recording-easyteam-123"
},
{
"Sid":"AWSConfigBucketDelivery",
"Effect":"Allow",
"Principal":{
"Service":"config.amazonaws.com"
},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::config-recording-easyteam-123/AWSLogs/826065621341/*",
"Condition":{
"StringEquals":{
"s3:x-amz-acl":"bucket-owner-full-control"
}}}]}
Création du rôle adossé au service
Si le rôle attaché au service configservice n’existe pas encore, on peut le créer avec cette commande :
aws iam create-service-linked-role --aws-service-name config.amazonaws.com
Création d’une notification
Le service qui gère les notification chez AWS est SNS (Simple Notification Service), on peut facilement créer un topic avec la commande suivante, qui envoie un mail vers l’adresse email renseignée :
aws sns subscribe --topic-arn arn:aws:sns:us-east-2:826065621341:config-easyteam-blog --protocol email --notification-endpoint tonmail@provider.com
Il faut ensuite accéder à la boite de réception du mail et accepter la souscription aux notifications.
Activation de config service
La commande suivante activera le service avec les paramètres par défaut pour la région en cours, avec les dépendances qu’on a créé plus tôt :
aws configservice subscribe --s3-bucket config-recording-easyteam-123 --iam-role arn:aws:iam::826065621341:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig --sns-topic config-easyteam-blog
C’est tout pour la partie configuration, à présent toutes les actions effectuées sur toutes les ressources seront détectées, enregistrées et historisées, en plus une notification mail sera envoyée.
Utilisation de Config Service
On peut accéder au service via la console via le lien https://console.aws.amazon.com/config, comme on peux utiliser AWS Cli.
Dashboard
Dans le tableau de bord, on retrouve l’inventaire des ressources :
Historique de configuration
Ici, un exemple de l’historique complet d’une instance EC2 créée, modifiée, redémarrée puis supprimée.
Chaque case correspond à une nouvelle configuration, les événements associés sont récupérés depuis CloudTrail :
En cliquant sur « Changes » on retrouve tout ce qui changé durant cette action, on découvre aussi les autres ressources en relation avec celle-ci :
Inventaire et audit via ligne de commande
Pour récupérer la liste des ressources en ligne de commande :
aws configservice list-discovered-resources --resource-type AWS::EC2::SecurityGroup --include-deleted-resources
Il faut renseigner le type de ressources à lister. En plus, si on veut récupérer les ressources supprimées, il suffit d’ajouter --include-deleted-resources
Pour récupérer le détail de configuration de plusieurs ressources en mode batch :
aws configservice batch-get-resource-config --resource-keys resourceType=AWS::EC2::SecurityGroup,resourceId=sg-0590af2068b01b542 resourceType=AWS::EC2::SecurityGroup,resourceId=sg-0663570520a0c9b58 resourceType=AWS::EC2::SecurityGroup,resourceId=sg-b7b8a3df
Maintenant, pour récupérer l’historique des configurations d’une ressource, même après l’avoir supprimée :
aws configservice get-resource-config-history --resource-type AWS::EC2::Instance --resource-id i-0f797d447ba187e13
Et si vous souhaitez vous former sur Amazon Web Services, découvrez notre offre de formations AWS.
1 réflexion sur “Gouvernez vos ressources AWS avec Config Service”
exemple en shell introuvable à ce jour en aws cli2.5…
function aws_config_all_reinstall_auto()
{
cd /var/task
delivery_channel= »/var/task/configs3.json »
regions=$(aws ec2 describe-regions \
–output text \
–query ‘Regions[][RegionName]’ |
sort)
# les 10 comptes aws sacem
for compte in « 78678678644 » « 46546546456 »
do
assume_role $compte
echo « deb compte : » + $compte « , region : » + $regions
# trois boucle pour laisser le temps à aws de digérer , le iam n’est en record que sur une region us-esat-1 car sinon cela ferai doublons !
for region in $regions; do
echo « put-configuration-recorder : » $region
if [ « $region » == « us-east-1 » ]
then
echo « special iam : » $region
aws configservice put-configuration-recorder –configuration-recorder name=default,roleARN=arn:aws:iam::$compte:role/ConfigResourcesAccess –recording-group allSupported=true,includeGlobalResourceTypes=true –region $region
else
aws configservice put-configuration-recorder –configuration-recorder name=default,roleARN=arn:aws:iam::$compte:role/ConfigResourcesAccess –recording-group allSupported=true,includeGlobalResourceTypes=false –region $region
fi
done
for region in $regions; do
echo « put-delivery-channel » $region
aws configservice put-delivery-channel –delivery-channel file://$delivery_channel –region $region &
done
for region in $regions; do
if [ « $region » == « eu-west-1 » ] && { [ « $compte » == « 760271592776 » ] || [ « $compte » == « 609728628593 » ]; }
then
echo « stop recorder » $region
aws configservice stop-configuration-recorder –configuration-recorder-name default –region $region
else
echo « start recorder » $region
aws configservice start-configuration-recorder –configuration-recorder-name default –region $region
fi
done
done
}
Les commentaires sont fermés.