Associa automaticamente una policy AWS gestita per Systems Manager ai profili di EC2 istanza utilizzando Cloud Custodian e AWS CDK - 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à.

Associa automaticamente una policy AWS gestita per Systems Manager ai profili di EC2 istanza utilizzando Cloud Custodian e AWS CDK

Creato da Ali Asfour (AWS) e Aaron Lennon () AWS

Ambiente: PoC o pilota

Tecnologie: DevOps DevelopmentAndTesting; Gestione e governance; Sicurezza, identità, conformità; Infrastruttura

Carico di lavoro: open source

AWSservizi: AmazonSNS; AmazonSQS; AWS CodeBuild AWS CodePipeline; AWS Systems Manager; AWS CodeCommit

Riepilogo

Puoi integrare le istanze Amazon Elastic Compute Cloud (AmazonEC2) con AWS Systems Manager per automatizzare le attività operative e fornire maggiore visibilità e controllo. Per l'integrazione con Systems Manager, EC2 le istanze devono avere un AWSSystems Manager Agent (SSMAgent) installato e una policy AmazonSSMManagedInstanceCore AWS Identity and Access Management (IAM) allegata ai rispettivi profili di istanza. 

Tuttavia, se si desidera assicurarsi che tutti i profili di EC2 istanza abbiano la AmazonSSMManagedInstanceCore policy allegata, è possibile affrontare problemi nell'aggiornamento di nuove EC2 istanze che non dispongono di profili di istanza o EC2 istanze che hanno un profilo di istanza ma non dispongono della policy. AmazonSSMManagedInstanceCore Inoltre, può essere difficile aggiungere questa politica su più account e AWS regioni Amazon Web Services (AWS).

Questo modello aiuta a risolvere queste sfide implementando tre policy Cloud Custodian nei tuoi account: AWS

  • La prima policy di Cloud Custodian verifica EC2 le istanze esistenti che dispongono di un profilo di istanza ma non dispongono della policy. AmazonSSMManagedInstanceCore La AmazonSSMManagedInstanceCore policy viene quindi allegata. 

  • La seconda policy di Cloud Custodian verifica EC2 le istanze esistenti senza un profilo di istanza e aggiunge un profilo di istanza predefinito a cui è associata la AmazonSSMManagedInstanceCore policy.

  • La terza policy di Cloud Custodian crea funzioni AWS Lambda nei tuoi account per monitorare la creazione di istanze e profili di EC2 istanze. Ciò garantisce che la AmazonSSMManagedInstanceCore policy venga allegata automaticamente quando viene creata un'EC2istanza.

Questo modello utilizza AWS DevOpsstrumenti per ottenere un'implementazione continua e su larga scala delle policy di Cloud Custodian in un ambiente multi-account, senza fornire un ambiente di elaborazione separato. 

Prerequisiti e limitazioni

Prerequisiti

  • Due o più account attivi. AWS Un account è l'account di sicurezza e gli altri sono account membri.

  • Autorizzazioni per fornire AWS risorse nell'account di sicurezza. Questo modello utilizza le autorizzazioni di amministratore, ma è necessario concedere le autorizzazioni in base ai requisiti e alle politiche dell'organizzazione.

  • Possibilità di assumere un IAM ruolo dall'account di sicurezza agli account dei membri e creare i ruoli richiesti. IAM Per ulteriori informazioni su questo argomento, consulta Delegare l'accesso tra AWS account utilizzando IAM i ruoli nella IAM documentazione.

  • AWSInterfaccia a riga di comando (AWSCLI), installata e configurata. A scopo di test, è possibile configurare AWS CLI utilizzando il aws configure comando o impostando le variabili di ambiente. Importante: questa operazione non è consigliata per gli ambienti di produzione e consigliamo di concedere a questo account solo l'accesso con il privilegio minimo. Per ulteriori informazioni su questo argomento, consulta Garantire il privilegio minimo nella IAM documentazione.

  • Il devops-cdk-cloudcustodian.zip file (allegato), scaricato sul computer locale.

  • Familiarità con Python.

  • Gli strumenti richiesti (Node.js, AWS Cloud Development Kit (AWSCDK) e Git), installati e configurati. È possibile utilizzare il install-prerequisites.sh file contenuto nel devops-cdk-cloudcustodian.zip file per installare questi strumenti. Assicurati di eseguire questo file con i privilegi di root. 

