Amazon CloudTrail per tenere sotto controllo le API AWS
da Massimo Della Rovere · pubblicato il 5 giugno, 2014 · modificato il 20 luglio, 2016

Tutte le operazioni che vengono effettuate su Amazon Web Services avvengono tramite chiamate API, le quali possono essere usate dai processi interni di AWS, da procedure manuali tramite management console o dai programmi applicativi. Quasi tutti i servizi hanno a disposizione dei log che riguardano delle operazioni specifiche ma è sempre stato abbastanza complicato tenere sotto controllo tutte quello che succedeva nel nostro ambiente di cloud computing. Tramite CloudTrail viene risolto questo aspetto ed ora è possibile monitorare tutto quello che succede nel nostro account AWS.

Come funziona

Amazon CloudTrail cattura le chiamate API fatte da o per conto di un account AWS e invia i file di log verso un bucket S3 da noi specificato. E’ possibile specificare il bucket di destinazione dei log utilizzando CloudTrial all’interno della management console oppure attraverso la AWS CLI o le API di CloudTrail. Di base i file di log vengono cifrati utilizzando la cifratura lato server di Amazon S3 (SSE).

È possibile memorizzare tutti i file di log in un bucket S3 per il periodo che si vuole, ma è anche possibile definire una regola di lifecycle per archiviarli in Amazon Glacier o cancellarli in maniera automatica. Generalmente CloudTrail invia un file entro 15 minuti dalla chiamata API e pubblica i nuovi log più volte nel tempo, normalmente ogni 5 minuti circa. Questi file di log contengono tutte le chiamate API effettuate dai servizi supportati ed è possibile anche pubblicare una notifica tramite Amazon SNS.

Utilizzo del servizio

Non ci sono costi aggiuntivi per l’utilizzo di CloudTrail, ma si pagano le tariffe standard di Amazon S3 per lo spazio occupato dai log e per l’eventuale utilizzo di Amazon SNS. A seguire vengono elencati alcuni passi da seguire per utilizzare il servizio:

  • Utilizzare la console, AWS CLI o le CloudTrail API per creare un trail(percorso), che consiste nelle informazioni che CloudTrail utilizza per inviare i file di log su S3.
  • (Facoltativo) E’ possibile creare un topic in Amazon SNS al quale si iscrive il servizio per inviare una notifica quando un nuovo file di log arriva su S3.
  • E’ possibile utilizzare le API di Amazon S3 per recuperare i log.
  • E’ possibile utilizzare le API, AWS CLI, o la console per aggiornare la trail.
  • (Facoltativo) E’ possibile utilizzare AWS IAM (Identity and Access Management) per controllare quali utenti AWS possono creare, configurare o cancellare i trail, avviare e fermare la registrazione dei log e controllare l’accesso al bucket che contiene i log.
  • (Facoltativo) E’ possibile analizzare i file generati da CloudTrail con una delle soluzioni integrate proposte dai partner, le quali danno diverse funzionalità, ad esempio: il rilevamento delle modifiche, troubleshootting e analisi di sicurezza.

Configurazione

Per avviare il servizio possiamo entrare nella nostra management console, selezionare la regione geografica e il menu che riguarda il servizio di CloudTrail. Se non abbiamo mai attivato il servizio ci verranno presentate delle indicazioni per creare il trail:

Amazon Cloudtrail

In questa schermata dobbiamo indicare un bucket S3, il quale può essere creato o può essere selezionato da un’elenco di bucket esistenti presenti nel profilo. Se utilizziamo il secondo metodo dobbiamo impostare i permessi per il bucket manualmente, se invece lo facciamo creare dalla management console questa operazione sarà automatica.

A seguire possiamo indicare un prefisso da usare nei file di log, l’inclusione dei servizi globali e l’eventuale configurazione delle notifiche tramite Amazon SNS.

Le regioni geografiche

Il servizio è legato alla regione, questo significa che viene creato un trail separato per ogni regione. Come impostazione predefinita i Trail (percorsi) contengono le informazioni per gli eventi che si verificano in quelle regioni, oltre ad eventi di servizi globali che non appartengono ad una specifica regione, come IAM o AWS STS.

Ad esempio se sono stati configurati due trail in due regioni differenti, quando si crea un nuovo utente sotto IAM, l’evento di creazione dell’utente viene aggiunto alle informazioni dei log di entrambi le regioni. Se si configura il servizio per raccogliere i log da più regioni in un unico bucket, gli eventi del servizio IAM saranno duplicati.

Per prevenire la duplicazione è possibile includere gli eventi globali in maniera selettiva. Una soluzione potrebbe essere quella di abilitare la registrazione degli eventi globali in una unica trail e disabilitarla su tutte le altre trail configurate nelle altre regioni che scrivono nello stesso bucket presente su Amazon S3.

Struttura del log

Le informazioni memorizzate nei log di CloudTrail sono moltissime, ad esempio è possibile identificare quali utenti hanno eseguito le chiamate, l’indirizzo IP sorgente dal quale sono state effettuate e quando è stata effettuata la chiamata. Purtroppo però tutte queste informazioni non sono disponibili in un formato leggibile ma devono essere elaborate da qualche programma che estrapoli i dati da una struttura JSON.

{
  "eventVersion": "1.01",
  "userIdentity": {
    "type": "Root",
    "principalId": "161858713267",
    "arn": "arn:aws:iam::161858713267:root",
    "accountId": "161858713267",
    "accessKeyId": "ASIAIXQ4G57LNG257VNQ",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2014-05-28T10:13:49Z"
      }
    }
  },
  "eventTime": "2014-05-28T10:55:19Z",
  "eventSource": "ec2.amazonaws.com",
  "eventName": "TerminateInstances",
  "awsRegion": "eu-west-1",
  "sourceIPAddress": "88.114.16.93",
  "requestParameters": {
    "instancesSet": {
      "items": [{
        "instanceId": "i-7204e733"
      }]
    }
  },
  "responseElements": {
    "instancesSet": {
      "items": [{
        "instanceId": "i-7204e733",
        "currentState": {
          "code": 32,
          "name": "shutting-down"
        },
       "previousState": {
         "code": 16,
         "name": "running"
       }
     }]
    }
  },
  "requestID": "7a2b8969-94f4-474c-9714-482a1b2ca4a0",
  "eventID": "fed7028d-0e42-4ebb-9e17-997e96ffb620"
},

In questo esempio viene riportato un record di log in formato JSON che si riferisce ad una semplice richiesta di arresto per un’istanza EC2.

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services.  Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

condividi