Gouvernez vos ressources AWS avec Config Service

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 826065621341est 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”

  1. 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.