Limitazioni

  • Sebbene questo modello possa essere utilizzato in un ambiente di produzione, assicuratevi che tutti i IAM ruoli e le politiche soddisfino i requisiti e le politiche della vostra organizzazione. 

Versioni del pacchetto

  • Cloud Custodian versione 0.9 o successiva

  • TypeScript versione 3.9.7 o successiva

  • Node.js versione 14.15.4 o successiva

  • npmversione 7.6.1 o successiva

  • AWSCDKversione 1.96.0 o successiva

Architettura

AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.

Il diagramma mostra il flusso di lavoro seguente:

  1. Le policy di Cloud Custodian vengono trasferite in un AWS CodeCommit archivio nell'account di sicurezza. Una regola di Amazon CloudWatch Events avvia automaticamente la AWS CodePipeline pipeline.

  2. La pipeline recupera il codice più recente CodeCommit e lo invia alla parte di integrazione continua della pipeline di integrazione continua e distribuzione continua (CI/CD) gestita da. AWS CodeBuild

  3. CodeBuild esegue le DevSecOps azioni complete, inclusa la convalida della sintassi delle policy sulle policy di Cloud Custodian, ed esegue queste policy in modalità per verificare quali risorse vengono identificate. --dryrun

  4. Se non ci sono errori, l'attività successiva avvisa un amministratore di rivedere le modifiche e approvare la distribuzione negli account dei membri.

Stack tecnologico

  • AWS CDK

  • CodeBuild

  • CodeCommit

  • CodePipeline

  • IAM

  • Cloud Custodian 

Automazione e scalabilità

Il modulo AWS CDK pipelines fornisce una pipeline CI/CD che consente di CodePipeline orchestrare la creazione e il test del codice sorgente CodeBuild, oltre alla distribuzione di risorse con stack. AWS AWS CloudFormation È possibile utilizzare questo modello per tutti gli account membri e le regioni dell'organizzazione. Puoi anche estendere lo Roles creation stack per distribuire altri IAM ruoli nei tuoi account membro. 

Strumenti

  • AWSCloud Development Kit (AWSCDK) è un framework di sviluppo software per definire l'infrastruttura cloud in codice e fornirla tramite AWS CloudFormation.

  • AWSCommand Line Interface (AWSCLI) è uno strumento open source che consente di interagire con i AWS servizi utilizzando i comandi della shell della riga di comando.

  • AWS CodeBuildè un servizio di compilazione completamente gestito nel cloud.

  • AWS CodeCommitè un servizio di controllo delle versioni che puoi utilizzare per archiviare e gestire le risorse in modo privato.

  • AWS CodePipelineè un servizio di distribuzione continua che puoi utilizzare per modellare, visualizzare e automatizzare i passaggi necessari per il rilascio del software.

  • AWSIdentity and Access Management è un servizio Web che consente di controllare in modo sicuro l'accesso alle AWS risorse.

  • Cloud Custodian è uno strumento che riunisce le dozzine di strumenti e script utilizzati dalla maggior parte delle organizzazioni per gestire i propri account cloud pubblici in un unico strumento open source.

  • Node.js è un JavaScript runtime basato sul motore V8 di Google Chrome. JavaScript

Codice

Per un elenco dettagliato dei moduli, delle funzioni dell'account, dei file e dei comandi di distribuzione utilizzati in questo modello, consultate il README file nel devops-cdk-cloudcustodian.zip file (allegato).

