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

AWS IAM Identity Center 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 IAM Identity Center 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 recursos nativos. Serviços da AWS 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 mudanças 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 Administração delegada na documentação do IAM Identity Center.

  • 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 gasoduto 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 saber a disponibilidade da região, consulte AWS Serviços por região. Para endpoints específicos, consulte Endpoints e cotas de serviço e escolha o link para o serviço.

Arquitetura

O diagrama a seguir mostra os componentes e o fluxo de trabalho desse 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 o 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 mudanças 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. Após a conclusão do fluxo de trabalho de personalização da conta AFT, ele publica uma mensagem no tópico dedicado do aft-notifications Amazon Simple Notification Service (Amazon SNS). Esse tópico aciona a aft-new-account-forward-event AWS Lambda função implementada por essa solução. A função Lambda envia o evento para o barramento de eventos da conta da solução, onde é usado para iniciar o pipeline.

Infraestrutura como pipeline de 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 novos commits, 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. Notavelmente, o gasoduto 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 registros de pipeline e 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:

  • Crie novos conjuntos de permissões.

  • Atualize os conjuntos de permissões existentes.

  • Remova 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 back-end 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 IAM Identity Center, 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. Esses commits 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

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

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

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

  • AWS IAM Identity Centerajuda 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 escanear seu código e resolver os problemas de segurança.

  • Siga o princípio do privilégio mínimo e conceda as permissões mínimas necessárias para realizar 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

TarefaDescriçãoHabilidades necessárias

Crie recursos de back-end 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 você ainda não criou essa função, use as etapas a seguir para criá-la:

  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 {ACCOUNT_ID} reservado pelo Conta da AWS ID que você está usando para essa solução, não pelo seu 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 a função Amazon Resource Name (ARN) (por exemplo,arn:aws:iam::111122223333:role/CrossAccountRole).

  2. Para anexar uma política do IAM à função, 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, você pode usar uma política mais específica.

Administrador da AWS
TarefaDescriçãoHabilidades 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 código de amostra no repositório da solução:

¾ ─ main.tf

¾ ─ saídas.tf

¾ ─ providers.jinja

◆─ modelos

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

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
TarefaDescriçãoHabilidades 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 terraform.tfvars arquivo e adicione as seguintes variáveis necessárias:

  • repository_name— Nome do repositório do conjunto de permissões que você criou anteriormente

  • branch_name— 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 back-end do Terraform.

No backend.tf arquivo, substitua os espaços reservados por 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 back-end do Terraform.

DevOps engenheiro

Ajuste a configuração do provedor Terraform.

No providers.tf arquivo, 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
TarefaDescriçãoHabilidades necessárias

Selecione Conta da AWS o.

Recomendamos que você implante a solução na conta de administrador delegado do IAM Identity Center. 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 IAM Identity Center, use AWS CLI o. Certifique-se de que a função do IAM que você está usando tenha permissão para assumir a função especificada para o event-source-account provedor 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 na ordem mostrada:

  1. terraform init

  2. terraform plan

  3. terraform apply

DevOps engenheiro

Verificar os resultados da implantação.

Na conta de administrador delegado do IAM Identity Center, verifique se o aws-ps-pipeline 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 Atualizar uma conexão pendente na documentação do console do Developer Tools.

AWS DevOps
TarefaDescriçãoHabilidades 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 main ramificação, 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 Atualizar uma conexão pendente 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 de 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 IAM Identity Center esteja configurada corretamente. Caso contrário, isso pode causar falhas no pipeline ao ler os Conta da AWS metadados.

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

  • Valide se a sintaxe JSON nos arquivos de 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 IAM Identity Center.

Recursos relacionados

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

Outros recursos

Mais informações

Arquivo JSON com conjunto de permissões de amostra

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 do módulo Conjuntos de AWS permissões 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.