

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

# Implementa e gestisci AWS Control Tower i controlli utilizzando Terraform
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform"></a>

*Iker Reina Fuente e Ivan Girardi, Amazon Web Services*

## Riepilogo
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-summary"></a>

Questo modello descrive come utilizzare AWS Control Tower i controlli, HashiCorp Terraform e l'infrastruttura come codice (IaC) per implementare e amministrare controlli di sicurezza preventivi, investigativi e proattivi. Un [controllo](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html) (noto anche come *guardrail*) è una regola di alto livello che fornisce una governance continua per l'intero ambiente. AWS Control Tower Ad esempio, è possibile utilizzare i controlli per richiedere la registrazione Account AWS e quindi configurare notifiche automatiche se si verificano eventi specifici relativi alla sicurezza.

AWS Control Tower ti aiuta a implementare controlli preventivi, investigativi e proattivi che regolano le tue AWS risorse e monitorano la conformità su più livelli. Account AWS Ogni controllo applica una singola regola. In questo modello, si utilizza un modello IaC fornito per specificare quali controlli si desidera implementare nel proprio ambiente.

AWS Control Tower i controlli si applicano a un'intera [unità organizzativa (OU)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit) e il controllo influisce su tutte le unità organizzative Account AWS all'interno dell'unità organizzativa. Pertanto, quando gli utenti eseguono un'azione in qualsiasi account nella tua landing zone, l'azione è soggetta ai controlli che regolano l'unità organizzativa.

L'implementazione AWS Control Tower dei controlli aiuta a stabilire una solida base di sicurezza per la tua AWS landing zone. Utilizzando questo modello per implementare i controlli come IAc tramite Terraform, puoi standardizzare i controlli nella tua landing zone e distribuirli e gestirli in modo più efficiente.

Per distribuire i AWS Control Tower controlli come IAc, puoi anche utilizzare al posto di Terraform. AWS Cloud Development Kit (AWS CDK) Per ulteriori informazioni, consulta [Distribuire e gestire i AWS Control Tower controlli utilizzando e](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html). AWS CDK AWS CloudFormation

**Destinatari**

Questo modello è consigliato agli utenti che hanno esperienza con AWS Control Tower, Terraform e AWS Organizations.

## Prerequisiti e limitazioni
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-prereqs"></a>

