

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
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization"></a>

*Aarthi Kannan, Amazon Web Services*

## Riepilogo
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-summary"></a>

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 ambiente AWS. L'abilitazione manuale GuardDuty di più account o organizzazioni, in più regioni AWS o tramite la Console di gestione AWS 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.

AWS consiglia 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 account AWS che sono attualmente membri 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 AWS GuardDuty Organizations.

## Prerequisiti e limitazioni
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-prereqs"></a>

**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 è memorizzato anche 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](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html#delegated_admin_important) (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, consulta [Creare una struttura di account](https://www.wellarchitectedlabs.com/cost/100_labs/100_1_aws_account_setup/2_account_structure/) (AWS Well-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).](https://www.terraform.io/language/settings/backends/s3) [Per un esempio di codice che configura la gestione remota dello stato con un backend S3, vedi 3-backend (Terraform Registry). remote-state-s](https://registry.terraform.io/modules/nozaq/remote-state-s3-backend/aws/latest) 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](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) e [Creazione di una tabella (documentazione](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html) Amazon S3). Se stai effettuando la distribuzione 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](https://learn.hashicorp.com/collections/terraform/aws-get-started) (documentazione Terraform).
+ Python versione 3.9.6 o successiva è installata e configurata. Per ulteriori informazioni, consulta [Source releases](https://www.python.org/downloads/source/) (sito Web Python).
+ AWS SDK per Python (Boto3) è installato. Per ulteriori informazioni, consulta [Installazione (documentazione Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation)).
+ jq è installato e configurato. Per ulteriori informazioni, consulta [Download jq (documentazione](https://stedolan.github.io/jq/download/) 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](https://aws.amazon.com/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 landing zone AWS che aderisce alle seguenti best practice:
  + La landing zone è stata creata utilizzando AWS Control Tower.
  + Account AWS 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.

## Architecture
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-architecture"></a>

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.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c9b68627-b68e-47a6-9933-d0f36ea10ae2/images/86193749-eef9-4d63-8a7f-daa0cd03fbfe.png)


1. Terraform crea il ruolo **GuardDutyTerraformOrgRole**AWS Identity and Access Management (IAM) nell'account di sicurezza e nell'account di registrazione.

1. Terraform crea un bucket S3 nella regione AWS 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 chiave AWS Key Management Service (AWS KMS) 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.

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

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

1. Se non è già abilitato, Terraform abilita la protezione S3. GuardDuty Per ulteriori informazioni, consulta la [protezione di Amazon S3 in Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) (GuardDuty documentazione).

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

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

1. Terraform ripete i passaggi da 3 a 7 per ogni regione AWS scelta.

**Automazione e scalabilità**

Il codice di esempio fornito è modularizzato in modo da poterlo integrare nella CI/CD pipeline per l'implementazione automatizzata.

## Tools (Strumenti)
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-tools"></a>

**Servizi AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) è 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.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) è un servizio di gestione degli account che ti aiuta a consolidare più account AWS in un'organizzazione da creare e gestire centralmente.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [AWS SDK for Python (](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)Boto3) è un kit di sviluppo software che ti aiuta a integrare l'applicazione, la libreria o lo script Python con i servizi AWS.

**Altri strumenti e servizi**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è 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](https://www.python.org/) è un linguaggio di programmazione generico.
+ [jq](https://stedolan.github.io/jq/download/) è 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-](https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform).

## Epiche
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-epics"></a>

### Abilita GuardDuty nell'organizzazione
<a name="enable-guardduty-in-the-organization"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | In una shell Bash, esegui il seguente comando. In *Clona il repository* nella sezione [Informazioni aggiuntive](#use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional), puoi copiare il comando completo contenente l'URL del repository. GitHub [Questo clona il repository - da. amazon-guardduty-for-aws organizations-with-terraform](https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform) GitHub<pre>git clone <github-repository-url></pre> | DevOps ingegnere | 
| Modifica il file di configurazione Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps ingegnere, AWS generale, Terraform, Python | 
| Genera CloudFormation modelli per nuovi ruoli IAM.  | Questo modello include una soluzione IaC per creare due CloudFormation modelli. Questi modelli creano due ruoli IAM che Terraform utilizza durante il processo di configurazione. [Questi modelli aderiscono alle migliori pratiche di sicurezza delle autorizzazioni con privilegi minimi.](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps ingegnere, General AWS | 
| Crea i ruoli IAM. | Seguendo le istruzioni in [Creazione di uno stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) (CloudFormation documentazione), procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps ingegnere, General AWS | 
| Assumi il ruolo IAM nell'account di gestione. | Come best practice in materia di sicurezza, ti consigliamo di assumere il nuovo ruolo **management-account-role**IAM prima di procedere. In AWS Command Line Interface (AWS CLI), inserisci il comando *in Assumi il ruolo IAM dell'account di gestione* [nella sezione Informazioni aggiuntive](#use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional). | DevOps ingegnere, General AWS | 
| Esegui lo script di configurazione. | Nella `root` cartella del repository, esegui il comando seguente per avviare lo script di installazione.<pre>bash scripts/full-setup.sh</pre>Lo script **full-setup.sh** esegue le seguenti azioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps ingegnere, Python | 

### (Facoltativo) Disabilita GuardDuty nell'organizzazione
<a name="optional-disable-guardduty-in-the-organization"></a>


| Operazione | Description | Competenze 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**.<pre>bash scripts/cleanup-gd.sh</pre>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. GuardDutyQuesto 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, AWS generale, Terraform, Python | 
| Rimuovi i ruoli IAM. | **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).](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) CloudFormation  | DevOps ingegnere, General AWS | 

## Risorse correlate
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-resources"></a>

*Documentazione AWS*
+ [Gestione di più account](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_accounts.html) (GuardDuty documentazione)
+ [Concessione del privilegio minimo (documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) IAM)

*Marketing AWS*
+ [Amazon GuardDuty](https://aws.amazon.com/guardduty/)
+ [AWS Organizations](https://aws.amazon.com/organizations/)

*Altre risorse*
+ [Terraform](https://www.terraform.io/)
+ [Documentazione CLI Terraform](https://www.terraform.io/cli)

## Informazioni aggiuntive
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional"></a>

**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 IAM dell'account di gestione**

Per assumere il ruolo IAM nell'account di gestione, esegui il comando seguente. Sostituisci `<IAM role ARN>` con l'ARN del ruolo IAM.

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