

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

# Gestisci AWS Organizations le policy come codice utilizzando AWS CodePipeline Amazon Bedrock
<a name="manage-organizations-policies-as-code"></a>

*André Cavalcante e Mariana Pessoa de Queiroz, Amazon Web Services*

## Riepilogo
<a name="manage-organizations-policies-as-code-summary"></a>

Puoi utilizzare *le politiche di autorizzazione* per configurare e gestire centralmente AWS Organizations l'accesso ai principali e alle risorse nei tuoi account membro. [Le politiche di controllo dei servizi (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) definiscono le autorizzazioni massime disponibili per i ruoli e gli utenti AWS Identity and Access Management (IAM) dell'organizzazione. [Le politiche di controllo delle risorse (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) definiscono le autorizzazioni massime disponibili per le risorse dell'organizzazione.

Questo modello consente di gestire SCPs e utilizzare l'infrastruttura RCPs come codice (IaC) da implementare attraverso una pipeline di integrazione e distribuzione continue (CI/CD). Utilizzando AWS CloudFormation o Hashicorp Terraform per gestire queste politiche, è possibile ridurre l'onere associato alla creazione e al mantenimento di più politiche di autorizzazione.

Questo modello include le seguenti funzionalità:
+ È possibile creare, eliminare e aggiornare le politiche di autorizzazione utilizzando *i file manifest* (`scp-management.json`and`rcp-management.json`).
+ Si lavora con i guardrail anziché con le politiche. Definisci i tuoi guardrail e i loro obiettivi nei file manifest.
+ La pipeline, che utilizza AWS CodeBuild e AWS CodePipeline, unisce e ottimizza i guardrail nei file manifest. Per ogni istruzione nel file manifest, la pipeline combina i guardrail in un unico SCP o RCP e quindi lo applica ai target definiti.
+ AWS Organizations applica le politiche ai tuoi obiettivi. Un *obiettivo* può essere un' Account AWS unità organizzativa (OU), un ambiente (che è un gruppo di account o OUs definito nel `environments.json` file) o un gruppo di account che condividono un [AWS tag](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html).
+ Amazon Bedrock legge i log della pipeline e riepiloga tutte le modifiche alle policy.
+ La pipeline richiede un'approvazione manuale. L'approvatore può consultare il riepilogo esecutivo preparato da Amazon Bedrock, che lo aiuta a comprendere le modifiche.

## Prerequisiti e limitazioni
<a name="manage-organizations-policies-as-code-prereqs"></a>

**Prerequisiti**
+ Molteplici Account AWS che vengono gestiti come organizzazione in. AWS Organizations Per ulteriori informazioni, vedere [Creazione di un'organizzazione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Le funzionalità SCP e RCP sono abilitate in. AWS Organizations Per ulteriori informazioni, vedere [Abilitazione di un tipo di policy](https://docs.aws.amazon.com/organizations/latest/userguide/enable-policy-type.html).
+ [È installata la versione 1.9.8 o successiva di Terraform.](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ Se non stai distribuendo questa soluzione tramite una pipeline Terraform, il file di stato Terraform deve essere archiviato [in](https://developer.hashicorp.com/terraform/language/backend/s3) un bucket Amazon Simple Storage Service (Amazon S3) nella pipeline di gestione delle policy in Account AWS cui stai distribuendo.
+ [È installata la versione 3.13.3 o successiva di Python.](https://www.python.org/downloads/)

**Limitazioni**
+ Non è possibile utilizzare questo pattern per gestire SCPs o RCPs che sono stati creati al di fuori di questa pipeline. CI/CD Tuttavia, è possibile ricreare le politiche esistenti tramite la pipeline. Per ulteriori informazioni, consulta *Migrazione delle politiche esistenti nella pipeline* nella sezione [Informazioni aggiuntive](#manage-organizations-policies-as-code-additional) di questo modello.
+ Il numero di account e OUs le politiche di ciascun account sono soggetti alle [quote e ai limiti di servizio](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html) per. AWS Organizations
+ Questo modello non può essere utilizzato per configurare [le politiche di gestione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_management_policies.html) in AWS Organizations, ad esempio, le politiche di backup, le politiche dei tag, le politiche delle applicazioni di chat o le politiche dichiarative.

## Architecture
<a name="manage-organizations-policies-as-code-architecture"></a>

Il diagramma seguente mostra il flusso di lavoro della pipeline di gestione delle policy e le risorse associate.

![\[Rilascio SCPs e RCPs tramite una pipeline di gestione delle politiche.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/372a1ace-5b2e-4f93-9f88-b5b0519ded48/images/a2cceb99-2b93-48e0-b072-bc61a572201f.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Un utente esegue il commit delle modifiche ai file `scp-management.json` o `rcp-management.json` manifest nel ramo principale del repository remoto.

1. La modifica al `main` ramo avvia la pipeline. AWS CodePipeline

1. CodePipeline avvia il progetto. `Validate-Plan` CodeBuild Questo progetto utilizza uno script Python nel repository remoto per convalidare le politiche e i file manifest delle politiche. Questo CodeBuild progetto fa quanto segue:

   1. Verifica che i file manifest SCP e RCP contengano un'istruzione univoca IDs ()`Sid`.

   1. Utilizza gli script `scp-policy-processor/main.py` e `rcp-policy-processor/main.py` Python per concatenare i guardrail nella cartella guardrails in un'unica politica RCP o SCP. Combina guardrail che hanno lo stesso valore, e. `Resource` `Action` `Condition`

   1. Viene utilizzato AWS Identity and Access Management Access Analyzer per convalidare la politica finale ottimizzata. Se ci sono dei risultati, la pipeline si arresta.

   1. Crea `scps.json` e `rcps.json` archivia, che Terraform utilizza per creare risorse.

   1. Esegue il `terraform plan` comando, che crea un piano di esecuzione Terraform.

1. (Facoltativo) Il `Validate-Plan` CodeBuild progetto utilizza lo `bedrock-prompt/prompt.py` script per inviare un prompt ad Amazon Bedrock. Il prompt viene definito nel file. `bedrock-prompt/prompt.txt` Amazon Bedrock utilizza Anthropic Claude Sonnet 3.5 per generare un riepilogo delle modifiche proposte analizzando i log Terraform e Python.

1. CodePipeline utilizza un argomento Amazon Simple Notification Service (Amazon SNS) per notificare agli approvatori che le modifiche devono essere riviste. Se Amazon Bedrock ha generato un riepilogo delle modifiche, la notifica include questo riepilogo.

1. Un approvatore della politica approva l'azione in. CodePipeline Se Amazon Bedrock ha generato un riepilogo delle modifiche, l'approvatore può esaminarlo CodePipeline prima dell'approvazione.

1. CodePipeline avvia il progetto. `Apply` CodeBuild Questo progetto utilizza Terraform per applicare le modifiche RCP e SCP in. AWS Organizations

Il modello IaC associato a questa architettura implementa anche le seguenti risorse che supportano la pipeline di gestione delle politiche:
+ Un bucket Amazon S3 per l'archiviazione di CodePipeline artefatti e script, come e `scp-policy-processor/main.py` `bedrock-prompt/prompt.py`
+ Una chiave AWS Key Management Service (AWS KMS) che crittografa le risorse create da questa soluzione

## Tools (Strumenti)
<a name="manage-organizations-policies-as-code-tools"></a>

**Servizi AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) è un servizio di intelligenza artificiale completamente gestito che rende disponibili molti modelli di base ad alte prestazioni da utilizzare tramite un'API unificata.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione. 
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)è un servizio di gestione degli account che consente di consolidare più account Account AWS in un'organizzazione creata e gestita centralmente.
+ [AWS SDK per Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)è un kit di sviluppo software che ti aiuta a integrare la tua applicazione, libreria o script Python con. Servizi AWS
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

**Altri strumenti**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento IaC che ti aiuta a utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

**Deposito di codici**

Il codice per questo pattern è disponibile nel [organizations-policy-pipeline](https://github.com/aws-samples/organizations-policy-pipeline) GitHub repository. Di seguito sono riportati i file chiave contenuti nella `sample-repository` cartella:
+ Nella `environments` cartella, `environments.json` contiene un elenco di ambienti. *Gli ambienti* sono un gruppo di obiettivi e possono contenere Account AWS IDs o unità organizzative (OUs).
+ Nella `rcp-management` cartella:
  + La `guardrails` cartella contiene i parapetti individuali per il tuo RCPs
  + La `policies` cartella contiene l'individuo RCPs
  + Il file `rcp-management.json` manifest consente di gestire i guardrail RCP RCPs, full e gli obiettivi associati.
+ Nella cartella: `scp-management`
  + La `guardrails` cartella contiene i parapetti individuali per il tuo SCPs
  + La `policies` cartella contiene l'individuo SCPs
  + Il file `scp-management.json` manifest consente di gestire i guardrail SCP SCPs, completi e gli obiettivi associati.
+ La `utils` cartella contiene script che possono aiutarvi a migrare quelli attuali SCPs e RCPs a gestirli attraverso la pipeline. Per ulteriori informazioni, vedere la sezione [Informazioni aggiuntive](#manage-organizations-policies-as-code-additional) di questo modello.

## Best practice
<a name="manage-organizations-policies-as-code-best-practices"></a>
+ Prima di configurare la pipeline, ti consigliamo di verificare di non aver raggiunto i limiti delle tue AWS Organizations [quote](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html).
+ Ti consigliamo di utilizzare l'account di AWS Organizations gestione solo per le attività che devono essere eseguite in quell'account. Per ulteriori informazioni, consulta [Best practice per l'account di gestione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html#bp_mgmt-acct_use-mgmt).

## Epiche
<a name="manage-organizations-policies-as-code-epics"></a>

### Configura l'account di destinazione
<a name="set-up-the-target-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creare un repository . | Crea un repository da cui il tuo team addetto alle operazioni di sicurezza gestirà le politiche. [Utilizza uno dei fornitori di repository di terze parti che AWS CodeConnections supportano.](https://docs.aws.amazon.com/dtconsole/latest/userguide/supported-versions-connections.html) | DevOps ingegnere | 
| Delegare l'amministrazione delle politiche. | Delega l'amministrazione delle AWS Organizations politiche all'account membro in cui stai distribuendo la pipeline. Per istruzioni, consulta [Creare una politica di delega basata sulle risorse](https://docs.aws.amazon.com/organizations/latest/userguide/orgs-policy-delegate.html) con. AWS Organizations Per una politica di esempio, vedi *Esempio di politica di delega basata sulle risorse nella sezione Informazioni* [aggiuntive](#manage-organizations-policies-as-code-additional) di questo modello. | Amministratore AWS | 
| (Facoltativo) Abilita il modello di base. | Se desideri generare riepiloghi delle modifiche alle policy, abilita l'accesso al modello di base Anthropic Claude 3.5 Sonnet in Amazon Bedrock nel luogo in Account AWS cui stai distribuendo la pipeline. Per istruzioni, consulta [Aggiungere o rimuovere l'accesso ai modelli Amazon Bedrock Foundation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html). | Informazioni generali su AWS | 

### Implementa le risorse per la pipeline
<a name="deploy-the-resources-for-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Inserisci il seguente comando da cui clonare il [organizations-policy-pipeline ](https://github.com/aws-samples/organizations-policy-pipeline)repository: GitHub`git clone https://github.com/aws-samples/organizations-policy-pipeline.git` | DevOps ingegnere | 
| Definisci il tuo metodo di implementazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingegnere | 
| Implementa la pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingegnere, Terraform | 
| Connect il repository remoto. | Nel passaggio precedente, Terraform ha creato una CodeConnections connessione al repository di terze parti. Nella [console AWS Developer Tools](https://console.aws.amazon.com/codesuite/settings/connections), modifica lo stato della connessione da a`PENDING`. `AVAILABLE` Per istruzioni, consulta [Aggiornare una connessione in sospeso.](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html) | AWS DevOps | 
| Iscriviti all'argomento Amazon SNS. | Terraform ha creato un argomento Amazon SNS. Sottoscrivi un endpoint all'argomento e conferma l'iscrizione in modo che gli approvatori ricevano notifiche sulle azioni di approvazione in sospeso nella pipeline. Per istruzioni, consulta l'[argomento Creazione di un abbonamento a un Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html). | Informazioni generali su AWS | 

### Definisci i tuoi limiti e le tue politiche
<a name="define-your-guardrails-and-policies"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Popola il repository remoto. | Dal repository clonato, copia il contenuto della `sample-repository` cartella nel tuo repository remoto. Sono incluse le cartelle`environments`,`rcp-management`, `scp-management` e. `utils` | DevOps ingegnere | 
| Definisci i tuoi ambienti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingegnere | 
| Definisci i tuoi guardrail. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingegnere | 
| Definisci le tue politiche. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingegnere | 

### Usa il file manifest per gestire le politiche
<a name="use-the-manifest-file-to-manage-the-policies"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura i file manifest. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingegnere | 
| Avvia la pipeline. | Conferma e invia le modifiche al ramo del repository remoto che hai definito nel `variables.tf` file. In genere, questo è il `main` ramo. La CI/CD pipeline si avvia automaticamente. Se sono presenti errori nella pipeline, consultate la sezione [Risoluzione dei problemi](#manage-organizations-policies-as-code-troubleshooting) di questo modello. | DevOps ingegnere | 
| Approva le modifiche. | Una volta completato il `Validate-Plan` CodeBuild progetto, gli approvatori delle politiche ricevono una notifica tramite l'argomento Amazon SNS che hai configurato in precedenza. Esegui questa operazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | AWS generale, responsabile dell'approvazione delle politiche | 
| Convalida la distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | Informazioni generali su AWS | 

## risoluzione dei problemi
<a name="manage-organizations-policies-as-code-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Errori manifesti nei file nella `Validate-Plan` fase della pipeline | Se sono presenti errori nei file or, nell'output della pipeline viene visualizzato un messaggio «Errori della pipeline nella fase di convalida e pianificazione per i file manifest». `scp-management.json` `rcp-management.json` I possibili errori includono un nome di ambiente errato, campi o valori duplicati SIDs o non validi. Esegui questa operazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | 
| I risultati di IAM Access Analyzer nella `Validate-Plan` fase della pipeline | Un messaggio «Risultati di IAM Access Analyzer durante la fase di convalida e pianificazione» viene visualizzato nell'output della pipeline in caso di errori nel guardrail o nelle definizioni delle policy. Questo modello utilizza IAM Access Analyzer per convalidare la policy finale. Esegui questa operazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | 

## Risorse correlate
<a name="manage-organizations-policies-as-code-resources"></a>
+ [Riferimento agli elementi della policy JSON (documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) IAM)
+ [Politiche di controllo delle risorse](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) (AWS Organizations documentazione)
+ [Politiche di controllo dei servizi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (AWS Organizations documentazione)
+ [Aggiungere o rimuovere l'accesso ai modelli Amazon Bedrock Foundation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) (documentazione Amazon Bedrock)
+ [Approva o rifiuta un'azione di approvazione in](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-approve-or-reject.html) (documentazione) CodePipeline CodePipeline 

## Informazioni aggiuntive
<a name="manage-organizations-policies-as-code-additional"></a>

**Esempio di politica di delega basata sulle risorse**

Di seguito è riportato un esempio di politica di delega basata sulle risorse per. AWS Organizations Consente all'account di amministrazione delegato di gestire SCPs e per l'organizzazione. RCPs Nel seguente esempio di policy, sostituiscilo `<MEMBER_ACCOUNT_ID>` con l'ID dell'account su cui stai distribuendo la pipeline di gestione delle policy.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DelegationToAudit",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<MEMBER_ACCOUNT_ID>:root"
      },
      "Action": [
        "organizations:ListTargetsForPolicy",
        "organizations:CreatePolicy",
        "organizations:DeletePolicy",
        "organizations:AttachPolicy",
        "organizations:DetachPolicy",
        "organizations:DisablePolicyType",
        "organizations:EnablePolicyType",
        "organizations:UpdatePolicy",
        "organizations:DescribeEffectivePolicy",
        "organizations:DescribePolicy",
        "organizations:DescribeResourcePolicy"
      ],
      "Resource": "*"
    }
  ]
}
```

**Migrazione delle politiche esistenti nella pipeline**

Se ne hai esistenti SCPs o RCPs desideri migrare e gestire tramite questa pipeline, puoi usare gli script Python `sample-repository/utils` nella cartella del repository del codice. Questi script includono:
+ `check-if-scp-exists-in-env.py`— Questo script verifica se una politica specificata si applica a qualsiasi destinazione in un ambiente specifico, definito nel `environments.json` file. Immettete il seguente comando per eseguire questo script:

  ```
  python3 check-if-scp-exists-in-env.py \
     --policy-type <POLICY_TYPE> \
     --policy-name <POLICY_NAME> \
     --env-id <ENV_ID>
  ```

  Sostituisci quanto segue in questo comando:
  + `<POLICY_TYPE>` è `scp` o `rcp`
  + `<POLICY_NAME>`è il nome dell'SCP o dell'RCP
  + `<ENV_ID>`è l'ID dell'ambiente definito nel file `environments.json`
+ `create-environments.py`— Questo script crea un file environments.json basato sull'ambiente corrente SCPs e RCPs su quello esistente. Sono escluse le politiche implementate tramite. AWS Control Tower Immettere il seguente comando per eseguire questo script, dove `<POLICY_TYPE>` è `scp` o: `rcp`

  ```
  python create-environments.py --policy-type <POLICY_TYPE>
  ```
+ `verify-policies-capacity.py`— Questo script controlla ogni ambiente definito per determinare la quantità di capacità residua per ogni quota AWS Organizations relativa alle politiche. L'utente definisce gli ambienti in cui archiviare il file in`environments.json`. Immettete il seguente comando per eseguire questo script, dove `<POLICY_TYPE>` è `scp` o`rcp`:

  ```
  python verify-policies-capacity.py --policy-type <POLICY_TYPE>
  ```