Pubblicato il 17/02/2024 da alnao nella categoria AWS

Il servizio AWS Config è stato studiato per permettere ai customer di valutare, registrare e monitorare tutte le modifiche alle configurazioni delle risorse per semplificare la gestione del Cloud. Da notare che come servizio non permette di modificare le configurazione ma è studiato solo per essere uno strumento di monitoraggio con un registro unificato per tutte le risorse del Cloud. Bisogna sempre ricordare che per risorsa AWS si intende qualsiasi entità in AWS e comprende qualsiasi tipo di entità creata, l’elenco completo di tutti i tipi di risorse è disponibile nella documentazione ufficiale:

Da console web è possibile attivare il servizio con una procedura chiamata 1-click, inoltre è possibile definire regole usando quelle definite di default (Managed) e personalizzate (Custom), si rimanda sempre alla documentazione ufficiale per tutti i dettagli.

La documentazione ufficiale descrive molto bene il funzionamento del sistema e presenta diversi esempi di utilizzo con casi d’uso reali , per esempio è possibile contare il numero di istanze EC2 attive aggregando il dato per tipo con una semplice query:

SELECT configuration.instanceType, COUNT(*)
 WHERE resourceType = 'AWS::EC2::Instance'
 GROUP BY configuration.instanceType

La CLI mette a disposizione una serie di comandi per la gestione del servizio. Per evitare problemi con doppi nomi, è stato creato il tipo config-service per far riferimento ai comandi del servizio AWS Config per evitare fraintendimenti con il comando configuration utilizzato per definire i profili della AWS CLI. I principali comandi di questo servizio sono

  • – recupero dello stato dei sistemi di registro di AWS Config
    aws configservice describe-delivery-channels
    aws configservice describe-configuration-recorders
    aws configservice describe-configuration-recorder-status
  • elenco di tutte le regole
    aws configservice describe-config-rules 
    aws configservice describe-config-rules | grep ConfigRuleName
  • creazione ed eliminazione di una regola
    aws configservice put-config-rule --generate-cli-skeleton > putConfi gRule.json
    aws configservice put-config-rule --cli-input-json file://putConfigRule.json
    aws configservice delete-config-rule --config-rule-name ConfigRuleName
  • elenco di tutte le regole compliance
    aws configservice describe-compliance-by-config-rule
    aws configservice describe-compliance-by-resource --resource-type AWS::EC2::Instance
    aws configservice get-compliance-details-by-resource --resource-type AWS::EC2::Instance --resource-id i-nnnnnnnn
  • lista delle risorse
    aws configservice list-discovered-resources
    aws configservice list-discovered-resources --resource-type "AWS::EC2::Instance"
    aws configservice list-discovered-resources --resource-type "AWS::CloudFormation::Stack"
  • storico di eventi di una risorsa
    aws configservice get-resource-config-history --resource-type AWS::EC2::Instance --resource-id i-0117ee5195da9794b

Oltre alla documentazione ufficiale, è consigliata anche la lettura di un libro disponibile nel sito ufficiale che descrive in maniera dettagliata tutti i comandi


Anche la libreria SDK mette a disposizione i metodi per gestire il servizio da codice: la libreria boto3 mette a disposizione metodi per i servizio config, i principali metodi messi a disposizione sono:

def resources_list(profile_name,resource_type):
  boto3.setup_default_session(profile_name=profile_name)
  config = boto3.client('config')
  lista = config.list_discovered_resources(
    resourceType=resource_type
    #limit=100,
    #nextToken='string'
  )
  if 'resourceIdentifiers' in lista:
    return lista['resourceIdentifiers']
  return [] 
def resource_detail(profile_name, resource_type, resource_id):
  boto3.setup_default_session(profile_name=profile_name)
  config = boto3.client('config')
  lista = config.get_resource_config_history(
    resourceType=resource_type,
    resourceId=resource_id,
    limit=100,
    #nextToken='string'
  )
  if 'configurationItems' in lista:
    return lista['configurationItems']
  return []

Per la gestione di AWS Config in CloudFormation sono previsti tutti i tipi di risorse, si rimanda alla documentazione ufficiale per tutti i dettagli. Nell’esempio proposto in AwsLabs viene definita la regola per la registrazione degli evento sui volumi delle EC2:

ConfigRecorder:
  Type: AWS::Config::ConfigurationRecorder
  Properties:
    Name: default
    RecordingGroup:
    ResourceTypes: ['AWS::EC2::Volume']
    RoleARN: !GetAtt [ConfigRole, Arn]
  DeliveryChannel:
    Condition: CreateDeliveryChannel
    Type: AWS::Config::DeliveryChannel
    Properties:
      ConfigSnapshotDeliveryProperties:
        DeliveryFrequency: Six_Hours
      S3BucketName: !Ref 'ConfigBucket'
      SnsTopicARN: !Ref 'ConfigTopic'
  ConfigRuleForVolumeTags:
    Type: AWS::Config::ConfigRule
    Properties:
      InputParameters:
        tag1Key: CostCenter
      Scope:
        ComplianceResourceTypes: ['AWS::EC2::Volume']
      Source:
        Owner: AWS
        SourceIdentifier: REQUIRED_TAGS
    DependsOn: ConfigRecorder

Per ulteriori informazioni ed esempi si rimanda al repository ufficiale di AwsLabs.

MENU