**Prerequisiti**
+ Active Account AWS è gestita come organizzazione all'interno AWS Organizations e come AWS Control Tower landing zone. Per istruzioni, consulta la sezione [Guida introduttiva](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) nella AWS Control Tower documentazione.
+ AWS Command Line Interface (AWS CLI), [installato](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurato](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
+ Un ruolo AWS Identity and Access Management (IAM) nell'account di gestione che dispone delle autorizzazioni per implementare questo pattern. Per ulteriori informazioni sulle autorizzazioni richieste e una policy di esempio, consulta *Least Privilege permissions for the IAM role* nella sezione [Informazioni aggiuntive](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional) di questo modello.
+ Autorizzazioni per assumere il ruolo IAM nell'account di gestione.
+ Terraform CLI[,](https://developer.hashicorp.com/terraform/cli) installata (documentazione Terraform).
+ Terraform AWS Provider, [configurato](https://hashicorp.github.io/terraform-provider-aws/) (documentazione Terraform).
+ Backend Terraform, [configurato](https://developer.hashicorp.com/terraform/language/backend) (documentazione Terraform).

**Limitazioni**
+ Per AWS Control Tower i controlli, questo modello richiede l'uso di [identificatori globali](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) nel seguente formato:

  ```
  arn:<PARTITION>:controlcatalog:::control/<CONTROL_CATALOG_OPAQUE_ID>
  ```

  Le versioni precedenti di questo modello utilizzavano [identificatori regionali](https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html) che non sono più supportati. Ti consigliamo di migrare dagli identificatori regionali agli identificatori globali. Gli identificatori globali consentono di gestire i controlli e ampliare il numero di controlli utilizzabili.
**Nota**  
Nella maggior parte dei casi, il valore per `<PARTITION>` è`aws`.

**Versioni del prodotto**
+ AWS Control Tower versione 3.2 o successiva
+ Terraform versione 1.5 o successiva
+ Terraform AWS Provider versione 4.67 o successiva

## Architecture
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-architecture"></a>

Questa sezione fornisce una panoramica di alto livello di questa soluzione e dell'architettura stabilita dal codice di esempio. Il diagramma seguente mostra i controlli distribuiti tra i vari account dell'unità organizzativa.

![\[Diagramma dell'architettura dei controlli distribuiti su tutti gli account AWS nell'unità organizzativa.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/6e0d6c30-a539-44b7-8415-e669fb2ad26a/images/60407c0e-852e-4d5f-9a7d-8510316063aa.png)


AWS Control Tower *i controlli sono classificati in base al loro *comportamento e alle loro linee guida*.*

Esistono tre tipi principali di comportamenti di controllo:

1. *I controlli preventivi* sono progettati per impedire il verificarsi di azioni. Questi vengono implementati con [politiche di controllo dei servizi (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) o [politiche di controllo delle risorse (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) in AWS Organizations. Lo stato di un controllo preventivo è **applicato** o **non abilitato**. I controlli preventivi sono supportati in tutti Regioni AWS.

1. I *controlli Detective* sono progettati per rilevare eventi specifici quando si verificano e registrare l'azione AWS CloudTrail. Questi sono implementati con [AWS Config regole](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html). Lo status di un controllo investigativo è **chiaro**, **in violazione** o **non abilitato**. I controlli Detective si applicano solo a quelli Regioni AWS supportati da AWS Control Tower.

1. *I controlli proattivi* analizzano le risorse da cui verrebbero fornite AWS CloudFormation e verificano se sono conformi alle politiche e agli obiettivi aziendali. Le risorse non conformi non verranno fornite. [Questi sono implementati con ganci.AWS CloudFormation](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/hooks.html) **Lo stato di un controllo proattivo è **PASS**, **FAIL** o SKIP.**

La *guida* al controllo è la pratica consigliata per applicare ogni controllo al tuo. OUs AWS Control Tower fornisce tre categorie di linee guida: *obbligatorie*, *fortemente consigliate* e *facoltative*. La guida di un controllo è indipendente dal suo comportamento. Per ulteriori informazioni, consulta [Comportamento e guida al controllo](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html#control-behavior).

## Tools (Strumenti)
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-tools"></a>

**Servizi AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita in tutte Account AWS le regioni.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)fornisce una visione dettagliata delle risorse disponibili Account AWS e di come sono configurate. Ti aiuta a identificare in che modo le risorse sono correlate tra loro e in che modo le loro configurazioni sono cambiate nel tempo.
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)ti aiuta a configurare e gestire un ambiente con AWS più account, seguendo le migliori pratiche prescrittive.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)è un servizio di gestione degli account che consente di consolidare più account Account AWS in un'organizzazione da creare e gestire centralmente.

**Altri strumenti**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

**Deposito di codici**

Il codice per questo modello è disponibile nel GitHub [Deploy and manage AWS Control Tower controls utilizzando il repository Terraform](https://github.com/aws-samples/aws-control-tower-controls-terraform).

## Best practice
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-best-practices"></a>
+ Il ruolo IAM utilizzato per implementare questa soluzione deve rispettare il [principio del privilegio](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) minimo (documentazione IAM).
+ Segui le [migliori pratiche per gli amministratori](https://docs.aws.amazon.com/controltower/latest/userguide/best-practices.html) (documentazione). AWS Control Tower AWS Control Tower 

## Epiche
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-epics"></a>

### Abilita i controlli nell'account di gestione
<a name="enable-controls-in-the-management-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | In una shell bash, inserisci il seguente comando. Questo clona i [AWS Control Tower controlli Deploy and manage utilizzando il repository Terraform da](https://github.com/aws-samples/aws-control-tower-controls-terraform). GitHub<pre>git clone https://github.com/aws-samples/aws-control-tower-controls-terraform.git</pre> | DevOps ingegnere | 
| Modifica il file di configurazione del backend Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps ingegnere, Terraform | 
| Modifica il file di configurazione del provider Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps ingegnere, Terraform | 
| Modifica il file di configurazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps ingegnere, General AWS, Terraform | 
| Assumi il ruolo IAM nell'account di gestione. | Nell'account di gestione, assumi il ruolo IAM che dispone delle autorizzazioni per distribuire il file di configurazione Terraform. [Per ulteriori informazioni sulle autorizzazioni richieste e una politica di esempio, consulta le *autorizzazioni con privilegi minimi per il ruolo IAM nella* sezione Informazioni aggiuntive.](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional) Per ulteriori informazioni sull'assunzione di un ruolo IAM in AWS CLI, consulta [Utilizzare un ruolo IAM](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html) in. AWS CLI | DevOps ingegnere, General AWS | 
| Implementa il file di configurazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps ingegnere, General AWS, Terraform | 

### (Facoltativo) Disattiva i controlli nell'account di AWS Control Tower gestione
<a name="optional-disable-controls-in-the-ctower-management-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui il comando `destroy`. | Immettete il seguente comando per rimuovere le risorse distribuite secondo questo schema.<pre>$ terraform destroy -var-file="variables.tfvars"</pre> | DevOps ingegnere, General AWS, Terraform | 

## risoluzione dei problemi
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Errore `Error: creating ControlTower Control ValidationException: Guardrail <control ID> is already enabled on organizational unit <OU ID>` | Il controllo che stai cercando di abilitare è già abilitato nell'unità organizzativa di destinazione. Questo errore può verificarsi se un utente ha abilitato manualmente il controllo tramite Console di gestione AWS, through AWS Control Tower o through AWS Organizations. Per distribuire il file di configurazione Terraform, puoi utilizzare una delle seguenti opzioni.**Opzione 1: aggiorna il file dello stato corrente di Terraform**È possibile importare la risorsa nel file dello stato corrente di Terraform. Quando riesegui il `apply` comando, Terraform salterà questa risorsa. Effettua quanto segue per importare la risorsa nello stato corrente di Terraform:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html)**Opzione 2: disabilita il controllo**Se lavori in un ambiente non di produzione, puoi disabilitare il controllo nella console. [Riattivalo ripetendo i passaggi descritti in *Deploy the configuration* nella sezione Epics.](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-epics) Questo approccio non è consigliato per gli ambienti di produzione perché c'è un periodo di tempo in cui il controllo sarà disabilitato. Se si desidera utilizzare questa opzione in un ambiente di produzione, è possibile implementare controlli temporanei, come l'applicazione temporanea di un SCP in AWS Organizations. | 

## Risorse correlate
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-resources"></a>

**AWS documentazione**
+ [Informazioni sui controlli](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html) (AWS Control Tower documentazione)
+ [Libreria di controlli](https://docs.aws.amazon.com/controltower/latest/userguide/controls-reference.html) (AWS Control Tower documentazione)
+ [Implementa e gestisci AWS Control Tower i controlli utilizzando AWS CDK and AWS CloudFormation](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) (AWS Prescriptive Guidance)

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

## Informazioni aggiuntive
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional"></a>

**Esempio** **di file variables.tfvars**

**Di seguito è riportato un esempio di file variables.tfvars aggiornato.** **Questo esempio abilita il controllo **AWS-GR\$1ENCRYPTED\$1VOLUMES (ID globale:) e il controllo AWS-GR\$1SUBNET\$1AUTO\$1ASSIGN\$1PUBLIC\$1IP\$1DISABLED** (ID globale:`503uicglhjkokaajywfpt6ros`).** `50z1ot237wl8u1lv5ufau6qqo` Per un elenco di [identificatori IDs globali, consulta](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) Tutti AWS Control Tower gli identificatori globali nella documentazione.

**L'esempio seguente abilita anche controlli con parametri come **CT.S3.PV.5 (global ID:`7mo7a2h2ebsq71l8k6uzr96ou`) e CT.SECRETSMANAGER.PV.1** (global ID:).** `dvhe47fxg5o6lryqrq9g6sxg4` [Per un elenco di controlli con parametri, vedete Controlli con parametri nella documentazione.](https://docs.aws.amazon.com/controltower/latest/controlreference/control-parameter-concepts.html) AWS Control Tower 

```
controls = [
    {
        control_names = [
            "503uicglhjkokaajywfpt6ros", # AWS-GR_ENCRYPTED_VOLUMES
            ...
        ],
        organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...],
    },
    {
        control_names = [
            "50z1ot237wl8u1lv5ufau6qqo", # AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED
            ...
        ],
        organizational_unit_ids = ["ou-1111-11111111"...],
    },
]

controls_with_params = [
  {
    control_names = [
      { "7mo7a2h2ebsq71l8k6uzr96ou" = { # CT.S3.PV.5
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
          "ExemptedResourceArns" : [],
        }
      } },
      { "dvhe47fxg5o6lryqrq9g6sxg4" = { # CT.SECRETSMANAGER.PV.1
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      ...
    ],
    organizational_unit_ids = ["ou-1111-11111111"...]
  },
  {
    control_names = [
      { "dvuaav61i5cnfazfelmvn9m6k" = { # AWS-GR_DISALLOW_CROSS_REGION_NETWORKING
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      { "41ngl8m5c4eb1myoz0t707n7h" = { # AWS-GR_DISALLOW_VPC_INTERNET_ACCESS
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      ...
    ],
    organizational_unit_ids = ["ou-2222-22222222"...]
  }
]
```

**Autorizzazioni con privilegi minimi per il ruolo IAM**

Questo modello richiede l'assunzione di un ruolo IAM nell'account di gestione. La migliore pratica consiste nell'assumere un ruolo con autorizzazioni temporanee e limitare le autorizzazioni in base al principio del privilegio minimo. La seguente politica di esempio consente le azioni minime richieste per abilitare o disabilitare i controlli. AWS Control Tower 

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "controltower:EnableControl",
                "controltower:DisableControl",
                "controltower:GetControlOperation",
                "controltower:ListEnabledControls",
                "organizations:AttachPolicy",
                "organizations:CreatePolicy",
                "organizations:DeletePolicy",
                "organizations:DescribeOrganization",
                "organizations:DetachPolicy",
                "organizations:ListAccounts",
                "organizations:ListAWSServiceAccessForOrganization",
                "organizations:ListChildren",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:ListParents",
                "organizations:ListPoliciesForTarget",
                "organizations:ListRoots",
                "organizations:UpdatePolicy"
            ],
            "Resource": "*"
        }
    ]
}
```