Gerencie conjuntos de AWS permissões dinamicamente usando o Terraform - 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 conjuntos de AWS permissões dinamicamente usando o Terraform

Vinicius Elias e Marcos Vinicius Pinto Jordão, Amazon Web Services

Resumo

Centro de Identidade do AWS IAM aprimora AWS Identity and Access Management (IAM) fornecendo um hub centralizado para gerenciar o acesso com login único e aplicativos em nuvem. Contas da AWS No entanto, o gerenciamento manual dos conjuntos de permissões do Centro de Identidade do IAM pode se tornar cada vez mais complexo e propenso a erros à medida que sua organização cresce. Essa complexidade pode levar a possíveis falhas de segurança e sobrecarga administrativa.

Essa solução permite que você gerencie conjuntos de permissões por meio de infraestrutura como código (IaC) usando um pipeline de integração contínua e entrega contínua (CI/CD) criado com Serviços da AWS nativos. Ele permite uma integração perfeita do mecanismo de atribuição do conjunto de permissões com eventos do AWS Control Tower ciclo de vida ou com um ambiente Account Factory for Terraform (AFT). Essa abordagem fornece configurações de identidade dinâmicas para novas e existentes Contas da AWS.

EventBridge As regras da Amazon monitoram a Conta da AWS criação e as atualizações, o que ajuda suas configurações de identidade a permanecerem sincronizadas com sua estrutura organizacional. Depois de criar ou atualizar contas em AWS Control Tower ou AFT, o pipeline é acionado. Ele avalia um conjunto de arquivos JSON com definições de conjuntos de permissões e regras de atribuição. Em seguida, o pipeline aplica e sincroniza as configurações em todas as contas.

Essa abordagem oferece os seguintes benefícios:

  • Consistência — elimina o desvio de configuração manual em toda a sua organização AWS

  • Auditabilidade: mantém um histórico completo de todas as alterações no gerenciamento de identidade

  • Escalabilidade — aplica configurações automaticamente à medida que seu ambiente cresce AWS

  • Segurança: reduz o erro humano nas atribuições de permissões

  • Conformidade: facilita o cumprimento dos requisitos regulatórios por meio de alterações documentadas e regras de atribuição

Pré-requisitos e limitações

  • Um ambiente de várias contas com AWS Control Tower e AWS Organizations configurado. Opcionalmente, você pode usar o AFT com AWS Control Tower.

  • Um administrador delegado do IAM Identity Center Conta da AWS para receber a solução. Para obter mais informações, consulte Delegated administration na documentação do Centro de Identidade do IAM.

  • Um repositório do sistema de controle de versão (VCS) para lidar com o código principal. Para ver uma amostra, consulte o GitHub repositório da solução.

  • AWS Recursos necessários para o gerenciamento de back-end do Terraform, como um bucket do Amazon Simple Storage Service (Amazon S3) e uma tabela do Amazon DynamoDB.

Limitações

  • O pipeline usa recursos AWS nativos e o Terraform de código aberto. O pipeline não está preparado para fazer chamadas para ecossistemas de terceiros.

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte AWS Services by Region. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Arquitetura

O diagrama apresentado a seguir ilustra os componentes e o fluxo de trabalho para este padrão.

Componentes e fluxo de trabalho para gerenciar conjuntos de permissões da AWS usando o Terraform.

AWS Control Tower fluxo de eventos

A solução começa com a integração de eventos provenientes de qualquer um AWS Control Tower ou do AFT. A escolha entre um ou outro serviço é feita no momento da implementação por meio da definição de variáveis. Independentemente do método usado, o pipeline é acionado sempre que uma conta é criada ou atualizada. O pipeline reconcilia as políticas armazenadas no repositório de gerenciamento de conjuntos de permissões.

A seguir estão os eventos do AWS Control Tower ciclo de vida:

  • CreateManagedAccount: quando uma nova conta é criada

  • UpdateManagedAccount: quando uma conta existente é atualizada