Epiche

AttivitàDescrizioneCompetenze richieste

Configura il CodeCommit repository.

  1. Decomprimi il devops-cdk-cloudcustodian.zip file (allegato) nella directory di lavoro sul tuo computer locale.

  2. Accedi alla Console di AWS gestione per il tuo account di sicurezza, apri la CodeCommit console e crea un nuovo devops-cdk-cloudcustodian repository.

  3. Passa alla directory del progetto e configura il CodeCommit repository come origine, esegui il commit delle modifiche e quindi inviale al ramo di origine eseguendo i seguenti comandi:

  • cd devops-cdk-cloudcustodian 

  • git init --initial-branch=main

  • git add . git commit -m 'initial commit' 

  • git remote add origin https://git-codecommit.us-east-1.amazonaws.com/v1/devops-cdk-cloudcustodian 

  • git push origin main

Per ulteriori informazioni su questo argomento, consulta Creazione di un CodeCommit repository nella AWS CodeCommit documentazione.

Developer

Installa gli strumenti richiesti.

Usa il install-prerequisites.sh file per installare tutti gli strumenti necessari su Amazon Linux. Questo non include AWS CLI perché è preinstallato.

Per ulteriori informazioni su questo argomento, consulta la sezione Prerequisiti di Guida introduttiva AWS CDK alla AWS CDK documentazione.

Developer

Installa i AWS CDK pacchetti richiesti.

  1. Configura il tuo ambiente virtuale eseguendo il seguente comando in AWSCLI: $ python3 -m venv .env

  2. Attiva il tuo ambiente virtuale eseguendo il seguente comando: $ source .env/bin/activate

  3. Dopo l'attivazione dell'ambiente virtuale, installa le dipendenze richieste eseguendo il comando seguente: $ pip install -r requirements.txt

  4. Per aggiungere dipendenze aggiuntive (ad esempio, altre AWS CDK librerie), aggiungile al requirements.txt file, quindi esegui il comando seguente: pip install -r requirements.txt

I seguenti pacchetti sono richiesti AWS CDK e inclusi nel requirements.txt file:

  • aws-cdk.aws-cloudwatch

  • aws-cdk.aws-codebuild

  • aws-cdk.aws-codecommit

  • aws-cdk.aws-codedeploy

  • aws-cdk.aws-codepipeline

  • aws-cdk.aws-codepipeline-actions

  • aws-cdk.aws-events

  • aws-cdk.aws-events-targets

  • aws-cdk.aws-iam

  • aws-cdk.aws-logs

  • aws-cdk.aws-s3

  • aws-cdk.aws-sns

  • aws-cdk.aws-sns-subscriptions

  • aws-cdk.aws-sqs

  • aws-cdk.core

Developer
AttivitàDescrizioneCompetenze richieste

Aggiorna le variabili richieste.

Apri il vars.py file nella cartella principale del tuo CodeCommit repository e aggiorna le seguenti variabili:

  •  Aggiorna var_deploy_region = ‘us-east-1’ con la AWS regione in cui desideri che venga distribuita la pipeline.

  •  Aggiorna var_codecommit_repo_name = “cdk-cloudcustodian” con il nome del tuo CodeCommit repository.

  •  Aggiorna var_codecommit_branch_name = “main” con il nome del CodeCommit ramo.

  •  Aggiorna var_adminEmail=notifyadmin@email.com’ con l'indirizzo e-mail dell'amministratore che approva le modifiche.

  • Aggiorna var_slackWebHookUrl = https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX 'con il webhook Slack utilizzato per inviare notifiche a Cloud Custodian quando vengono apportate modifiche.

  •  Aggiorna var_orgId = ‘o-yyyyyyyyyy’ con l'ID della tua organizzazione.

  • Aggiorna security_account = ‘123456789011’ con l'AWSID dell'account in cui viene distribuita la pipeline.

  • Aggiorna member_accounts = [‘111111111111’,’111111111112’,’111111111113’] gli account dei membri in cui desideri avviare lo AWS CDK stack e distribuire i ruoli richiesti. IAM

  • Imposta cdk_bootstrap_member_accounts = True su True se desideri che la pipeline si avvii automaticamente nei tuoi account membro. AWS CDK  Se impostato su True questo valore, richiede anche il nome di un IAM ruolo esistente negli account dei membri, che può essere assunto dall'account di sicurezza. Questo IAM ruolo deve inoltre disporre delle autorizzazioni necessarie per avviare il. AWS CDK

  • Aggiorna cdk_bootstrap_role = ‘AWSControlTowerExecution’ con il IAM ruolo esistente negli account dei membri che può essere assunto dall'account di sicurezza. Questo ruolo deve inoltre essere autorizzato a eseguire il bootstrap di AWSCDK. Nota: Questo vale solo se cdk_bootstrap_member_accounts è impostato su. True

