Distribuisci e gestisci i controlli di AWS Control Tower utilizzando AWS CDK e AWS CloudFormation - 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 AWS CDK e AWS CloudFormation

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

Archivio di codice: -cdk aws-control-tower-controls

Ambiente: produzione

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

Servizi AWS: AWS CloudFormation; AWS Control Tower; AWS Organizations; AWS CDK

Riepilogo

Questo modello descrive come utilizzare AWS CloudFormation e AWS Cloud Development Kit (AWS CDK) per implementare e amministrare i controlli preventivi, investigativi e proattivi di AWS Control Tower come infrastruttura come codice (IaC). 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 distribuire i controlli come IAc tramite e CloudFormation AWS CDK, puoi standardizzare i controlli nella tua landing zone e distribuirli e gestirli in modo più efficiente. Questa soluzione utilizza cdk_nag per scansionare l'applicazione AWS CDK durante la distribuzione. Questo strumento verifica la conformità dell'applicazione alle best practice di AWS.

Per distribuire i controlli AWS Control Tower come IaC, puoi anche utilizzare HashiCorp Terraform anziché AWS CDK. Per ulteriori informazioni, consulta Distribuire e gestire i controlli AWS Control Tower utilizzando Terraform.

Destinatari

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

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • Questo modello fornisce istruzioni per distribuire questa soluzione su più account AWS, da un account di distribuzione all'account di gestione dell'organizzazione. A scopo di test, puoi distribuire questa soluzione direttamente nell'account di gestione, ma le istruzioni per questa configurazione non vengono fornite esplicitamente.

Versioni del prodotto

  • Python versione 3.9 o successiva

  • npm versione 8.9.0 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.

Le linee guida sul controllo si riferiscono alla pratica consigliata su come applicare ciascun 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 Cloud Development Kit (AWS CDK) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice. L'AWS CDK Toolkit è lo strumento principale per interagire con la tua app AWS CDK.

  • 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

  • cdk_nag è uno strumento open source che utilizza una combinazione di pacchetti di regole per verificare la conformità delle applicazioni AWS Cloud Development Kit (AWS CDK) alle migliori pratiche.

  • npm è un registro software che viene eseguito in un ambiente Node.js e viene utilizzato per condividere o prendere in prestito pacchetti e gestire la distribuzione di pacchetti privati.

  • Python è un linguaggio di programmazione per computer generico.

Deposito di codice

Il codice per questo modello è disponibile nei controlli GitHub Deploy AWS Control Tower utilizzando il repository AWS CDK. Utilizzi il file cdk.json per interagire con l'app AWS CDK e usi il file package.json per installare i pacchetti npm.

Best practice

Epiche

AttivitàDescrizioneCompetenze richieste

Crea il ruolo IAM nell'account di gestione.

  1. Crea una policy IAM nell'account di gestione con le autorizzazioni definite nella policy IAM nella sezione Informazioni aggiuntive. Per istruzioni, consulta Creazione delle politiche IAM nella documentazione IAM. Prendi nota dell'Amazon Resource Name (ARN) della policy. Di seguito è riportato un esempio di ARN.

    arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
  2. Crea un ruolo IAM nell'account di gestione, allega la politica di autorizzazione IAM creata nel passaggio precedente e allega la politica di fiducia personalizzata nella politica di fiducia nella sezione Informazioni aggiuntive. Per istruzioni, consulta Creazione di un ruolo utilizzando policy di fiducia personalizzate nella documentazione IAM. Di seguito è riportato un esempio di ARN per il nuovo ruolo.

    arn:aws:iam:: <MANAGEMENT-ACCOUNT-ID>:role/<ROLE-NAME>
DevOps ingegnere, General AWS

Avvia CDK AWS.

  1. Nell'account di gestione, assumi un ruolo con le autorizzazioni per avviare AWS CDK.

  2. Inserisci il seguente comando, sostituendo il seguente:

    • <MANAGEMENT-ACCOUNT-ID>è l'ID dell'account di gestione dell'organizzazione.

    • <AWS-CONTROL-TOWER-REGION>è la regione AWS in cui viene distribuito Control Tower. Per un elenco completo dei codici regionali, consulta Endpoint regionali in AWS General Reference.

    • <DEPLOYMENT-ACCOUNT-ID>è l'ID dell'account di distribuzione.

    • <DEPLOYMENT-ROLE-NAME>è il nome del ruolo IAM che stai utilizzando nell'account di distribuzione.

    • <POLICY-NAME>è il nome della policy che hai creato nell'account di gestione.

    $ npx cdk bootstrap aws://<MANAGEMENT-ACCOUNT-ID>/<AWS-CONTROL-TOWER-REGION> \ --trust arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME> \ --cloudformation-execution-policies arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