Roteamento de eventos

EventBridge serve como serviço central de processamento de eventos, capturando eventos gerados na AWS Control Tower conta. Quando os eventos ocorrem, os encaminha de EventBridge forma inteligente para um barramento de eventos centralizado na conta da solução. AWS Control Tower os eventos do ciclo de vida seguem padrões de roteamento distintos. Se a AFT for definida como a origem do evento, a conta de gerenciamento da AFT manipulará os eventos em vez da AWS Control Tower conta. Essa arquitetura orientada a eventos permite respostas automatizadas às alterações organizacionais sem intervenção manual.

Processo de integração do AFT

Quando os eventos AWS Control Tower do ciclo de vida chegam à conta de gerenciamento do AFT, eles acionam automaticamente vários processos posteriores que são intrínsecos ao AFT. Depois que o fluxo de trabalho de personalização da conta do AFT é concluído, ele publica uma mensagem no tópico dedicado do Amazon Simple Notification Service (Amazon SNS) aft-notifications. Esse tópico aciona a aft-new-account-forward-event AWS Lambda função implementada por essa solução. A função do Lambda envia o evento para o barramento de eventos da conta da solução, onde ele é usado para iniciar o pipeline.

Pipeline da infraestrutura como código

O pipeline de soluções opera como um mecanismo de implantação totalmente automatizado. O AWS CodePipeline serviço monitora continuamente o repositório em busca de alterações. Ao detectar novas confirmações, ele inicia automaticamente o fluxo de trabalho de implantação e inicia um processo sequencial que inclui fases de validação e execução. O sistema executa plan operações do Terraform para identificar as mudanças propostas, seguidas pelos apply comandos do Terraform para implementar essas mudanças no AWS ambiente. É importante notar que o pipeline funciona sem nenhuma porta de aprovação manual. Essa abordagem permite a rápida implantação de mudanças na infraestrutura, mantendo a auditabilidade por meio de logs de pipeline e de arquivos de estado do Terraform.

O pipeline AWS CodeBuild se aproveita para executar as operações do Terraform em um ambiente controlado com as permissões apropriadas. Por meio dessa abordagem de IaC, o pipeline pode realizar operações abrangentes de gerenciamento de permissões, incluindo:

  • Criar novos conjuntos de permissões.

  • Atualizar os conjuntos de permissões existentes.

  • Remover conjuntos de permissões desnecessários.

  • Gerencie a atribuição dessas permissões em contas e grupos dentro das AWS organizações.

Para manter a consistência da infraestrutura e evitar mudanças conflitantes, a solução implementa o sistema de gerenciamento de estado de backend do Terraform usando um bucket do Amazon S3 e uma tabela dedicada do Amazon DynamoDB. Essa abordagem fornece um local de armazenamento persistente para arquivos de estado do Terraform e mecanismos de bloqueio de estado para evitar modificações simultâneas nos mesmos recursos.

O código principal do Terraform usa o módulo oficial do AWS permission-sets Terraform. Esse módulo pode gerenciar dinamicamente conjuntos de permissões no Centro de Identidade do IAM, com base em modelos de conjuntos de permissões.

Gerenciamento de controle de origem

Os modelos de conjunto de permissões (arquivos JSON) residem em um sistema externo de controle de versão, como, por exemplo GitHub, que fornece um repositório centralizado para configurações de gerenciamento de identidade. Essa abordagem estabelece uma única fonte confiável para as definições do conjunto de permissões, ao mesmo tempo em que permite o desenvolvimento colaborativo por meio de práticas padrão de revisão de código. Usuários autorizados podem confirmar alterações nesses modelos seguindo os processos de gerenciamento de mudanças organizacionais. Essas confirmações servem como o principal gatilho para o pipeline de implantação automatizado, iniciando o processo de atualização da infraestrutura.

