

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerencie AWS Organizations políticas como código usando o AWS CodePipeline Amazon Bedrock
<a name="manage-organizations-policies-as-code"></a>

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

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

Você pode usar *políticas de autorização* AWS Organizations para configurar e gerenciar centralmente o acesso de diretores e recursos em suas contas de membros. [As políticas de controle de serviço (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) definem o máximo de permissões disponíveis para as funções e usuários AWS Identity and Access Management (IAM) em sua organização. [As políticas de controle de recursos (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) definem o máximo de permissões disponíveis para recursos em sua organização.

Esse padrão ajuda você a gerenciar SCPs e criar uma infraestrutura RCPs como código (IaC) que você implanta por meio de um pipeline de integração contínua e implantação contínua (CI/CD). Ao usar o AWS CloudFormation Hashicorp Terraform para gerenciar essas políticas, você pode reduzir a carga associada à criação e manutenção de várias políticas de autorização.

Este padrão inclui os seguintes recursos:
+ Você cria, exclui e atualiza as políticas de autorização usando *arquivos de manifesto* (`scp-management.json` e `rcp-management.json`).
+ Você trabalha com barreiras de proteção, em vez de políticas. Você define suas barreiras de proteção e destinos nos arquivos de manifesto.
+ O pipeline, que usa AWS CodeBuild e AWS CodePipeline, mescla e otimiza as grades de proteção nos arquivos de manifesto. Para cada instrução no arquivo de manifesto, o pipeline combina as barreiras de proteção em uma única SCP ou RCP e as aplica aos destinos definidos.
+ AWS Organizations aplica as políticas às suas metas. Um *destino* pode ser uma Conta da AWS unidade organizacional (OU), um ambiente (que é um grupo de contas ou OUs que você define no `environments.json` arquivo) ou um grupo de contas que compartilham uma [AWS tag](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html).
+ O Amazon Bedrock lê os logs do pipeline e resume todas as mudanças na política.
+ O pipeline requer uma aprovação manual. O aprovador pode revisar o resumo executivo que o Amazon Bedrock preparou, o que o ajuda a entender as mudanças.

## Pré-requisitos e limitações
<a name="manage-organizations-policies-as-code-prereqs"></a>

**Pré-requisitos **
+ Vários Contas da AWS que são gerenciados como uma organização em AWS Organizations. Para obter mais informações, consulte [Criar uma organização](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Os recursos SCP e RCP estão habilitados em. AWS Organizations Para obter mais informações, consulte [Enabling a policy type](https://docs.aws.amazon.com/organizations/latest/userguide/enable-policy-type.html).
+ Terraform versão 1.9.8 ou posterior [instalado](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Se você não estiver implantando essa solução por meio de um pipeline do Terraform, o arquivo de estado do Terraform deverá ser [armazenado](https://developer.hashicorp.com/terraform/language/backend/s3) em um bucket do Amazon Simple Storage Service (Amazon S3) no local em que você está implantando Conta da AWS o pipeline de gerenciamento de políticas.
+ Python versão 3.13.3 ou posterior [instalado](https://www.python.org/downloads/).

**Limitações**
+ Você não pode usar esse padrão para gerenciar SCPs ou RCPs que foram criados fora desse CI/CD pipeline. No entanto, você pode recriar as políticas existentes por meio do pipeline. Para obter mais informações, consulte *Migrar políticas existentes para o pipeline* na seção [Informações adicionais](#manage-organizations-policies-as-code-additional) deste padrão.
+ O número de contas e políticas em cada conta estão sujeitos às [cotas e aos limites de serviço de](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html). OUs AWS Organizations
+ Esse padrão não pode ser usado para configurar [políticas de gerenciamento](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_management_policies.html) AWS Organizations, como políticas de backup, políticas de tags, políticas de aplicativos de bate-papo ou políticas declarativas.

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

O diagrama a seguir mostra o fluxo de trabalho do pipeline de gerenciamento de políticas e seus recursos associados.

![\[Liberando SCPs e RCPs por meio de um pipeline de gerenciamento de políticas.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/372a1ace-5b2e-4f93-9f88-b5b0519ded48/images/a2cceb99-2b93-48e0-b072-bc61a572201f.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Um usuário confirma as alterações nos arquivos de manifesto `scp-management.json` ou `rcp-management.json` na ramificação principal do repositório remoto.

1. A mudança na `main` ramificação inicia a entrada do pipeline. AWS CodePipeline

1. CodePipeline inicia o `Validate-Plan` CodeBuild projeto. Este projeto usa um script Python no repositório remoto para validar as políticas e os arquivos de manifesto da política. Este CodeBuild projeto faz o seguinte:

   1. Verifica se os arquivos de manifesto SCP e RCP contêm uma instrução exclusiva IDs ()`Sid`.

   1. Usa os scripts Python `scp-policy-processor/main.py` e `rcp-policy-processor/main.py` para concatenar barreiras de proteção na pasta de barreiras de proteção em uma única política de RCP ou SCP. Ele combina as barreiras de proteção que têm o mesmo `Resource`, `Action` e `Condition`.

   1. Usa AWS Identity and Access Management Access Analyzer para validar a política final otimizada. Se houver alguma descoberta, o pipeline é interrompido.

   1. Cria arquivos `scps.json` e `rcps.json`, que o Terraform usa para criar recursos.

   1. Executa o comando `terraform plan`, que cria um plano de execução do Terraform.

1. (Opcional) O `Validate-Plan` CodeBuild projeto usa o `bedrock-prompt/prompt.py` script para enviar uma solicitação ao Amazon Bedrock. Você define o prompt no arquivo `bedrock-prompt/prompt.txt`. O Amazon Bedrock usa o Anthropic Claude Sonnet 3.5 para gerar um resumo das mudanças propostas analisando os logs do Terraform e do Python.

1. CodePipeline usa um tópico do Amazon Simple Notification Service (Amazon SNS) para notificar os aprovadores de que as alterações devem ser revisadas. Se o Amazon Bedrock gerou um resumo da alteração, a notificação incluirá esse resumo.

1. Um aprovador da política aprova a ação em. CodePipeline Se o Amazon Bedrock gerou um resumo da alteração, o aprovador poderá revisar o resumo CodePipeline antes da aprovação.

1. CodePipeline inicia o `Apply` CodeBuild projeto. Este projeto usa o Terraform para aplicar as alterações de RCP e SCP em. AWS Organizations

O modelo de IaC associado a essa arquitetura também implanta os seguintes recursos que dão suporte ao pipeline de gerenciamento de políticas:
+ Um bucket do Amazon S3 para armazenar CodePipeline artefatos e scripts, como e `scp-policy-processor/main.py` `bedrock-prompt/prompt.py`
+ Uma chave AWS Key Management Service (AWS KMS) que criptografa os recursos criados por essa solução

## Ferramentas
<a name="manage-organizations-policies-as-code-tools"></a>

**Serviços da AWS**
+ O [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) é um serviço de IA totalmente gerenciado que disponibiliza modelos de base de alta performance para uso por meio de uma API unificada.
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação. 
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)é um serviço de gerenciamento de contas que ajuda você a consolidar várias Contas da AWS em uma organização que você cria e gerencia centralmente.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Outras ferramentas**
+ [HashiCorp O Terraform](https://www.terraform.io/docs) é uma ferramenta de IaC que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.

**Repositório de código**

O código desse padrão está disponível no [organizations-policy-pipeline](https://github.com/aws-samples/organizations-policy-pipeline) GitHub repositório. Seguem abaixo os arquivos de chaves que estão incluídos na pasta `sample-repository`:
+ Na pasta `environments`, `environments.json` contém uma lista de ambientes. Os *ambientes* são um grupo de alvos e podem conter Conta da AWS IDs nossas unidades organizacionais (OUs).
+ Na pasta `rcp-management`:
  + A `guardrails` pasta contém as grades de proteção individuais para seu RCPs
  + A `policies` pasta contém o indivíduo RCPs
  + O arquivo de `rcp-management.json` manifesto ajuda você a gerenciar grades de proteção completas RCPs do RCP e seus alvos associados.
+ Na pasta `scp-management`:
  + A `guardrails` pasta contém as grades de proteção individuais para seu SCPs
  + A `policies` pasta contém o indivíduo SCPs
  + O arquivo de `scp-management.json` manifesto ajuda você a gerenciar as grades de proteção completas SCPs do SCP e seus alvos associados.
+ A `utils` pasta contém scripts que podem ajudar você a migrar seus arquivos atuais SCPs RCPs para que você possa gerenciá-los por meio do pipeline. Para obter mais informações, consulte a seção [Informações adicionais](#manage-organizations-policies-as-code-additional) desse padrão.

## Práticas recomendadas
<a name="manage-organizations-policies-as-code-best-practices"></a>
+ Antes de configurar o pipeline, recomendamos que você verifique se não atingiu os limites de suas AWS Organizations [cotas](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html).
+ Recomendamos que você use a conta AWS Organizations de gerenciamento somente para tarefas que devem ser executadas nessa conta. Para obter mais informações, consulte [Best practices for the management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html#bp_mgmt-acct_use-mgmt).

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

### Configurar a conta de destino
<a name="set-up-the-target-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um repositório. | Crie um repositório por meio do qual sua equipe de operações de segurança gerenciará as políticas. Use um dos provedores de repositórios terceirizados que oferecem Conexões de código da AWS [suporte](https://docs.aws.amazon.com/dtconsole/latest/userguide/supported-versions-connections.html). | DevOps engenheiro | 
| Delegue a administração de políticas. | Delegue a administração das AWS Organizations políticas à conta do membro em que você está implantando o pipeline. Para obter instruções, consulte [Criar uma política de delegação baseada em recursos](https://docs.aws.amazon.com/organizations/latest/userguide/orgs-policy-delegate.html) com. AWS Organizations Para ver um exemplo de política, consulte *Exemplo de política de delegação baseada em recursos* na seção [Informações adicionais](#manage-organizations-policies-as-code-additional) deste padrão. | Administrador da AWS | 
| (Opcional) Habilite o modelo de base. | Se você quiser gerar resumos das mudanças na política, habilite o acesso ao modelo de fundação Anthropic Claude 3.5 Sonnet no Amazon Bedrock, Conta da AWS onde você está implantando o pipeline. Para obter instruções, consulte [Add or remove access to Amazon Bedrock foundation models](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html). | AWS geral | 

### Implantar os recursos para o pipeline
<a name="deploy-the-resources-for-the-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Digite o comando a seguir para clonar o [organizations-policy-pipeline ](https://github.com/aws-samples/organizations-policy-pipeline)repositório: GitHub`git clone https://github.com/aws-samples/organizations-policy-pipeline.git` | DevOps engenheiro | 
| Defina seu método de implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps engenheiro | 
| Implante o pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps engenheiro, Terraform | 
| Conecte o repositório remoto. | Na etapa anterior, o Terraform criou uma CodeConnections conexão com o repositório de terceiros. No [console do AWS Developer Tools](https://console.aws.amazon.com/codesuite/settings/connections), altere o status da conexão de `PENDING` para `AVAILABLE`. Para obter instruções, consulte [Update a pending connection](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html). | AWS DevOps | 
| Assine o tópico do Amazon SNS. | O Terraform criou um tópico do Amazon SNS. Inscreva um endpoint no tópico e confirme a assinatura para que os aprovadores recebam notificações sobre ações de aprovação pendentes no pipeline. Para obter instruções, consulte [Creating a subscription to an Amazon SNS topic](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html). | AWS geral | 

### Definir suas barreiras de proteção e políticas
<a name="define-your-guardrails-and-policies"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Preencha o repositório remoto. | Do repositório clonado, copie o conteúdo da pasta `sample-repository` para o seu repositório remoto. Isso inclui as pastas `environments`, `rcp-management`, `scp-management` and `utils`. | DevOps engenheiro | 
| Defina seus ambientes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps engenheiro | 
| Defina suas barreiras de proteção. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps engenheiro | 
| Defina suas políticas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps engenheiro | 

### Usar o arquivo de manifesto para gerenciar as políticas
<a name="use-the-manifest-file-to-manage-the-policies"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure os arquivos de manifesto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps engenheiro | 
| Iniciar o pipeline. | Confirme e envie as alterações para a ramificação do repositório remoto que você definiu no arquivo `variables.tf`. Normalmente, essa é a ramificação `main`. O CI/CD pipeline é iniciado automaticamente. Se houver algum erro de pipeline, consulte a seção [Solução de problemas](#manage-organizations-policies-as-code-troubleshooting) deste padrão. | DevOps engenheiro | 
| Aprove as mudanças. | Quando o `Validate-Plan` CodeBuild projeto estiver concluído, os aprovadores da política receberão uma notificação por meio do tópico do Amazon SNS que você configurou anteriormente. Faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | AWS geral, aprovador de políticas | 
| Valide a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | AWS geral | 

## Solução de problemas
<a name="manage-organizations-policies-as-code-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erros do arquivo de manifesto na fase `Validate-Plan` do pipeline | Uma mensagem “Erros de pipeline na fase de validação e planejamento para arquivos de manifesto” aparece na saída do pipeline se houver algum erro nos arquivos `scp-management.json` ou `rcp-management.json`. Os possíveis erros incluem um nome de ambiente incorreto, campos ou SIDs valores duplicados ou inválidos. Faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | 
| Descobertas do IAM Access Analyzer na fase `Validate-Plan` do pipeline | Uma mensagem “Descobertas no IAM Access Analyzer durante a fase de validação e planejamento” aparece na saída do pipeline se houver algum erro na barreira de proteção ou nas definições da política. Este padrão usa o IAM Access Analyzer para validar a política final. Faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | 

## Recursos relacionados
<a name="manage-organizations-policies-as-code-resources"></a>
+ [Referência de elementos de política JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) (Documentação do IAM)
+ [Políticas de controle de recursos](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) (AWS Organizations documentação)
+ [Políticas de controle de serviços](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (AWS Organizations documentação)
+ [Adicionar ou remover o acesso aos modelos de base do Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) (documentação do Amazon Bedrock
+ [Aprovar ou rejeitar uma ação de aprovação em CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-approve-or-reject.html) (CodePipeline documentação)

## Mais informações
<a name="manage-organizations-policies-as-code-additional"></a>

**Exemplo de política de delegação baseada em recursos**

Veja a seguir um exemplo de política de delegação baseada em recursos para. AWS Organizations Ele permite que a conta de administrador delegada SCPs gerencie e RCPs para a organização. No exemplo de política a seguir, substitua `<MEMBER_ACCOUNT_ID>` pelo ID da conta em que você está implantando o pipeline de gerenciamento de políticas.

```
{
  "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": "*"
    }
  ]
}
```

**Migrar políticas existentes para o pipeline**

Se você já tiver SCPs ou RCPs quiser migrar e gerenciar por meio desse pipeline, poderá usar os scripts do Python na pasta `sample-repository/utils` do repositório de código. Esses scripts incluem:
+ `check-if-scp-exists-in-env.py`: esse script verifica se uma política especificada se aplica a algum destino em um ambiente específico, que você define no arquivo `environments.json`. Insira o seguinte comando para executar esse script:

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

  Substitua os seguintes valores nesse comando:
  + `<POLICY_TYPE>` é `scp` ou `rcp`
  + `<POLICY_NAME>` é o nome da SCP ou RCP
  + `<ENV_ID>` é o ID do ambiente que você definiu no arquivo `environments.json`
+ `create-environments.py`— Esse script cria um arquivo environments.json com base no atual SCPs e RCPs no seu ambiente. Isso exclui as políticas implantadas por meio de. AWS Control Tower Insira o seguinte comando para executar esse script, onde `<POLICY_TYPE>` é `scp` ou `rcp`:

  ```
  python create-environments.py --policy-type <POLICY_TYPE>
  ```
+ `verify-policies-capacity.py`— Esse script verifica cada ambiente que você define para determinar quanta capacidade resta para cada cota AWS Organizations relacionada à política. Você define os ambientes a serem verificados no arquivo `environments.json`. Insira o seguinte comando para executar esse script, onde `<POLICY_TYPE>` é `scp` ou `rcp`:

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