DevOps ingegnere, AWS generale, Python

Clonare il repository.

In una shell bash, inserisci il seguente comando. Questo clona i controlli Deploy AWS Control Tower utilizzando il repository AWS CDK da. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git
DevOps ingegnere, General AWS

Modifica il file di configurazione AWS CDK.

  1. Nel repository clonato, apri il file constants.py.

  2. Nel ACCOUNT_ID parametro, inserisci l'ID del tuo account di gestione.

  3. Nel <AWS-CONTROL-TOWER-REGION> parametro, inserisci la regione AWS in cui viene distribuito AWS Control Tower.

  4. Nel ROLE_ARN parametro, inserisci l'ARN del ruolo che hai creato nell'account di gestione.

  5. Nella GUARDRAILS_CONFIGURATION sezione, nel Enable-Control parametro, inserisci gli identificatori dell'API di controllo. Inserisci l'identificatore tra virgolette doppie e separa gli identificatori multipli con virgole. 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_ENCRYPTED_VOLUMES

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

  6. Nella GUARDRAILS_CONFIGURATION sezione, nel OrganizationalUnitIds 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 delle unità organizzative, vedere Visualizzazione dei dettagli di un'unità organizzativa.

  7. Salvare e chiudere il file constants.py. Per un esempio di file constants.py aggiornato, consultate la sezione Informazioni aggiuntive di questo modello.

AttivitàDescrizioneCompetenze richieste

Assumi il ruolo IAM nell'account di distribuzione.

Nell'account di distribuzione, assumi il ruolo IAM che dispone delle autorizzazioni per distribuire gli stack CDK AWS nell'account di gestione. 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

Attivare l'ambiente.

Se usi Linux o macOS:

  1. Inserisci il seguente comando per creare un ambiente virtuale.

    $ python3 -m venv .venv
  2. Dopo aver creato l'ambiente virtuale, inserisci il seguente comando per attivarlo.

    $ source .venv/bin/activate

Se utilizzi Windows:

  1. Immettere il seguente comando per attivare un ambiente virtuale.

    % .venv\Scripts\activate.bat
DevOps ingegnere, General AWS

Installa le dipendenze.

Dopo aver attivato l'ambiente virtuale, immettete il seguente comando per eseguire lo script install_deps.sh. Questo script installa le dipendenze richieste.

$ ./scripts/install_deps.sh
DevOps ingegnere, AWS generale, Python

Implementa lo stack.

Inserisci i seguenti comandi per sintetizzare e distribuire lo stack. CloudFormation

$ npx cdk synth $ npx cdk deploy
DevOps ingegnere, AWS generale, Python

Risorse correlate

Documentazione AWS

Altre risorse

Informazioni aggiuntive

Esempio di file constants.py

Di seguito è riportato un esempio di file constants.py aggiornato.

ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... }, "OrganizationalUnitIds": ["ou-2222-22222222"...], }, ]

Policy IAM

La seguente policy di esempio consente le azioni minime richieste per abilitare o disabilitare i controlli AWS Control Tower durante la distribuzione di stack AWS CDK da un account di distribuzione all'account di gestione.

{ "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:DescribeOrganizationalUnit", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy", "ssm:GetParameters" ], "Resource": "*" } ] }

Policy di trust

La seguente policy di fiducia personalizzata consente a un ruolo IAM specifico nell'account di distribuzione di assumere il ruolo IAM nell'account di gestione. Sostituisci quanto segue:

  • <DEPLOYMENT-ACCOUNT-ID>è l'ID dell'account di distribuzione

  • <DEPLOYMENT-ROLE-NAME>è il nome del ruolo nell'account di distribuzione a cui è consentito assumere il ruolo nell'account di gestione

{ “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Principal”: { “AWS”: “arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>” }, “Action”: “sts:AssumeRole”, “Condition”: {} } ] }