Para ver um exemplo de como configurar os conjuntos de permissões usando o arquivo JSON no repositório, consulte Informações adicionais.

Ferramentas

Serviços da AWS

  • O AWS CodeBuild é 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.

  • Conexões de código da AWSpermite que AWS recursos e serviços, como CodePipeline, se conectem a repositórios de código externos, como GitHub.

  • O AWS CodePipeline 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 Command Line Interface (AWS CLI) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.

  • AWS Control Towerajuda você a configurar e administrar um ambiente AWS com várias contas, seguindo as melhores práticas prescritivas.

  • O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.

  • EventBridgeA Amazon é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS

  • AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

  • Centro de Identidade do AWS IAMajuda você a gerenciar centralmente o acesso de login único (SSO) a todos os seus Contas da AWS aplicativos e à nuvem.

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

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

  • O Amazon Simple Notification Service (Amazon SNS) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail. Ele permite notificações push para eventos de gerenciamento de contas, garantindo que as partes relevantes sejam informadas sobre mudanças ou ações importantes no sistema.

  • 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

  • O Terraform é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

Repositório de código

O código desse padrão está disponível na organização AWS Samples ou GitHub no repositório sample-terraform-aws-permission-sets-pipeline.

Práticas recomendadas

  • Sempre fixe as versões dos módulos e provedores do Terraform usados para executar o código na produção.

  • Use uma ferramenta de análise de código estático, como o Checkov, para verificar seu código e resolver os problemas de segurança.

  • Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte Concessão de privilégio mínimo e Práticas recomendadas de segurança na documentação do IAM.

Épicos

TarefaDescriptionHabilidades necessárias

Crie os recursos de backend do Terraform.

Se você ainda não criou seus AWS recursos de back-end do Terraform, use as etapas a seguir para criar um bucket do Amazon S3 s3-tf-backend-{ACCOUNT_ID} () e uma tabela do DynamoDB (). ddb-tf-backend

  1. Faça login no Conta da AWS local onde você implantará a solução e abra AWS CloudShellem AWS Control Tower casa Região da AWS.

  2. Execute os comandos a seguir, substituindo o espaço {ACCOUNT_ID} reservado pelo seu Conta da AWS ID:

aws s3api create-bucket --bucket s3-tf-backend-{ACCOUNT_ID} aws s3api put-bucket-versioning --bucket s3-tf-backend-{ACCOUNT_ID} --versioning-configuration Status=Enabled aws dynamodb create-table --table-name ddb-tf-backend --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
Administrador da AWS

Criar uma função de conta cruzada.

Você deve fornecer uma função do IAM entre contas na configuração do AWS provedor event-source-account Terraform. Se ainda não tiver criado esse perfil, use as seguintes etapas para criá-lo:

  1. Faça login na Conta da AWS que será sua fonte de eventos (conta AWS Control Tower de gerenciamento ou conta AFT) e abra AWS CloudShell.

  2. Execute o comando a seguir, substituindo o espaço reservado {ACCOUNT_ID} pela Conta da AWS ID que você está usando para essa solução, não pela Conta da AWS ID atual:

aws iam create-role \ --role-name CrossAccountRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{ACCOUNT_ID}:root" }, "Action": "sts:AssumeRole" } ] }'
  1. Verifique a saída do comando e copie o nome do recurso da Amazon (ARN) do perfil (por exemplo, arn:aws:iam::111122223333:role/CrossAccountRole).

  2. Para anexar uma política do IAM ao perfil, execute o seguinte comando:

aws iam attach-role-policy \ --role-name CrossAccountRole \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

Este exemplo usa a política AWS gerenciada do IAM AdministratorAccess. Se preferir, poderá usar uma política mais específica.

Administrador da AWS
TarefaDescriptionHabilidades necessárias

Crie um repositório dedicado.

