Gerencie AWS Organizations políticas como código usando o AWS CodePipeline Amazon Bedrock - Recomendações da AWS

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

Criado por Andre Cavalcante (AWS) e Mariana Pessoa de Queiroz (AWS)

Resumo

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

Esse padrão inclui os seguintes recursos:

  • Você cria, exclui e atualiza as políticas de autorização usando arquivos de manifesto (scp-management.jsonercp-management.json).

  • Você trabalha com grades de proteção em vez de políticas. Você define suas grades de proteção e seus alvos 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 grades de proteção em um único 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.

  • O Amazon Bedrock lê os registros 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

Pré-requisitos

Limitações

  • Você não pode usar esse padrão para gerenciar SCPs ou RCPs que foram criados fora desse pipeline de CI/CD. No entanto, você pode recriar políticas existentes por meio do pipeline. Para obter mais informações, consulte Migração de políticas existentes para o pipeline na seção Informações adicionais desse 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. OUs AWS Organizations

  • Esse padrão não pode ser usado para configurar políticas de gerenciamento AWS Organizations, como políticas de backup, políticas de tags, políticas de aplicativos de bate-papo ou políticas declarativas.

Arquitetura

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.

O diagrama mostra o seguinte fluxo de trabalho:

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

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

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

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

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

    4. Cria scps.json e rcps.json arquiva, que o Terraform usa para criar recursos.

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

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

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

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

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

Serviços da AWS

  • O Amazon Bedrock é um serviço de IA totalmente gerenciado que disponibiliza muitos modelos básicos de alto desempenho para uso por meio de uma API unificada.

  • AWS CodeBuildé um serviço de compilação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes de unidade e produzir artefatos prontos para implantação. 

  • AWS CodePipelineajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar as alterações de software continuamente.

  • AWS Organizationsé 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)é 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) é 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 é 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 GitHub repositório. A seguir estão os arquivos-chave que estão contidos na sample-repository pasta:

  • Na environments pasta, 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 rcp-management pasta:

    • 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 scp-management pasta:

    • 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 desse padrão.

Práticas recomendadas

  • Antes de configurar o pipeline, recomendamos que você verifique se não atingiu os limites de suas AWS Organizations cotas.

  • 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 Práticas recomendadas para a conta de gerenciamento.

Épicos

TarefaDescriçãoHabilidades necessárias

Criar um repositório.

Crie um repositório a partir 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.

DevOps engenheiro

Delegar 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 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 desse padrão.

Administrador da AWS

(Opcional) Ative o modelo básico.

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 Adicionar ou remover o acesso aos modelos da Amazon Bedrock Foundation.

AWS geral
TarefaDescriçãoHabilidades necessárias

Clonar o repositório.

Digite o comando a seguir para clonar o 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.

  1. No repositório clonado, abra o variables.tf arquivo.

  2. Paraproject_name, insira o prefixo que você deseja aplicar aos nomes dos recursos implantados.

  3. Paraprovider_type, insira o provedor do repositório remoto. Os valores válidos são fornecidos no arquivo.

  4. Parafull_repository_name, insira o nome do repositório remoto.

  5. Parabranch_name, insira o nome da ramificação do Git que você usará para implantar políticas. Um empurrão ou mesclagem nessa ramificação inicia o pipeline. Normalmente, esse é o ramo principal.

  6. Paraterraform_version, insira a versão do Terraform que você está usando.

  7. Paraenable_bedrock, insira true se você quiser que o Amazon Bedrock resuma as alterações. Insira false se você não quiser gerar um resumo das alterações.

  8. Paratags, insira os pares de valores-chave que você deseja atribuir como tags aos recursos implantados.

  9. Salve e feche o arquivo variables.tf.

DevOps engenheiro

Implante o pipeline.

  1. Insira o comando a seguir para criar um plano e revisar as alterações:

    terraform plan
  2. Insira o comando a seguir para aplicar o plano e criar a infraestrutura do pipeline:

    terraform apply
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 AWS Developer Tools, altere o status da conexão de PENDING paraAVAILABLE. Para obter instruções, consulte Atualizar uma conexão pendente.

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 Criação de uma assinatura para um tópico do Amazon SNS.

AWS geral
TarefaDescriçãoHabilidades necessárias

Preencha o repositório remoto.

Do repositório clonado, copie o conteúdo da sample-repository pasta para o seu repositório remoto. Isso inclui as utils pastas environments rcp-managementscp-management,, e.

DevOps engenheiro

Defina seus ambientes.

  1. Na environments pasta, abra o environments.json arquivo. Este é o arquivo em que você define o alvo Contas da AWS e OUs para o seu RCPs SCPs e.

  2. Exclua os ambientes de exemplo.

  3. Adicione seus ambientes de destino no seguinte formato:

    [ { "ID": "<environment-name>", "Target": [ "<ou-name>:<ou-id>", "<account-name>:<account-id>" ] } ]

    Em que:

    • <environment-name>é o nome que você atribui ao grupo OUs e às contas da AWS. Você pode usar esse nome no arquivo de manifesto para definir onde deseja aplicar suas políticas.

    • <ou-name>é o nome da OU de destino.

    • <ou-id>é a ID da OU de destino.

    • <account-name>é o nome do alvo Conta da AWS.

    • <account-id>é o ID do alvo Conta da AWS.

    Para ver exemplos, consulte o repositório de código-fonte.

  4. Salve e feche o arquivo environments.json.

