Utilizzo di profili Chef InSpec con la conformità Systems Manager
AWS Systems Manager si integra con Chef
InSpec
-
Controllo dell'apertura o della chiusura di porte specifiche.
-
Controllo dell'esecuzione di determinate applicazioni.
-
Controllo dell'avvenuta installazione di specifici pacchetti.
-
Controllo delle chiavi del Registro di sistema Windows per proprietà specifiche.
È possibile creare profili InSpec per istanze Amazon Elastic Compute Cloud (Amazon EC2) e server on-premise o macchine virtuali (VM) gestiti con Systems Manager. Il seguente profilo Chef InSpec di esempio controlla se la porta 22 sia aperta.
control 'Scan Port' do impact 10.0 title 'Server: Configure the service port' desc 'Always specify which port the SSH server should listen to. Prevent unexpected settings.' describe sshd_config do its('Port') { should eq('22') } end end
InSpec include una raccolta di risorse che consentono di scrivere rapidamente controlli generici e di audit. InSpec utilizza il proprio linguaggio specifico di dominio (DSL)
Come funziona
Ecco come si articola il processo di utilizzo dei profili InSpec con la conformità:
-
È possibile scegliere profili InSpec predefiniti da utilizzare o crearne di nuovi. Per iniziare, ci si può avvalere dei profili predefiniti
disponibili su GitHub. Per informazioni su come creare profili InSpec personalizzati, consulta profili ChefChef InSpec . -
I profili possono essere memorizzati in un archivio GitHub pubblico o privato oppure in un bucket S3.
-
Eseguire la conformità con i propri profili InSpec con il documento di Systems Manager (documento SSM)
AWS-RunInspecChecks
. La scansione di conformità può essere avviata direttamente tramite Run Command, una funzionalità di AWS Systems Manager, oppure è possibile pianificare scansioni di conformità regolari utilizzando State Manager, una funzionalità di AWS Systems Manager. -
Per identificare i nodi non conformi ci si può avvalere dell'API di conformità o della console di conformità .
Nota
Osservare le seguenti informazioni.
-
Chef utilizza un client sui nodi per elaborare il profilo. Non è necessario installare il client. Quando Systems Manager esegue il documento SSM
AWS-RunInspecChecks
, il sistema verifica che il client sia installato. Se non lo fosse, Systems Manager installa il client Chef durante la scansione, poi, al termine della stessa, lo disinstalla. -
Esecuzione del documento SSM
AWS-RunInspecChecks
, come descritto in questo argomento, assegna una voce di conformità di tipoCustom:Inspec
a ogni nodo di destinazione. Per assegnare questo tipo di conformità, il documento richiama le operazioni API PutComplianceItems.
Esecuzione di una scansione di conformità InSpec
Questa sezione illustra come eseguire una scansione di conformità InSpec con la console Systems Manager e l'AWS Command Line Interface (AWS CLI). La procedura della console illustra come configurare State Manager per eseguire la scansione. La procedura dell' AWS CLI illustra come configurare Run Command per eseguire la scansione.
Esecuzione di una scansione di conformità InSpec con State Manager (console)
Per eseguire una scansione di conformità InSpec con State Manager tramite la console AWS Systems Manager
Aprire la console AWS Systems Manager all'indirizzo https://console.aws.amazon.com/systems-manager/
. Nel riquadro di navigazione, scegli State Manager.
-
Selezionare Create association (Crea associazione).
-
Immettere un nome nella sezione Provide association details (Fornisci dettagli associazione).
-
Nell'elenco Command document (Documento comando) scegliere
AWS-RunInspecChecks
. -
Nell'elenco Document version (Versione del documento), scegliere Latest at runtime (Ultima versione al tempo di esecuzione).
-
Nella sezione Parameters (Parametri), dall'elenco Source Type (Tipo di origine), scegliere GitHub o S3.
Se si sceglie GitHub, occorre immettere nel campo Source Info (Informazioni origine) il percorso di un profilo InSpec in un archivio GitHub pubblico o privato. Quello che segue è un esempio di percorso che conduce a un profilo pubblico, fornito dal team di Systems Manager: https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck
. {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}
Se si sceglie S3, immettere un URL valido a un profilo InSpec in un bucket S3 nel campo Source Info (Informazioni origine).
Per ulteriori informazioni sull'integrazione di Systems Manager con GitHub e Amazon S3, consulta Esecuzione di script da GitHub.
Nella sezione Targets (Destinazioni), identificare i nodi in cui si desidera eseguire questa operazione specificando i tag, selezionando manualmente le istanze, i dispositivi edge o indicando un gruppo di risorse.
Suggerimento
Se un nodo gestito che ti aspetti di vedere non è presente nell'elenco, consulta Risoluzione dei problemi relativi alla disponibilità dei nodi gestiti per suggerimenti sulla risoluzione dei problemi.
-
Nella sezione Specify schedule (Specifica pianificazione), è possibile programmare su base periodica l'esecuzione della scansione di conformità avvalendosi delle opzioni specifiche del generatore di pianificazione.
In Rate control (Controllo velocità):
-
In Concurrency (Simultaneità), specificare un numero o una percentuale di nodi gestiti su cui eseguire contemporaneamente il comando.
Nota
Se sono state selezionate le destinazioni specificando i tag applicati ai nodi gestiti o specificando gruppi di risorse AWS, e non si conosce con certezza il numero di nodi gestiti di destinazione, limitare il numero di destinazioni che possono eseguire il documento contemporaneamente specificando una percentuale.
-
Per Error threshold (Soglia di errore) specificare quando interrompere l'esecuzione del comando sulle altri nodi gestiti dopo un errore su un numero o una percentuale di nodi. Se ad esempio si specificano 3 errori, Systems Manager interrompe l'invio del comando quando riceve il quarto errore. Anche i nodi gestiti che stanno ancora elaborando il comando potrebbero inviare errori.
-
(Opzionale) Nella sezione Output options (Opzioni di output), per salvare l'output del comando in un file, selezionare la casella Write command output to an S3 bucket (Scrivi l'output del comando in un bucket S3). Digita i nomi del bucket e del prefisso (cartella) nelle caselle.
Nota
Le autorizzazioni S3 che assegnano la possibilità di scrivere dati in un bucket S3 sono quelle del profilo dell'istanza (per istanze EC2) o ruoli di servizio IAM (in macchine attivate da sistemi ibridi) assegnate all'istanza, non quelle dell'utente IAM che esegue questo processo. Per ulteriori informazioni, consulta le pagine Configurazione delle autorizzazioni dell'istanza richieste per Systems Manager oppure Creazione di un ruolo di servizio IAM per un ambiente ibrido. Inoltre, se il bucket S3 specificato si trova su un Account AWS diverso, assicurarsi che il profilo dell'istanza o il ruolo di servizio IAM associato al nodo gestito disponga delle autorizzazioni necessarie per scrivere su quel bucket.
-
Scegliere Create Association (Crea associazione). Il sistema crea l'associazione ed esegue automaticamente la scansione di conformità.
-
Attendere per alcuni minuti il completamento della scansione, poi selezionare Compliance (Conformità) nel riquadro di navigazione.
-
In Corresponding managed instances (Istanze gestite corrispondenti), individuare i nodi in cui la colonna Compliance Type (Tipo di conformità) è Custom:Inspec (Personalizzata:Inspec).
-
Scegliere un ID nodo per visualizzare i dettagli degli stati non conformi.
Esecuzione di una scansione di conformità InSpec con Run Command (AWS CLI)
Se non lo hai ancora fatto, installa e configura AWS Command Line Interface (AWS CLI).
Per informazioni, consulta la pagina Installazione o aggiornamento della versione più recente di AWS CLI.
-
Eseguire uno dei seguenti comandi per eseguire un profilo InSpec da GitHub o Amazon S3.
Il comando accetta i parametri seguenti:
-
sourceType: GitHub o Amazon S3
-
sourceInfo: URL relativo alla cartella del profilo InSpec in GitHub o in un bucket S3. La cartella deve contenere il file InSpec di base (*.yml) e tutti i controlli correlati (*.rb).
GitHub
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:
tag_name
","Values":["tag_value
"]}]' --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name
\", \"repository\":\"repository_name
\", \"path\": \"Inspec.yml_file
"}"]}'Ecco un esempio.
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters '{"sourceType":["GitHub"],"getOptions":"branch:master","sourceInfo":["{\"owner\":\"awslabs\", \"repository\":\"amazon-ssm\", \"path\": \"Compliance/InSpec/PortCheck\"}"]}'
Amazon S3
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:
tag_name
","Values":["tag_value
"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain
/amzn-s3-demo-bucket
/Inspec.yml_file
\"}"]}'Ecco un esempio.
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.
aws-api-domain
/amzn-s3-demo-bucket/InSpec/PortCheck.yml\"}"]}' -
-
Con il comando seguente è possibile visualizzare un riepilogo della scansione di conformità.
aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
-
Eseguire il seguente comando per visualizzare i dettagli di un nodo non conforme.
aws ssm list-compliance-items --resource-ids
node_ID
--resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks