

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 gestita da AWS per Systems Manager ai profili di EC2 istanza utilizzando Cloud Custodian e AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour e Aaron Lennon, Amazon Web Services*

## Riepilogo
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Puoi integrare le istanze Amazon Elastic Compute Cloud (Amazon EC2) con AWS Systems Manager per automatizzare le attività operative e fornire maggiore visibilità e controllo. Per integrarsi con Systems Manager, EC2 le istanze devono avere una policy [AWS Systems Manager Agent (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) installata e una policy `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) allegata ai profili delle istanze. 

Tuttavia, se vuoi assicurarti che tutti i profili di EC2 istanza abbiano la `AmazonSSMManagedInstanceCore` policy allegata, puoi 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 policy su più account Amazon Web Services (AWS) e regioni AWS.

Questo modello aiuta a risolvere queste sfide implementando tre policy [Cloud Custodian](https://cloudcustodian.io/) nei tuoi account AWS:
+ La prima policy di Cloud Custodian verifica EC2 le istanze esistenti che hanno 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 Cloud Custodian crea funzioni [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) nei tuoi account per monitorare la creazione EC2 di istanze e profili di istanze. Ciò garantisce che la `AmazonSSMManagedInstanceCore` policy venga allegata automaticamente quando viene creata un' EC2 istanza.

Questo modello utilizza DevOps gli strumenti [AWS](https://aws.amazon.com/devops/) per ottenere una distribuzione continua e su larga scala delle policy di Cloud Custodian in un ambiente multi-account, senza fornire un ambiente di calcolo separato. 

## Prerequisiti e limitazioni
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Prerequisiti**
+ Due o più account AWS attivi. Un account è l'*account di sicurezza* e gli altri sono *account membri*.
+ Autorizzazioni per il provisioning di risorse AWS nell'account di sicurezza. Questo modello utilizza [le autorizzazioni di amministratore](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), ma è necessario concedere le autorizzazioni in base ai requisiti e alle politiche dell'organizzazione.
+ Capacità di assumere un ruolo IAM dall'account di sicurezza agli account dei membri e creare i ruoli IAM richiesti. Per ulteriori informazioni su questo argomento, consulta [Delegare l'accesso tra account AWS utilizzando i ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) nella documentazione IAM.
+ 
**Importante**  
AWS Command Line Interface (AWS CLI), installata e configurata. A scopo di test, puoi configurare AWS CLI utilizzando il `aws configure` comando o impostando le variabili di ambiente. : Questa opzione non è consigliata per gli ambienti di produzione e consigliamo di concedere a questo account solo l'accesso con il minimo privilegio. Per ulteriori informazioni su questo argomento, consulta [Concedere il privilegio minimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) nella documentazione IAM.
+ Il `devops-cdk-cloudcustodian.zip` file (allegato), scaricato sul computer locale.
+ Familiarità con Python.
+ Gli strumenti richiesti (Node.js, AWS Cloud Development Kit (AWS CDK) e Git), installati e configurati. Puoi 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, assicurati che tutti i ruoli e le policy IAM soddisfino i requisiti e le policy della tua 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
+ `npm`versione 7.6.1 o successiva
+ AWS CDK versione 1.96.0 o successiva

## Architecture
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

Il diagramma mostra il flusso di lavoro seguente:

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

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

1. 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`

1. 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 CI/CD pipeline che utilizza CodePipeline per orchestrare la creazione e il test del codice sorgente CodeBuild, oltre alla distribuzione delle risorse AWS con gli stack AWS. CloudFormation Puoi utilizzare questo modello per tutti gli account dei membri e le regioni della tua organizzazione. Puoi anche estendere lo `Roles creation` stack per distribuire altri ruoli IAM nei tuoi account membro. 

## Tools (Strumenti)
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) è un framework di sviluppo software per definire l'infrastruttura cloud nel codice e fornirla tramite AWS. CloudFormation
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che consente di interagire con i servizi AWS utilizzando i comandi nella shell della riga di comando.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito nel cloud.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che puoi utilizzare per archiviare e gestire risorse in modo privato.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) è un servizio di distribuzione continua che puoi utilizzare per modellare, visualizzare e automatizzare i passaggi necessari per rilasciare il tuo software.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) è un servizio Web che ti aiuta a controllare in modo sicuro l'accesso alle risorse AWS.
+ [Cloud Custodian](https://cloudcustodian.io/) è 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](https://nodejs.org/en/) è 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
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Configura la pipeline con AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il CodeCommit repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Per ulteriori informazioni su questo argomento, consulta [Creazione di un CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) nella CodeCommit documentazione AWS. | Developer | 
| Installa gli strumenti richiesti. | Usa il `install-prerequisites.sh` file per installare tutti gli strumenti necessari su Amazon Linux. Questo non include la CLI di AWS perché è preinstallata.Per ulteriori informazioni su questo argomento, consulta la sezione [Prerequisiti](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) di [Getting started with the AWS CDK nella documentazione](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) di AWS CDK. | Developer | 
| Installa i pacchetti AWS CDK richiesti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)I seguenti pacchetti sono richiesti da AWS CDK e sono inclusi nel `requirements.txt` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 

### Configura il tuo ambiente
<a name="configure-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna le variabili richieste. | Apri il `vars.py` file nella cartella principale del tuo CodeCommit repository e aggiorna le seguenti variabili:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 
| Aggiorna il file account.yml con le informazioni sull'account del membro. | Per eseguire lo strumento [c7n-org Cloud Custodian](https://cloudcustodian.io/docs/tools/c7n-org.html) 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:<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Developer | 

### Esegui il bootstrap degli account AWS
<a name="bootstrap-the-aws-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Potenzia l'account di sicurezza. | Avvia il programma `deploy_account` con l'`cloudcustodian_stack`applicazione eseguendo il seguente comando:<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | 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 ruolo IAM che puoi assumere dall'account di sicurezza e che dispone delle autorizzazioni necessarie per avviare il CDK AWS.I nuovi account aggiunti alla `member_accounts ` variabile vengono avviati automaticamente 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:<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Assicurati di aggiornare `{role_name}` i valori `{security_account_id}` and con il nome di un ruolo IAM che puoi assumere dall'account di sicurezza e che disponga delle autorizzazioni necessarie per avviare il CDK AWS.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](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) di AWS CDK. | Developer | 

### Implementa gli stack CDK AWS
<a name="deploy-the-aws-cdk-stacks"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea i ruoli IAM negli account dei membri. | Esegui il comando seguente per distribuire lo `member_account_roles_stack` stack e creare i ruoli IAM negli account dei membri:<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | 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:<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Developer | 

## Risorse correlate
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Guida introduttiva alla CDK AWS](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Allegati
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)