Implementazione di Control Tower (CT) - Risposta di sicurezza automatizzata su 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à.

Implementazione di Control Tower (CT)

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

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

Per informazioni su come personalizzare la tua landing zone, consulta: Personalizzazione della tua landing zone

Per lanciare e dispiegare la tua landing zone, consulta: Landing Zone Deployment Guide

Panoramica sulla distribuzione

Utilizza i seguenti passaggi per distribuire questa soluzione su AWS.

Fase 1: Crea e distribuisci un bucket S3

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

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

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::<execute_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.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
4. Preparazione alla costruzione

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

1. Crea un manifesto per i componenti ASR

Dopo aver distribuito gli artefatti ASR nei bucket S3, aggiorna il manifesto della pipeline Control Tower in modo che faccia riferimento alla nuova versione, quindi attiva l'esecuzione della pipeline, consulta: distribuzione controltower

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, Guida ai parametri

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: LoadSCAdminStack parameter_value: "yes" - parameter_key: LoadCIS120AdminStack parameter_value: "no" - parameter_key: TargetAccountIDsStrategy parameter_value: "INCLUDE" - 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: TargetAccountIDs parameter_value: "ALL" - 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 pipeline overview