

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

# Implementazione di Control Tower (CT)
<a name="cfctdeployment"></a>

La guida Customizations for AWS Control Tower (cFCT) è rivolta ad amministratori, DevOps professionisti, fornitori di software indipendenti, architetti di infrastrutture IT e integratori di sistemi che desiderano personalizzare ed estendere i propri ambienti AWS Control Tower per la propria azienda e i propri clienti. Fornisce informazioni sulla personalizzazione e l'estensione dell'ambiente AWS Control Tower con il pacchetto di personalizzazione cFCT.

 **Tempo di implementazione: circa** 30 minuti

## Prerequisiti
<a name="cfctprerequisites"></a>

Prima di distribuire questa soluzione, assicurati che sia destinata agli **amministratori di AWS Control Tower**.

Quando sei pronto per configurare la tua landing zone utilizzando la console AWS Control Tower APIs, oppure segui questi passaggi:

Per iniziare a usare AWS Control Tower, consulta: [Getting Started with AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) 

Per informazioni su come personalizzare la tua landing zone, consulta: [Personalizzazione della tua landing](https://docs.aws.amazon.com/controltower/latest/userguide/customize-landing-zone.html) zone 

Per lanciare e dispiegare la tua landing zone, consulta: [Landing Zone Deployment Guide](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

## Panoramica sulla distribuzione
<a name="cfctdeployment-overview"></a>

Utilizza i seguenti passaggi per distribuire questa soluzione su AWS.

 [Fase 1: Crea e distribuisci un bucket S3](#step-1-cfn) 

**Nota**  
Configurazione del bucket S3: solo per amministratori. Si tratta di un passaggio di configurazione che si effettua una sola volta e non deve essere ripetuto dagli utenti finali. I bucket S3 memorizzano il pacchetto di distribuzione, incluso il CloudFormation modello AWS e il codice Lambda necessari per l'esecuzione di ASR. Queste risorse vengono distribuite utilizzando o. CfCt StackSet

**1. Configura il bucket S3**  
Configura il bucket S3 che verrà utilizzato per archiviare e servire i pacchetti di distribuzione.

**2. Configurazione dell'ambiente**  
Prepara le variabili di ambiente, le credenziali e gli strumenti necessari per il processo di creazione e distribuzione.

**3. Configura le politiche dei bucket S3**  
Definisci e applica le policy bucket appropriate per controllare l'accesso e le autorizzazioni.

**4. Prepara la build**  
Compila, impacchetta o prepara in altro modo l'applicazione o le risorse per la distribuzione.

**5. Distribuisci pacchetti su S3**  
Carica gli artefatti di build preparati nel bucket S3 designato.

 [Fase 2: distribuzione di Stacks su AWS Control Tower](#step-2-cfn) 

**1. Crea Build Manifest per i componenti ASR**  
Definisci un manifesto di compilazione che elenchi tutti i componenti ASR, le relative versioni, dipendenze e istruzioni di compilazione.

**2. Aggiorna il CodePipeline**  
Modifica la CodePipeline configurazione AWS per includere i nuovi passaggi di build, artefatti o fasi necessari per la distribuzione dei componenti ASR.

## Fase 1: Crea e distribuisci nel bucket S3
<a name="step-1-cfn"></a>

Le soluzioni AWS utilizzano due bucket: un bucket per l'accesso globale ai modelli, a cui si accede tramite HTTPS, e un bucket regionale per l'accesso agli asset all'interno della regione, come il codice Lambda.

**1. Configura il bucket S3**  
Scegli un nome univoco per il bucket, ad esempio asr-staging. Imposta due variabili di ambiente sul tuo terminale, una dovrebbe essere il nome del bucket di base con -reference come suffisso, l'altra con la regione di distribuzione desiderata come suffisso:

```
export BASE_BUCKET_NAME=asr-staging-$(date +%s)
export TEMPLATE_BUCKET_NAME=$BASE_BUCKET_NAME-reference
export REGION=us-east-1
export ASSET_BUCKET_NAME=$BASE_BUCKET_NAME-$REGION
```

**2. Configurazione dell'ambiente**  
Nel tuo account AWS, crea due bucket con questi nomi, ad esempio asr-staging-reference e asr-staging-us-east -1. (Il bucket di riferimento conterrà i CloudFormation modelli, il bucket regionale conterrà tutte le altre risorse come il bundle di codice lambda.) I bucket devono essere crittografati e impedire l'accesso pubblico

```
aws s3 mb s3://$TEMPLATE_BUCKET_NAME/
aws s3 mb s3://$ASSET_BUCKET_NAME/
```

**Nota**  
Quando crei i bucket, assicurati che non siano accessibili al pubblico. Usa nomi casuali per i bucket. Disabilita l'accesso pubblico. Usa la crittografia KMS. E verifica la proprietà del bucket prima di caricarlo.

**3. Configurazione della politica dei bucket S3**  
Aggiorna la policy del bucket S3 di $TEMPLATE\_BUCKET\_NAME per includere le autorizzazioni per l'ID dell'account di esecuzione. PutObject Assegna questa autorizzazione a un ruolo IAM all'interno dell'account di esecuzione che è autorizzato a scrivere nel bucket. Questa configurazione consente di evitare di creare il bucket nell'account di gestione.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::template-bucket-name/*",
                "arn:aws:s3:::template-bucket-name"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "org-id"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::template-bucket-name/*",
                "arn:aws:s3:::template-bucket-name"
            ],
            "Condition": {
                "ArnLike": {
                    "aws:PrincipalArn": "arn:aws:iam::account-id:role/iam-role-name"
                }
            }
        }
    ]
}
```

Modifica la policy del bucket S3 dell'asset per includere le autorizzazioni. Assegna questa autorizzazione a un ruolo IAM all'interno dell'account di esecuzione che è autorizzato a scrivere nel bucket. Ripeti questa configurazione per ogni bucket di asset regionale (ad esempio, asr-staging-us-east -1, asr-staging-eu-west -1, ecc.), consentendo le distribuzioni in più regioni senza la necessità di creare i bucket nell'account di gestione.

**4. Preparazione alla costruzione**
+ Prerequisiti:
  + CLI di AWS v2
  + Python 3.11\+ con pip
  + CDK AWS 2.171,1 E VERSIONI SUCCESSIVE
  + Node.js 20\+ con npm
  + Poetry v2 con plugin per l'esportazione
+ Clone Git [https://github.com/aws-solutions/automated-security-response-on-aws.git](https://github.com/aws-solutions/automated-security-response-on-aws.git) 

Per prima cosa assicurati di aver eseguito npm install nella cartella dei sorgenti.

Successivamente, dalla cartella di distribuzione nel repository clonato, esegui build-s3-dist.sh, passando il nome root del bucket (es. mybucket) e la versione che stai creando (es. v1.0.0). Ti consigliamo di utilizzare una versione semver basata sulla versione scaricata da (es. GitHub GitHub: v1.0.0, la tua build: v1.0.0.mybuild)

```
chmod +x build-s3-dist.sh
export SOLUTION_NAME=automated-security-response-on-aws
export SOLUTION_VERSION=v1.0.0.mybuild
./build-s3-dist.sh -b $BASE_BUCKET_NAME -v $SOLUTION_VERSION
```

 **5. Distribuisci pacchetti su S3** 

```
cd deployment
aws s3 cp global-s3-assets/  s3://$TEMPLATE_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control
aws s3 cp regional-s3-assets/  s3://$ASSET_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control
```

## Fase 2: distribuzione di Stacks su AWS Control Tower
<a name="step-2-cfn"></a>

**1. Crea un manifesto per i componenti ASR**  
[Dopo aver distribuito gli artefatti ASR nei bucket S3, aggiorna il [manifesto della pipeline](https://docs.aws.amazon.com/controltower/latest/userguide/cfcn-byo-customizations.html) Control Tower in modo che faccia riferimento alla nuova versione, quindi attiva l'esecuzione della pipeline, consulta: distribuzione controltower](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

**Importante**  
Per garantire la corretta implementazione della soluzione ASR, consulta la documentazione ufficiale di AWS per informazioni dettagliate sulla panoramica dei CloudFormation modelli e sulla descrizione dei parametri. Link informativi di seguito: [Panoramica dei [CloudFormation modelli](https://docs.aws.amazon.com/en_us/solutions/latest/automated-security-response-on-aws/aws-cloudformation-template.html), Guida ai parametri](https://docs.aws.amazon.com/solutions/latest/automated-security-response-on-aws/deployment.html) 

Il manifesto per i componenti ASR ha il seguente aspetto:

```
region: us-east-1 #<HOME_REGION_NAME>
version: 2021-03-15

# Control Tower Custom CloudFormation Resources
resources:
  - name: <ADMIN STACK NAME>
    resource_file: s3://<ADMIN TEMPLATE BUCKET path>
    parameters:
      - parameter_key: UseCloudWatchMetricsAlarms
        parameter_value: "yes"
      - parameter_key: TicketGenFunctionName
        parameter_value: ""
      - parameter_key: ShouldDeployWebUI
        parameter_value: "yes"
      - parameter_key: AdminUserEmail
        parameter_value: "<YOUR EMAIL ADDRESS>"
      - parameter_key: LoadSCAdminStack
        parameter_value: "yes"
      - parameter_key: LoadCIS120AdminStack
        parameter_value: "no"
      - parameter_key: LoadCIS300AdminStack
        parameter_value: "no"
      - parameter_key: UseCloudWatchMetrics
        parameter_value: "yes"
      - parameter_key: LoadNIST80053AdminStack
        parameter_value: "no"
      - parameter_key: LoadCIS140AdminStack
        parameter_value: "no"
      - parameter_key: ReuseOrchestratorLogGroup
        parameter_value: "yes"
      - parameter_key: LoadPCI321AdminStack
        parameter_value: "no"
      - parameter_key: RemediationFailureAlarmThreshold
        parameter_value: "5"
      - parameter_key: LoadAFSBPAdminStack
        parameter_value: "no"
      - parameter_key: EnableEnhancedCloudWatchMetrics
        parameter_value: "no"
    deploy_method: stack_set
    deployment_targets:
     accounts: # :type: list
        - <ACCOUNT_NAME> # and/or
        - <ACCOUNT_NUMBER>
    regions:
      - <REGION_NAME>

  - name:  <ROLE MEMBER STACK NAME>
    resource_file: s3://<ROLE MEMBER TEMPLATE BUCKET path>
    parameters:
      - parameter_key: SecHubAdminAccount
        parameter_value: <ADMIN_ACCOUNT_NAME>
      - parameter_key: Namespace
        parameter_value: <NAMESPACE>
    deploy_method: stack_set
    deployment_targets:
      organizational_units:
        - <ORG UNIT>

  - name:  <MEMBER STACK NAME>
    resource_file: s3://<MEMBER TEMPLATE BUCKET path>
    parameters:
      - parameter_key: SecHubAdminAccount
        parameter_value: <ADMIN_ACCOUNT_NAME>
      - parameter_key: LoadCIS120MemberStack
        parameter_value: "no"
      - parameter_key: LoadNIST80053MemberStack
        parameter_value: "no"
      - parameter_key: Namespace
        parameter_value: <NAMESPACE>
      - parameter_key: CreateS3BucketForRedshiftAuditLogging
        parameter_value: "no"
      - parameter_key: LoadAFSBPMemberStack
        parameter_value: "no"
      - parameter_key: LoadSCMemberStack
        parameter_value: "yes"
      - parameter_key: LoadPCI321MemberStack
        parameter_value: "no"
      - parameter_key: LoadCIS140MemberStack
        parameter_value: "no"
      - parameter_key: EnableCloudTrailForASRActionLog
        parameter_value: "no"
      - parameter_key: LogGroupName
        parameter_value: <LOG_GROUP_NAME>
      - parameter_key: LoadCIS300MemberStack
        parameter_value: "no"
    deploy_method: stack_set
    deployment_targets:
     accounts: # :type: list
        - <ACCOUNT_NAME> # and/or
        - <ACCOUNT_NUMBER>
    organizational_units:
      - <ORG UNIT>
    regions: # :type: list
      - <REGION_NAME>
```

**2. Aggiornamento della pipeline del codice**  
Aggiungi un file manifest a un custom-control-tower-configuration file.zip ed esegui un file CodePipeline, consulta: [code](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-codepipeline-overview.html) pipeline overview 