Essa tarefa pressupõe que você esteja usando GitHub. Crie um repositório dedicado para armazenar o código principal do Terraform e os arquivos JSON do modelo do conjunto de permissões.

DevOps engenheiro

Prepare o código do conjunto de permissões.

Para obter informações sobre como você pode estruturar os arquivos a seguir, consulte o sample code no repositório da solução:

├── main.tf

├── outputs.tf

├── providers.jinja

└── templates

Copie o conteúdo, mantenha os valores providers.jinja e faça os ajustes necessários nos outros arquivos. Por exemplo, adicione os arquivos do modelo de conjunto de permissões em templates ou fixe a versão do módulo aws-ia/permission-sets/aws no arquivo main.tf.

DevOps engenheiro

Confirme suas alterações.

Confirme e envie as alterações para o repositório que você criou anteriormente. Salve o nome do repositório e sua GitHub organização, por exemplo,myorg/aws-ps-pipeline.

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Baixe o conteúdo.

Baixe (clone) o conteúdo do repositório da solução.

DevOps engenheiro

Preencha as variáveis.

Crie um arquivo terraform.tfvars e adicione as seguintes variáveis necessárias:

  • repository_name: o nome do repositório do conjunto de permissões que você criou anteriormente

  • branch_name: o nome da ramificação do repositório do conjunto de permissões

  • vcs_provider: seu provedor de VCS

  • account_lifecycle_events_source— A origem dos eventos para acionar o pipeline (AWS Control Tower ou AFT)

repository_name = "myorg/aws-ps-pipeline" branch_name = "main" vcs_provider = "github" account_lifecycle_events_source = "CT"

Para obter informações sobre opções adicionais de variáveis, consulte o arquivo variables.tf no repositório desse padrão. GitHub

DevOps engenheiro

Ajuste a configuração do backend do Terraform.

No arquivo backend.tf, substitua os espaços reservados com seus próprios valores. Use a AWS Control Tower página inicial Região da AWS e forneça os nomes do bucket Amazon S3 e da tabela do DynamoDB criados anteriormente.

terraform { required_version = ">=1.6" backend "s3" { region = "{region}" bucket = "{bucket_name}" key = "terraform.tfstate" dynamodb_table = "{table_name}" encrypt = "true" } }

Se preferir, você pode usar sua própria configuração de backend do Terraform.

DevOps engenheiro

Ajuste a configuração do provedor do Terraform.

No arquivo providers.tf, substitua os espaços reservados por suas próprias informações. Use a região de AWS Control Tower origem e forneça o ARN da função IAM entre contas criada anteriormente para o provedor. event-source-account

provider "aws" { region = "{region}" } provider "aws" { alias = "event-source-account" region = "{region}" assume_role { role_arn = "{role_arn}" } }
DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Selecione Conta da AWS o.

Recomendamos que você implante a solução na conta do administrador delegado do Centro de Identidade do IAM. No entanto, você também pode implantá-lo na conta AWS Organizations de gerenciamento.

Para fazer login na conta selecionada na mesma região da instância do Centro de Identidade do IAM, use a AWS CLI. Certifique-se de que o perfil do IAM que você está usando tenha permissão para assumir o perfil especificado para o provedor event-source-account nas etapas anteriores. Além disso, essa função deve ter acesso aos AWS recursos usados na configuração de back-end do Terraform.

Administrador da AWS

Execute o Terraform manualmente.

Para inicializar, planejar e aplicar as configurações, execute os seguintes comandos do Terraform, um de cada vez:

  1. terraform init

  2. terraform plan

  3. terraform apply

DevOps engenheiro

Verificar os resultados da implantação.

Na conta do administrador delegado do Centro de Identidade do IAM, verifique se o pipeline aws-ps-pipeline foi criado. Verifique também se há uma Conexões de código da AWS conexão com o status Pendente.

AWS DevOps

Conclua a CodeConnections configuração.