Developer

Aggiorna il file account.yml con le informazioni sull'account del membro.

Per eseguire lo strumento c7n-org Cloud Custodian su più account, è necessario inserire il file di accounts.yml configurazione nella radice del repository. Di seguito è riportato un esempio di file di configurazione di Cloud Custodian per: AWS

accounts: - account_id: '123123123123' name: account-1 regions: - us-east-1 - us-west-2 role: arn:aws:iam::123123123123:role/CloudCustodian vars: charge_code: xyz tags: - type:prod - division:some division - partition:us - scope:pci
Developer
AttivitàDescrizioneCompetenze richieste

Potenzia l'account di sicurezza.

Avvia il programma deploy_account con l'cloudcustodian_stackapplicazione eseguendo il seguente comando:

cdk bootstrap -a 'python3 cloudcustodian/cloudcustodian_stack.py
Developer

Opzione 1 - Avvia automaticamente gli account dei membri.

Se la cdk_bootstrap_member_accounts variabile è impostata su True nel vars.py file, gli account specificati nella member_accounts variabile vengono automaticamente avviati dalla pipeline.

Se necessario, puoi eseguire l'aggiornamento *cdk_bootstrap_role* con un IAM ruolo che puoi assumere dall'account di sicurezza e che disponga delle autorizzazioni necessarie per avviare il. AWS CDK

I nuovi account aggiunti alla member_accounts  variabile vengono automaticamente avviati dalla pipeline in modo da poter distribuire i ruoli richiesti.

Developer

Opzione 2: avvia manualmente gli account dei membri.

Sebbene non sia consigliabile utilizzare questo approccio, puoi impostare il valore di cdk_bootstrap_member_accounts to False ed eseguire questo passaggio manualmente eseguendo il comando seguente:

$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \ --trust {security_account_id} \ --context assume-role-credentials:writeIamRoleName={role_name} \ --context assume-role-credentials:readIamRoleName={role_name} \ --mode=ForWriting \ --context bootstrap=true \ --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Importante: assicurati di aggiornare i {role_name} valori {security_account_id} and con il nome di un IAM ruolo che puoi assumere dall'account di sicurezza e che disponga delle autorizzazioni necessarie per avviare il. AWS CDK

Puoi anche utilizzare altri approcci per avviare gli account dei membri, ad esempio con. AWS CloudFormation Per ulteriori informazioni su questo argomento, consulta Bootstrapping nella documentazione. AWS CDK

Developer
AttivitàDescrizioneCompetenze richieste

Crea i IAM ruoli negli account dei membri.

Esegui il comando seguente per distribuire lo member_account_roles_stack stack e creare IAM i ruoli negli account dei membri:

cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never
Developer

Implementa lo stack di pipeline Cloud Custodian.

Esegui il comando seguente per creare la cloudcustodian_stack.py pipeline Cloud Custodian da distribuire nell'account di sicurezza:

cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'
Developer

Risorse correlate

Allegati

Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip