Distribuisci e gestisci i controlli di AWS Control Tower utilizzando Terraform - 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à.

Distribuisci e gestisci i controlli di AWS Control Tower utilizzando Terraform

Creato da Iker Reina Fuente (AWS) e Ivan Girardi (AWS)

Repository di codice: distribuisci e gestisci i controlli di AWS Control Tower utilizzando Terraform

Ambiente: produzione

Tecnologie: sicurezza, identità, conformità CloudNative; infrastruttura; gestione e governance

Carico di lavoro: open source

Servizi AWS: AWS Control Tower; AWS Organizations

Riepilogo

Questo modello descrive come utilizzare i controlli di AWS Control Tower, HashiCorp Terraform e l'infrastruttura come codice (IaC) per implementare e amministrare controlli di sicurezza preventivi, investigativi e proattivi. Un controllo (noto anche come guardrail) è una regola di alto livello che fornisce una governance continua per l'intero ambiente AWS Control Tower. Ad esempio, puoi utilizzare i controlli per richiedere la registrazione per i tuoi 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 governano le tue risorse AWS e monitorano la conformità su più 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.

I controlli di AWS Control Tower si applicano a un'intera unità organizzativa (OU) e il controllo influisce su ogni 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 dei controlli AWS Control Tower aiuta a stabilire una solida base di sicurezza per la tua landing zone AWS. 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 controlli AWS Control Tower come IaC, puoi anche utilizzare AWS Cloud Development Kit (AWS CDK) anziché Terraform. Per ulteriori informazioni, consulta Distribuire e gestire i controlli AWS Control Tower utilizzando AWS CDK e AWS. CloudFormation

Destinatari

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

Prerequisiti e limitazioni

Prerequisiti

  • Account AWS attivi gestiti come organizzazione in AWS Organizations e in una landing zone AWS Control Tower. Per istruzioni, consulta Creare una struttura di account (AWS Well-Architected Labs).

  • AWS Command Line Interface (AWS CLI), installata e configurata.

  • Un ruolo AWS Identity and Access Management (IAM) nell'account di gestione che dispone delle autorizzazioni per implementare questo modello. Per ulteriori informazioni sulle autorizzazioni richieste e una policy di esempio, consulta Least Privilege permissions for the IAM role nella sezione Informazioni aggiuntive di questo modello.

  • Autorizzazioni per assumere il ruolo IAM nell'account di gestione.

  • Applica il controllo basato sulla policy di controllo del servizio (SCP) con l'identificatore CT.CLOUDFORMATION.PR.1. Questo SCP deve essere attivato per implementare controlli proattivi. Per istruzioni, consulta Impedire la gestione di tipi di risorse, moduli e hook all'interno del registro CloudFormation AWS.

  • Terraform CLI, installata (documentazione Terraform).

  • Terraform AWS Provider, configurato (documentazione Terraform).

  • Backend Terraform, configurato (documentazione Terraform).

Versioni del prodotto

  • AWS Control Tower versione 3.0 o successiva

  • Terraform versione 1.5 o successiva

  • Terraform AWS Provider versione 4.67 o successiva

Architettura

Architettura Target

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.

I controlli di AWS Control Tower 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 sono implementati con policy di controllo dei servizi (SCP) in AWS Organizations. Lo stato di un controllo preventivo è imposto o non abilitato. I controlli preventivi sono supportati in tutte le regioni AWS.

  2. I controlli Detective sono progettati per rilevare eventi specifici quando si verificano e registrare l'azione CloudTrail. Questi sono implementati con le regole di AWS Config. Lo status di un controllo investigativo è chiaro, in violazione o non abilitato. I controlli Detective si applicano solo nelle regioni AWS supportate da AWS Control Tower.

  3. I controlli proattivi analizzano le risorse che verrebbero fornite da AWS CloudFormation e verificano se sono conformi alle politiche e agli obiettivi aziendali. Le risorse non conformi non verranno fornite. Questi sono implementati con gli CloudFormation hook AWS. Lo stato di un controllo proattivo è PASS, FAIL o SKIP.

La guida al controllo è la pratica consigliata per applicare ogni controllo alle unità organizzative. 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.

Strumenti

Servizi AWS

  • AWS ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS.

  • AWS Config fornisce una visione dettagliata delle risorse nel tuo account AWS e di come sono configurate. Ti aiuta a identificare in che modo le risorse sono correlate tra loro e come le loro configurazioni sono cambiate nel tempo.

  • AWS Control Tower ti aiuta a configurare e gestire un ambiente AWS multi-account, seguendo le best practice prescrittive.

  • AWS Organizations è un servizio di gestione degli account che ti aiuta a consolidare più account AWS in un'organizzazione da creare e gestire centralmente.

Altri strumenti

  • HashiCorp Terraform è uno strumento open source di infrastruttura come codice (IaC) che ti aiuta a utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

Archivio di codici

Il codice per questo modello è disponibile nei controlli GitHub Deploy and manage AWS Control Tower utilizzando il repository Terraform.

Best practice

Epiche

AttivitàDescrizioneCompetenze richieste

Clonare il repository.

In una shell bash, inserisci il seguente comando. Questo clona i controlli Deploy and manage AWS Control Tower utilizzando il repository Terraform di. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-terraform.git
DevOps ingegnere

Modifica il file di configurazione del backend Terraform.

  1. Nel repository clonato, apri il file backend.tf.

  2. Modifica il file per impostare la configurazione del backend Terraform. La configurazione definita in questo file dipende dal tuo ambiente. Per ulteriori informazioni, consulta Configurazione del backend (documentazione Terraform).

  3. Salva e chiudi il file backend.tf.

DevOps ingegnere, Terraform

Modifica il file di configurazione del provider Terraform.

  1. Nel repository clonato, apri il file provider.tf.

  2. Modifica il file per impostare la configurazione del provider Terraform. Per ulteriori informazioni, vedere Configurazione del provider (documentazione Terraform). Imposta la regione AWS come regione in cui è disponibile l'API AWS Control Tower.

  3. Salva e chiudi il file provider.tf.

DevOps ingegnere, Terraform

Modifica il file di configurazione.

  1. Nel repository clonato, apri il file variables.tfvars.

  2. Nella controls sezione, nel parametro, inserisci l'identificatore dell'API di controllo. control_names Ogni controllo ha un identificatore API univoco per ogni regione in cui è disponibile AWS Control Tower. Per trovare l'identificatore di controllo, procedi come segue:

    1. Nelle Tabelle dei metadati di controllo, individua il controllo che desideri abilitare.

    2. Nella colonna Control API identifiers, by Region, individua l'identificatore API per la regione in cui stai effettuando la chiamata API, ad esempio. arn:aws:controltower:us-east-1::control/AWS-GR_AUDIT_BUCKET_ENCRYPTION_ENABLED

    3. Estrai l'identificatore di controllo dall'identificatore regionale, ad esempio. AWS-GR_AUDIT_BUCKET_ENCRYPTION_ENABLED

  3. Nella controls sezione, nel organizational_unit_ids parametro, inserisci l'ID dell'unità organizzativa in cui desideri abilitare il controllo, ad esempio. ou-1111-11111111 Inserisci l'ID tra virgolette doppie e separa più ID con virgole. Per ulteriori informazioni su come recuperare gli ID OU, vedere Visualizzazione dei dettagli di un'unità organizzativa.

  4. Salvare e chiudere il file variables.tfvars. Per un esempio di file variables.tfvars aggiornato, consultate la sezione Informazioni aggiuntive di questo modello.

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. Per ulteriori informazioni sull'assunzione di un ruolo IAM nella CLI di AWS, consulta Utilizzare un ruolo IAM nell'interfaccia a riga di comando di AWS.

DevOps ingegnere, General AWS

Implementa il file di configurazione.

  1. Immettere il seguente comando per inizializzare Terraform.

    $ terraform init -upgrade
  2. Immettere il seguente comando per visualizzare in anteprima le modifiche rispetto allo stato corrente.

    $ terraform plan -var-file="variables.tfvars"
  3. Rivedi le modifiche alla configurazione nel piano Terraform e conferma che desideri implementare queste modifiche nell'organizzazione.

  4. Immettere il seguente comando per distribuire le risorse.

    $ terraform apply -var-file="variables.tfvars"
DevOps ingegnere, General AWS, Terraform
AttivitàDescrizioneCompetenze richieste

Esegui il comando destroy.

Immettere il seguente comando per rimuovere le risorse distribuite da questo modello.

$ terraform destroy -var-file="variables.tfvars"
DevOps ingegnere, General AWS, Terraform

Risoluzione dei problemi

ProblemaSoluzione

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 la Console di gestione AWS, tramite AWS Control Tower o tramite 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:

  1. Nell'account di gestione AWS Control Tower, inserisci il seguente comando per recuperare un elenco di Amazon Resource Names (ARN) per le unità organizzative, dove si <root-ID> trova la radice dell'organizzazione. Per ulteriori informazioni sul recupero di questo ID, consulta Visualizzazione dei dettagli della radice.

    aws organizations list-organizational-units-for-parent --parent-id <root-ID>
  2. Per ogni unità organizzativa restituita nel passaggio precedente, immettere il comando seguente, dove <OU-ARN> è l'ARN dell'unità organizzativa.

    aws controltower list-enabled-controls --target-identifier <OU-ARN>
  3. Copia gli ARN ed esegui l'importazione Terraform nel modulo richiesto in modo che sia incluso nello stato Terraform. Per istruzioni, consulta Import (documentazione Terraform).

  4. Ripeti i passaggi in Implementa la configurazione nella sezione Epics.

Opzione 2: disabilita il controllo

Se lavori in un ambiente non di produzione, puoi disabilitare il controllo nella console. Riattivalo ripetendo i passaggi in Deploy the configuration nella sezione Epics. Questo approccio non è consigliato per gli ambienti di produzione perché c'è un periodo di tempo in cui il controllo sarà disabilitato. Se desideri utilizzare questa opzione in un ambiente di produzione, puoi implementare controlli temporanei, come l'applicazione temporanea di un SCP in AWS Organizations.

Risorse correlate

Documentazione AWS

Altre risorse

Informazioni aggiuntive

Esempio di file variables.tfvars

Di seguito è riportato un esempio di file variables.tfvars aggiornato.

controls = [ { control_names = [ "AWS-GR_ENCRYPTED_VOLUMES", ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ]

Autorizzazioni con privilegi minimi per il ruolo IAM

Questo modello APG 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 policy 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": "*" } ] }