Para finalizar a CodeConnections configuração, use as seguintes etapas:

  1. Vá até CodeConnections, selecione a conexão que foi criada e escolha Atualizar conexão pendente.

  2. Forneça suas GitHub credenciais, instale um novo GitHub aplicativo ou selecione um existente que tenha acesso ao repositório do conjunto de permissões e escolha Connect.

O pipeline agora deve ter acesso ao repositório do conjunto de permissões.

Para obter instruções detalhadas, consulte Update a pending connection na documentação do console do Developer Tools.

AWS DevOps
TarefaDescriptionHabilidades necessárias

Execute o pipeline por meio AWS Control Tower de atualizações do AFT.

Depois que uma conta é criada ou alterada usando nosso AWS Control Tower AFT (dependendo do tipo de eventos de ciclo de vida que você escolheu), o pipeline começa.

Administrador da AWS

Execute o pipeline alterando o código.

Depois de alterar o código e confirmá-lo na ramificação main, o pipeline é iniciado.

AWS DevOps

Execute o pipeline manualmente.

Para iniciar o pipeline manualmente, use o recurso Release Change no AWS CodePipeline.

AWS DevOps

Solução de problemas

ProblemaSolução

Acesso negado

Verifique se você tem as permissões necessárias para implantar a solução.

CodeConnections problemas

  • Verifique se o status da conexão é Disponível, em vez de Pendente.

  • Verifique se a CodeConnections configuração foi concluída corretamente com GitHub as credenciais. Para obter mais informações, consulte Update a pending connection na documentação do console do Developer Tools.

  • Certifique-se de que o GitHub aplicativo tenha as permissões de acesso adequadas ao repositório do conjunto de permissões.

Problemas na execução do pipeline

  • Verifique os CloudWatch registros da Amazon em busca de erros de execução do pipeline.

  • Certifique-se de que a delegação do Centro de Identidade do IAM esteja configurada corretamente. Caso contrário, isso pode causar falhas no pipeline ao ler os Conta da AWS metadados.

Problemas na implantação dos conjuntos de permissões

  • Verifique se a sintaxe JSON nos arquivos do modelo do conjunto de permissões está correta.

  • Verifique se as políticas gerenciadas do IAM referenciadas nos modelos existem.

  • Verifique se os grupos e usuários especificados nas atribuições existem no Centro de Identidade do IAM.

Recursos relacionados

AWS service (Serviço da AWS) documentação

Outros recursos

Mais informações

Arquivo JSON com conjunto de permissões de exemplo

O exemplo a seguir mostra como configurar um conjunto de permissões usando o arquivo JSON no repositório:

{ "Name": "ps-billing", // Permission set identifier "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set "Description": "Billing access in AWS", // Detailed description "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format) "ManagedPolicies": [ // List of AWS IAM managed policies "arn:aws:iam::aws:policy/job-function/Billing", "arn:aws:iam::aws:policy/job-function/SupportUser", "arn:aws:iam::aws:policy/AWSSupportAccess", "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess" ], "CustomerPolicies": [], // References to IAM policies previously created "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set "PermissionBoundary": { // AWS or customer managed IAM policy to be used as boundary "ManagedPolicy": "", "CustomerPolicy": "" }, "Assignments": [ // Define the assignment rules { "all_accounts": true, // Apply to ALL active AWS accounts in organization "principal": "G_BILLING_USERS", // Group/user name in Identity Center "type": "GROUP", // Can be "GROUP" or "USER" "account_id": [], // List of AWS account ID (empty since all_accounts=true) "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags } ] }

Para obter mais informações, consulte o esquema JSON na documentação AWS Permission Sets module no site do Terraform.

Dicas

  • Você pode usar os blocos de importação do Terraform para importar um conjunto de permissões existente para a solução.

  • Você pode usar o AFT para implementar o pipeline do conjunto de AWS permissões em uma conta delegada. Para obter mais informações, consulte AFT Blueprints.