DevOps engenheiro

Defina suas grades de proteção.

  1. Navegue até a rcp-management/guardrails pasta no seu repositório remoto. Essa é a pasta em que você define as grades de proteção do seu arquivo de manifesto RCP. Cada corrimão deve estar em um arquivo individual. Os arquivos de proteção podem conter uma ou mais declarações.

    nota

    Você pode usar a mesma grade de proteção em várias instruções nos arquivos de manifesto de e. SCPs RCPs Se você modificar a grade de proteção, todas as políticas que incluam essa grade de proteção serão afetadas.

  2. Exclua qualquer exemplo de proteções que tenha sido copiado do repositório do código-fonte.

  3. Crie um novo arquivo.json e dê a ele um nome descritivo.

  4. Abra o arquivo.json que você criou.

  5. Defina a grade de proteção no seguinte formato:

    [ { "Sid": "<guardrail-name>", "Effect": "<effect-value>", "Action": [ "<action-name>" ], "Resource": "<resource-arn>", "Condition": { "<condition-operator>": { "<condition-key>": [ "<condition-value>" ] } } } ]

    Em que:

    • <guardrail-name>é um nome exclusivo para a grade de proteção. Esse nome não pode ser usado para nenhuma outra grade de proteção.

    • <effect-value>deve ser Allow ouDeny. Para obter mais informações, consulte Efeito.

    • <action-name>deve ser um nome válido de uma ação suportada pelo serviço. Para obter mais informações, consulte Ação.

    • <resource-arn>é o Amazon Resource Name (ARN) do recurso ao qual o guardrail se aplica. Você também pode usar caracteres curinga, como * ou?. Para obter mais informações, consulte Recurso.

    • <condition-operator>é um operador de condição válido. Para obter mais informações, consulte Operadores de condição.

    • <condition-key>é uma chave de contexto de condição global válida ou uma chave de contexto específica do serviço. Para obter mais informações, consulte Condição.

    • <condition-value>é o valor específico usado em uma condição para avaliar se uma grade de proteção se aplica. Para obter mais informações, consulte Condição.

    Por exemplo, guardrails de RCP, consulte o repositório do código-fonte.

  6. Salve e feche o arquivo.json.

  7. Repita essas etapas para criar quantas grades de proteção RCP forem necessárias.

  8. Repita essas etapas na scp-management/guardrails pasta para criar quantas grades de proteção forem necessárias para o seu. SCPs Por exemplo, guardrails do SCP, consulte o repositório do código-fonte.

DevOps engenheiro

Defina suas políticas.

  1. Navegue até a rcp-management/policies pasta no seu repositório remoto. Essa é a pasta na qual você define políticas completas para seu arquivo de manifesto RCP. Cada política deve ser um arquivo individual.

    nota

    Se você modificar uma política nessa pasta, as alterações na política afetarão todas as contas às quais OUs essa política é aplicada, conforme definido no arquivo de manifesto.

  2. Exclua qualquer exemplo de política que tenha sido copiada do repositório de código-fonte.

  3. Crie um novo arquivo.json e dê a ele um nome descritivo.

  4. Abra o arquivo.json que você criou.

  5. Defina o RCP. Por exemplo RCPs, consulte o repositório de código-fonte ou veja exemplos de políticas de controle de recursos na AWS Organizations documentação.

  6. Salve e feche o arquivo.json.

  7. Repita essas etapas para criar RCPs quantas forem necessárias.

  8. Repita essas etapas na scp-management/policies pasta para criar SCPs quantas forem necessárias. Por exemplo SCPs, consulte o repositório de código-fonte ou veja exemplos de políticas de controle de serviços na AWS Organizations documentação.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Configure os arquivos de manifesto.

  1. Na rcp-management pasta, abra o rcp-management.json arquivo. Esse é o arquivo em que você define quais grades de proteção do RCP RCPs se aplicam totalmente aos seus ambientes de destino. Para ver um exemplo desse arquivo, consulte o repositório do código-fonte.

  2. Exclua a declaração de exemplo.

  3. Adicione uma nova declaração no seguinte formato:

    [ { "SID": "<statement-name>", "Target": { "Type": "<target-type>", "ID": "<target-name>" }, "Guardrails": [ "<guardrail-name>" ], "Policy": "<policy-name>", "Comments": "<comment-text>" } ]

    Em que:

    • <statement-name>é um nome exclusivo para a declaração.

    • <target-type>é o tipo de alvo em que você deseja aplicar a política. Os valores válidos são Account, OU, Environment ou Tag.

    • <target-name>é o identificador do alvo em que você deseja aplicar a política. Insira um dos seguintes:

      • Para um Conta da AWS, insira o identificador como<account-name>:<account-id>.

      • Para uma OU, insira o identificador como<OU-name>:<ou-id>.

      • Para um ambiente, insira o nome exclusivo que você definiu no environments.json arquivo.

      • Para uma tag, insira o par de valores-chave como. <tag-key>:<tag-value>

    • <guardrail-name>é o nome exclusivo da grade de proteção do RCP que você definiu na pasta. rcp-management/guardrails Você pode adicionar várias grades de proteção nesse elemento. Você pode deixar esse campo vazio se não quiser aplicar uma grade de proteção.

    • <policy-name>é o nome exclusivo do RCP que você definiu na rcp-management/policies pasta. Você pode adicionar somente uma política nesse elemento. Você pode deixar esse campo vazio se não quiser aplicar uma política.

    • <comment-text>é uma descrição que você pode inserir para fins de documentação. Esse campo não é usado durante o processamento do pipeline. Você pode deixar esse campo vazio se não quiser adicionar um comentário.

  4. Repita essas etapas para adicionar quantas declarações forem necessárias RCPs para configurar sua organização.

  5. Salve e feche o arquivo rcp-management.json.

  6. Na scp-management pasta, repita essas etapas no scp-management.json arquivo. Esse é o arquivo em que você define quais grades de proteção do SCP SCPs se aplicam totalmente aos seus ambientes de destino. Para ver um exemplo desse arquivo, consulte o repositório do código-fonte.

DevOps engenheiro

Iniciar o pipeline.

Confirme e envie as alterações para a ramificação do repositório remoto que você definiu no variables.tf arquivo. Normalmente, esse é o main ramo. O pipeline de CI/CD é iniciado automaticamente. Se houver algum erro de pipeline, consulte a seção Solução de problemas desse 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:

  1. Abra a mensagem de notificação.

  2. Se disponível, revise o resumo das mudanças na política.

  3. Siga as instruções em Aprovar ou rejeitar uma ação de aprovação em CodePipeline.

AWS geral, aprovador de políticas

Valide a implantação.

  1. Faça login no AWS Organizations console na conta da qual é o administrador delegado. AWS Organizations

  2. Na página Políticas de controle de serviços, confirme se as SCPs que você criou estão listadas.

  3. Escolha um SCP que seja gerenciado por meio do pipeline e confirme se ele se aplica aos alvos pretendidos.

  4. Na página Políticas de controle de recursos, confirme se as RCPs que você criou estão listadas.

  5. Escolha um RCP que seja gerenciado por meio do pipeline e confirme se ele se aplica aos alvos pretendidos.

AWS geral

Solução de problemas

ProblemaSolução

Erros de arquivo manifesto na Validate-Plan fase 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 rcp-management.json arquivos scp-management.json ou. Os possíveis erros incluem um nome de ambiente incorreto, campos ou SIDs valores duplicados ou inválidos. Faça o seguinte:

  1. Siga as instruções em Exibir detalhes da compilação em AWS CodeBuild.

  2. No registro de compilação, encontre o erro de validação. O erro fornece mais informações sobre o que causou a falha da compilação.

  3. Atualize o arquivo.json correspondente.

  4. Confirme e envie o arquivo atualizado para o repositório remoto. O pipeline é reiniciado.

  5. Monitore o status para confirmar se o erro de validação foi resolvido.

Descobertas do IAM Access Analyzer na Validate-Plan fase 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 proteção ou nas definições da política. Esse padrão usa o IAM Access Analyzer para validar a política final. Faça o seguinte:

  1. Siga as instruções em Exibir detalhes da compilação em AWS CodeBuild.

  2. No registro de compilação, encontre o erro de validação do IAM Access Analyzer. O erro fornece mais informações sobre o que causou a falha da compilação. Para obter mais informações sobre os tipos de descoberta, consulte a referência de verificação de validação de políticas do IAM.

  3. Atualize o arquivo.json correspondente para a grade de proteção ou política.

  4. Confirme e envie o arquivo atualizado para o repositório remoto. O pipeline é reiniciado.

  5. Monitore o status para confirmar se o erro de validação foi resolvido.

Recursos relacionados

Mais informações

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, <MEMBER_ACCOUNT_ID> substitua 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": "*" } ] }

Migração de 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 environments.json arquivo. Digite 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 o seguinte neste comando:

    • <POLICY_TYPE> é scp ou rcp

    • <POLICY_NAME>é o nome do SCP ou RCP

    • <ENV_ID>é a ID do ambiente que você definiu no environments.json arquivo

  • 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 Digite o comando a seguir para executar esse script, onde <POLICY_TYPE> está scp ourcp:

    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 environments.json arquivo de entrada. Digite o comando a seguir para executar esse script, onde <POLICY_TYPE> está scp ourcp:

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