Usa Terraform per abilitare automaticamente Amazon GuardDuty per un'organizzazione - Prontuario AWS

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

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

Diagramma di architettura che mostra le risorse relative alla gestione, alla sicurezza, alla registrazione e agli account dei membri.
  1. Terraform crea il ruolo GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) nell'account di sicurezza e nell'account di registrazione.

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

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

  4. Terraform crea il GuardDuty rilevatore nell'account di sicurezza, per l' GuardDuty amministratore delegato.

  5. Se non è già abilitato, Terraform abilita la protezione S3. GuardDuty Per ulteriori informazioni, consulta la protezione di Amazon S3 in Amazon GuardDuty (GuardDuty documentazione).

  6. Terraform registra tutti gli account membri attuali e attivi dell'organizzazione come membri. GuardDuty

  7. Terraform configura l'amministratore GuardDuty delegato per pubblicare i risultati aggregati di tutti gli account membri nel bucket S3 nell'account di registrazione.

  8. 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àDescrizioneCompetenze 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 GitHub

git clone <github-repository-url>
DevOps ingegnere

Modifica il file di configurazione Terraform.

  1. Nella root cartella del repository clonato, replica il file configuration.json.sample eseguendo il seguente comando.

    cp configuration.json.sample configuration.json
  2. Modifica il nuovo file configuration.json e definisci i valori per ciascuna delle seguenti variabili:

    • management_acc_id— ID dell'account di gestione.

    • delegated_admin_acc_id— ID dell'account di sicurezza.

    • logging_acc_id— ID dell'account di registrazione.

    • target_regions— Elenco separato da virgole delle AWS regioni in cui si desidera abilitare. GuardDuty

    • organization_id— AWS Organizations ID dell'organizzazione in cui si sta attivando GuardDuty.

    • default_region— La regione in cui è memorizzato lo stato di Terraform nell'account di gestione. Questa è la stessa regione in cui hai distribuito il bucket S3 e la tabella DynamoDB per il backend Terraform.

    • role_to_assume_for_role_creation— Nome da assegnare a un nuovo IAM ruolo negli account di sicurezza e registrazione. Creerai questo nuovo ruolo nella prossima storia. Terraform assume questo ruolo per creare il GuardDutyTerraformOrgRole IAM ruolo negli account di sicurezza e registrazione.

    • finding_publishing_frequency— Frequenza con cui vengono GuardDuty pubblicati i risultati nel bucket S3.

    • guardduty_findings_bucket_region— Regione preferita in cui si desidera creare il bucket S3 per i risultati pubblicati.

    • logging_acc_s3_bucket_name— Nome preferito per il bucket S3 per i risultati pubblicati.

    • security_acc_kms_key_alias— AWS KMS alias per la chiave utilizzata per crittografare i risultati. GuardDuty

    • s3_access_log_bucket_name— Nome di un bucket S3 preesistente in cui desideri raccogliere i log di accesso per il bucket S3 utilizzato per i risultati. GuardDuty Questo bucket deve trovarsi nella stessa regione del bucket dei risultati. AWS GuardDuty

    • tfm_state_backend_s3_bucket— Nome del bucket S3 preesistente per memorizzare lo stato del backend remoto Terraform.

    • tfm_state_backend_dynamodb_table— Nome della tabella DynamoDB preesistente per il blocco dello stato Terraform.

  3. Salva e chiudi il file di configurazione .

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.

  1. In una shell Bash, nella cartella del repository, vai a. root cfn-templates/ Questa cartella contiene file CloudFormation di modelli con stub.

  2. Esegui il comando seguente. Questo sostituisce gli stub con i valori forniti nel file configuration.json.

    bash scripts/replace_config_stubs.sh
  3. Verifica che i seguenti CloudFormation modelli siano stati creati nella cartella: cfn-templates/

    • management-account-role.yaml: questo file contiene la definizione del ruolo e le autorizzazioni associate per il IAM ruolo nell'account di gestione, che dispone delle autorizzazioni minime richieste per completare questo modello.

    • role-to-assume-for-role-creation.yaml — Questo file contiene la definizione del ruolo e le autorizzazioni associate per il ruolo negli account di sicurezza e registrazione. IAM Terraform assume questo ruolo per creare il ruolo in questi account. GuardDutyTerraformOrgRole

DevOps ingegnere, generale AWS

Crea i IAM ruoli.

Seguendo le istruzioni riportate in Creazione di uno stack (CloudFormation documentazione), procedi come segue:

  1. Distribuisci lo stack role-to-assume-for-role-creation.yaml sia nell'account di sicurezza che in quello di registrazione.

  2. Distribuisci lo stack management-account-role.yaml nell'account di gestione. Quando crei con successo lo stack e ne vedi lo CREATE_COMPLETE stato, nell'output, prendi nota dell'Amazon Resource Name (ARN) di questo nuovo ruolo.

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 root cartella del repository, esegui il comando seguente per avviare lo script di installazione.

bash scripts/full-setup.sh

Lo script full-setup.sh esegue le seguenti azioni:

  • Esporta tutti i valori di configurazione come variabili di ambiente

  • Genera i file di codice backend.tf e terraform.tfvars per ogni modulo Terraform

  • Consente l'accesso GuardDuty affidabile all'interno dell'organizzazione AWS CLI tramite.

  • Importa lo stato dell'organizzazione nello stato Terraform

  • Crea il bucket S3 per la pubblicazione dei risultati nell'account di registrazione

  • Crea la AWS KMS chiave per crittografare i risultati nell'account di sicurezza

  • Abilita GuardDuty in tutta l'organizzazione, in tutte le regioni selezionate, come descritto nella sezione Architettura

DevOps ingegnere, Python
AttivitàDescrizioneCompetenze richieste

Esegui lo script di pulizia.

Se hai utilizzato questo schema GuardDuty per abilitare l'organizzazione e desideri disabilitarlo GuardDuty, nella root cartella del repository, esegui il comando seguente per avviare lo script cleanup-gd.sh.

bash scripts/cleanup-gd.sh

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

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')