Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Usa Terraform per abilitare automaticamente Amazon GuardDuty per un'organizzazione
Creato da Aarthi Kannan () AWS
Archivio di codice: - amazon-guardduty-for-aws organizations-with-terraform | Ambiente: produzione | Tecnologie: sicurezza, identità, conformità; DevOps |
Carico di lavoro: tutti gli altri carichi di lavoro | AWSservizi: Amazon GuardDuty; AWS Organizations |
Riepilogo
Amazon monitora GuardDuty continuamente i tuoi account Amazon Web Services (AWS) e utilizza l'intelligence sulle minacce per identificare attività impreviste e potenzialmente dannose all'interno del tuo AWS ambiente. L'attivazione manuale GuardDuty di più account o organizzazioni, in più AWS regioni o tramite la console di AWS gestione può essere complicata. Puoi automatizzare il processo utilizzando uno strumento Infrastructure as Code (IaC), come Terraform, che può fornire e gestire servizi e risorse multiaccount e multiregione nel cloud.
AWSconsiglia di utilizzare AWS Organizations per configurare e gestire più account in GuardDuty. Questo modello è conforme a tale raccomandazione. Uno dei vantaggi di questo approccio è che, quando vengono creati o aggiunti nuovi account all'organizzazione, GuardDuty verranno abilitati automaticamente in questi account per tutte le regioni supportate, senza la necessità di un intervento manuale.
Questo modello dimostra come utilizzare HashiCorp Terraform per abilitare Amazon GuardDuty per tre o più account Amazon Web Services (AWS) in un'organizzazione. Il codice di esempio fornito con questo pattern esegue le seguenti operazioni:
Abilita tutti GuardDuty gli AWS account che sono membri correnti dell'organizzazione di destinazione in AWS Organizations
Attiva la funzionalità Auto-Enable in GuardDuty, che abilita automaticamente tutti GuardDuty gli account che verranno aggiunti all'organizzazione di destinazione in futuro
Consente di selezionare le regioni in cui si desidera abilitare GuardDuty
Utilizza l'account di sicurezza dell'organizzazione come GuardDuty amministratore delegato
Crea un bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) nell'account di registrazione e GuardDuty configura la pubblicazione dei risultati aggregati di tutti gli account in questo bucket
Assegna una politica del ciclo di vita che trasferisce i risultati dal bucket S3 allo storage Amazon S3 Glacier Flexible Retrieval dopo 365 giorni, per impostazione predefinita
Puoi eseguire manualmente questo codice di esempio oppure integrarlo nella tua pipeline di integrazione continua e distribuzione continua (CI/CD).
Destinatari
Questo modello è consigliato agli utenti che hanno esperienza con Terraform, Python e GuardDuty AWS Organizations.
Prerequisiti e limitazioni
Prerequisiti
Un account AWS attivo.
Un'organizzazione è configurata in AWS Organizations e contiene almeno i seguenti tre account:
Un account di gestione: questo è l'account da cui si distribuisce il codice Terraform, autonomo o come parte della pipeline CI/CD. Lo stato Terraform è anche memorizzato in questo account.
Un account di sicurezza: questo account viene utilizzato come amministratore GuardDuty delegato. Per ulteriori informazioni, vedere Considerazioni importanti per gli amministratori GuardDuty delegati (documentazione). GuardDuty
Un account di registrazione: questo account contiene il bucket S3 in cui vengono GuardDuty pubblicati i risultati aggregati di tutti gli account membri.
Per ulteriori informazioni su come configurare l'organizzazione con la configurazione richiesta, vedere Create an account structure
(AWSWell-Architected Labs). Un bucket Amazon S3 e una tabella Amazon DynamoDB che fungono da backend remoto per archiviare lo stato di Terraform nell'account di gestione. Per ulteriori informazioni sull'utilizzo dei backend remoti per lo stato Terraform, consulta S3 Backend (documentazione Terraform).
Per un esempio di codice che configura la gestione remota dello stato con un backend S3, vedi 3-backend (Terraform Registry). remote-state-s Si notino i requisiti seguenti: Il bucket S3 e la tabella DynamoDB devono trovarsi nella stessa regione.
Quando si crea la tabella DynamoDB, la chiave di partizione deve
LockID
essere (distinzione tra maiuscole e minuscole) e il tipo di chiave di partizione deve essere String. Tutte le altre impostazioni della tabella devono avere i valori predefiniti. Per ulteriori informazioni, vedere Informazioni sulle chiavi primarie e Creazione di una tabella (documentazione di DynamoDB).
Un bucket S3 che verrà utilizzato per archiviare i log di accesso per il bucket S3 in cui verranno pubblicati i risultati. GuardDuty Per ulteriori informazioni, consulta Abilitazione della registrazione degli accessi al server Amazon S3 (documentazione Amazon S3). Se ti stai schierando in una landing zone di AWS Control Tower, puoi riutilizzare il bucket S3 nell'account di archiviazione dei log per questo scopo.
La versione 0.14.6 o successiva di Terraform è installata e configurata. Per ulteriori informazioni, consulta Get Started — AWS
(documentazione Terraform). Python versione 3.9.6 o successiva è installata e configurata. Per ulteriori informazioni, consulta Source releases
(sito Web Python). AWSSDKfor Python (Boto3) è installato. Per ulteriori informazioni, vedete Installazione
(documentazione di Boto3). jq è installato e configurato. Per ulteriori informazioni, consulta Download jq (documentazione
jq).
Limitazioni
Questo modello supporta i sistemi operativi macOS e Amazon Linux 2. Questo modello non è stato testato per l'uso nei sistemi operativi Windows.
Nota: Amazon Linux 2 sta per terminare il supporto. Per ulteriori informazioni, consulta Amazon Linux 2 FAQs
. GuardDuty non deve essere già abilitato in nessuno degli account, in nessuna delle regioni di destinazione.
La soluzione IaC in questo modello non implementa i prerequisiti.
Questo modello è progettato per una AWS landing zone che aderisce alle seguenti best practice:
La landing zone è stata creata utilizzando AWS Control Tower.
AWSAccount separati vengono utilizzati per la sicurezza e la registrazione.
Versioni del prodotto
Terraform versione 0.14.6 o successiva. Il codice di esempio è stato testato per la versione 1.2.8.
Python versione 3.9.6 o successiva.
Architettura
Questa sezione offre una panoramica di alto livello di questa soluzione e dell'architettura stabilita dal codice di esempio. Il diagramma seguente mostra le risorse distribuite tra i vari account dell'organizzazione, all'interno di una singola regione. AWS
Terraform crea il ruolo GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) nell'account di sicurezza e nell'account di registrazione.
Terraform crea un bucket S3 nella AWS regione predefinita nell'account di registrazione. Questo bucket viene utilizzato come destinazione di pubblicazione per aggregare tutti i GuardDuty risultati in tutte le regioni e provenienti da tutti gli account dell'organizzazione. Terraform crea anche una AWS chiave Key Management Service (AWSKMS) nell'account di sicurezza che viene utilizzata per crittografare i risultati nel bucket S3 e configura l'archiviazione automatica dei risultati dal bucket S3 nello storage S3 Glacier Flexible Retrieval.
Dall'account di gestione, Terraform designa l'account di sicurezza come amministratore delegato per. GuardDuty Ciò significa che l'account di sicurezza ora gestisce il GuardDuty servizio per tutti gli account dei membri, incluso l'account di gestione. Gli account dei singoli membri non possono essere sospesi o GuardDuty disattivati da soli.
Terraform crea il GuardDuty rilevatore nell'account di sicurezza, per l' GuardDuty amministratore delegato.
Se non è già abilitato, Terraform abilita la protezione S3. GuardDuty Per ulteriori informazioni, consulta la protezione di Amazon S3 in Amazon GuardDuty (GuardDuty documentazione).
Terraform registra tutti gli account membri attuali e attivi dell'organizzazione come membri. GuardDuty
Terraform configura l'amministratore GuardDuty delegato per pubblicare i risultati aggregati di tutti gli account membri nel bucket S3 nell'account di registrazione.
Terraform ripete i passaggi da 3 a 7 per ogni regione scelta. AWS
Automazione e scalabilità
Il codice di esempio fornito è modularizzato in modo da poterlo integrare nella pipeline CI/CD per un'implementazione automatizzata.
Strumenti
AWSservizi
Amazon DynamoDB è un servizio di database SQL No completamente gestito che offre prestazioni veloci, prevedibili e scalabili.
Amazon GuardDuty è un servizio di monitoraggio continuo della sicurezza che analizza ed elabora i log per identificare attività impreviste e potenzialmente non autorizzate nel tuo ambiente. AWS
AWSIdentity and Access Management (IAM) consente di gestire in modo sicuro l'accesso alle AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
AWSKey Management Service (AWSKMS) consente di creare e controllare chiavi crittografiche per proteggere i dati.
AWSOrganizations è un servizio di gestione degli account che consente di consolidare più AWS account in un'organizzazione da creare e gestire centralmente.
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
AWSSDKfor Python (Boto3)
è un kit di sviluppo software che consente di integrare l'applicazione, la libreria o lo script Python con i servizi. AWS
Altri strumenti e servizi
HashiCorp Terraform
è un'applicazione di interfaccia a riga di comando che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. Python
è un linguaggio di programmazione generico. jq
è un processore a riga di comando che consente di lavorare con i file. JSON
Deposito di codice
Il codice per questo pattern è disponibile GitHub nel organizations-with-terraform repository amazon-guardduty-for-aws-
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Clonare il repository. | In una shell Bash, esegui il seguente comando. In Clona il repository nella sezione Informazioni aggiuntive, puoi copiare il comando completo contenente il URL repository. GitHub Questo clona il repository - da. amazon-guardduty-for-aws organizations-with-terraform
| DevOps ingegnere |
Modifica il file di configurazione Terraform. |
| DevOps ingegnere, GeneraleAWS, Terraform, Python |
Genera CloudFormation modelli per nuovi IAM ruoli. | Questo modello include una soluzione IaC per creare due CloudFormation modelli. Questi modelli creano due IAM ruoli che Terraform utilizza durante il processo di configurazione. Questi modelli aderiscono alle migliori pratiche di sicurezza delle autorizzazioni con privilegi minimi.
| DevOps ingegnere, generale AWS |
Crea i IAM ruoli. | Seguendo le istruzioni riportate in Creazione di uno stack (CloudFormation documentazione), procedi come segue:
| DevOps ingegnere, generale AWS |
Assumi il IAM ruolo nell'account di gestione. | Come best practice in materia di sicurezza, ti consigliamo di assumere il nuovo management-account-roleIAMruolo prima di procedere. Nell'interfaccia a riga di AWS comando (AWSCLI), immettete il comando in Assumi il IAM ruolo dell'account di gestione nella sezione Informazioni aggiuntive. | DevOps ingegnere, Generale AWS |
Esegui lo script di installazione. | Nella
Lo script full-setup.sh esegue le seguenti azioni:
| DevOps ingegnere, Python |
Attività | Descrizione | Competenze richieste |
---|---|---|
Esegui lo script di pulizia. | Se hai utilizzato questo schema GuardDuty per abilitare l'organizzazione e desideri disabilitarlo GuardDuty, nella
Questo script si disabilita GuardDuty nell'organizzazione di destinazione, rimuove tutte le risorse distribuite e ripristina l'organizzazione allo stato precedente prima di utilizzare Terraform per l'attivazione. GuardDuty Nota Questo script non rimuove i file di stato Terraform né blocca i file dai backend locali e remoti. Se necessario, è necessario eseguire queste azioni manualmente. Inoltre, questo script non elimina l'organizzazione importata o gli account da essa gestiti. L'accesso affidabile per GuardDuty non è disabilitato come parte dello script di pulizia. | DevOps ingegnere, GeneraleAWS, Terraform, Python |
Rimuovi ruoliIAM. | Elimina gli stack creati con i modelli role-to-assume-for-role-creation.yaml e .yaml. management-account-role CloudFormation Per ulteriori informazioni, consulta Eliminazione di uno stack (documentazione). CloudFormation | DevOps ingegnere, Generale AWS |
Risorse correlate
AWSdocumentazione
Gestione di più account (GuardDuty documentazione)
AWSmarketing
Altre risorse
Informazioni aggiuntive
Clona il repository
Esegui il comando seguente per clonare il repository. GitHub
git clone https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform
Assumi il ruolo dell'account di gestione IAM
Per assumere il IAM ruolo nell'account di gestione, esegui il comando seguente. Sostituisci <IAM role ARN>
ARN con il IAM ruolo.
export ROLE_CREDENTIALS=$(aws sts assume-role --role-arn <IAM role ARN> --role-session-name AWSCLI-Session --output json) export AWS_ACCESS_KEY_ID=$(echo $ROLE_CREDENTIALS | jq .Credentials.AccessKeyId | sed 's/"//g') export AWS_SECRET_ACCESS_KEY=$(echo $ROLE_CREDENTIALS | jq .Credentials.SecretAccessKey | sed 's/"//g') export AWS_SESSION_TOKEN=$(echo $ROLE_CREDENTIALS | jq .Credentials.SessionToken | sed 's/"//g')