Controle os conjuntos de permissões para várias contas usando o Account Factory for 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á.

Controle os conjuntos de permissões para várias contas usando o Account Factory for Terraform

Anand Krishna Varanasi e Siamak Heshmati, da Amazon Web Services

Resumo

Esse padrão ajuda você a integrar o AWS Control Tower Account Factory Terraform (AFT) para configurar permissões para várias Contas da AWS em grande escala. AWS IAM Identity Center Essa abordagem usa AWS Lambda funções personalizadas para automatizar as atribuições de conjuntos de permissões Contas da AWS que são gerenciados como uma organização. Isso simplifica o processo porque não requer intervenção manual da equipe de engenharia da plataforma. Essa solução pode melhorar a eficiência operacional, a segurança e a consistência. Ele promove um processo de integração seguro e padronizado AWS Control Tower, tornando-o indispensável para empresas que priorizam a agilidade e a confiabilidade de sua infraestrutura em nuvem.

Pré-requisitos e limitações

Pré-requisitos

Limitações

  • Essa solução só pode ser usada com contas gerenciadas por meio de AWS Control Tower. Essa solução é implantada usando o Account Factory for Terraform.

  • Esse padrão não inclui instruções para configurar a federação de identidades com uma fonte de identidade. Para obter mais informações sobre como concluir essa configuração, consulte os tutoriais da fonte de identidade do IAM Identity Center na documentação do IAM Identity Center.

Arquitetura

Visão geral do AFT

O AFT configura um pipeline do Terraform que ajuda você a provisionar e personalizar suas contas em AWS Control Tower. O AFT segue um GitOps modelo que automatiza os processos de provisionamento de contas em. AWS Control Tower Você cria um arquivo Terraform de solicitação de conta e o submete ao repositório. Isso inicia o fluxo de trabalho AFT para provisionamento de contas. Depois que o provisionamento da conta for concluído, o AFT poderá executar automaticamente etapas adicionais de personalização. Para obter mais informações, consulte a arquitetura AFT na AWS Control Tower documentação.

O AFT fornece os seguintes repositórios principais:

  • aft-account-request— Este repositório contém código do Terraform para criar ou atualizar. Contas da AWS

  • aft-account-customizations— Esse repositório contém o código do Terraform para criar ou personalizar recursos por conta.

  • aft-global-customizations— Esse repositório contém o código do Terraform para criar ou personalizar recursos para todas as contas, em grande escala.

  • aft-account-provisioning-customizations— Esse repositório gerencia personalizações que são aplicadas somente a contas específicas criadas e gerenciadas com o AFT. Por exemplo, você pode usar esse repositório para personalizar atribuições de usuários ou grupos no IAM Identity Center ou para automatizar o encerramento de contas.

Visão geral da solução

Essa solução personalizada inclui uma máquina de AWS Step Functions estado e uma AWS Lambda função que atribui conjuntos de permissões a usuários e grupos para várias contas. A máquina de estado implantada por meio desse padrão opera em conjunto com a máquina de estado AFT aft_account_provisioning_customizations preexistente. Um usuário envia uma solicitação para atualizar as atribuições de usuários e grupos do IAM Identity Center quando uma nova Conta da AWS é criada ou após a criação da conta. Eles fazem isso enviando uma alteração para o aft-account-request repositório. A solicitação para criar ou atualizar uma conta inicia um stream no Amazon DynamoDB Streams. Isso inicia a função Lambda, que atualiza os usuários e grupos do IAM Identity Center para o alvo. Contas da AWS

Veja a seguir um exemplo dos parâmetros que você pode fornecer na função Lambda para atribuições de conjuntos de permissões para usuários e grupos-alvo:

custom_fields = { "InstanceArn" = "<Organization ID>", "PermissionSetArn" = "<Permission set ARN>", "PrincipalId" = "<Principal ID>", }

A seguir estão os parâmetros desta declaração:

  • InstanceArn— O Amazon Resource Name (ARN) da organização

  • PermissionSetArn— O ARN do conjunto de permissões

  • PrincipalId— O identificador de um usuário ou grupo no IAM Identity Center ao qual o conjunto de permissões será aplicado

nota

Você deve criar o conjunto de permissões, os usuários e os grupos de destino antes de executar essa solução.

Embora o InstanceArn valor deva permanecer consistente, você pode modificar a função Lambda para atribuir vários conjuntos de permissões a várias identidades de destino. Os parâmetros para conjuntos de permissões devem terminar emPermissionSetArn, e os parâmetros para usuários e grupos devem terminar emPrincipalId. Você deve definir os dois atributos. Veja a seguir um exemplo de como definir vários conjuntos de permissões e segmentar usuários e grupos:

custom_fields = { "InstanceArn" = "<Organization ID>", "AdminAccessPermissionSetArn" = "<Admin privileges permission set ARN>", "AdminAccessPrincipalId" = "<Admin principal ID>", "ReadOnlyAccessPermissionSetArn" = "<Read-only privileges permission set ARN>", "ReadOnlyAccessPrincipalId" = "<Read-only principal ID>", }

O diagrama a seguir mostra um step-by-step fluxo de trabalho de como a solução atualiza os conjuntos de permissões para usuários e grupos no destino Contas da AWS em grande escala. Quando o usuário inicia uma solicitação de criação de conta, o AFT inicia a máquina de estado aft-account-provisioning-framework Step Functions. Essa máquina de estado inicia a função extract-alternate-sso Lambda. A função Lambda atribui conjuntos de permissões a usuários e grupos no destino. Contas da AWS Esses usuários ou grupos podem ser de qualquer fonte de identidade configurada no IAM Identity Center. Exemplos de fontes de identidade incluem Okta, Active Directory ou Ping Identity.

Fluxo de trabalho de atualização de conjuntos de permissões quando uma conta é criada ou atualizada.

O diagrama mostra o seguinte fluxo de trabalho quando novas contas são criadas:

  1. Um usuário envia uma custom_fields alteração para o aft-account-request repositório.

  2. AWS CodePipeline inicia um AWS CodeBuild trabalho que registra os metadados definidos pelo usuário na tabela do Amazon aft-request-audit DynamoDB. Essa tabela tem atributos para registrar metadados definidos pelo usuário. O ddb_event_name atributo define o tipo de operação AFT:

    • Se o valor forINSERT, a solução atribuirá as permissões definidas às identidades de destino quando a nova Conta da AWS for criada.

    • Se o valor forUPDATE, a solução atribuirá as permissões definidas às identidades de destino após Conta da AWS a criação.

  3. O Amazon DynamoDB Streams inicia aft_alternate_sso_extract a função Lambda.

  4. A função aft_alternate_sso_extract Lambda assume uma função AWS Identity and Access Management (IAM) na conta de gerenciamento. AWS Control Tower

  5. A função Lambda atribui os conjuntos de permissões aos usuários e grupos de destino fazendo uma chamada de API AWS SDK para Python (Boto3) create_account_assignment para o IAM Identity Center. Ele recupera o conjunto de permissões e as atribuições de identidade da tabela do Amazon aft-request-audit DynamoDB.

  6. Quando o fluxo de trabalho do Step Functions é concluído, os conjuntos de permissões são atribuídos às identidades de destino.

Automação e escala

O AFT opera em grande escala usando Serviços da AWS DynamoDB e Lambda, que são altamente escaláveis. CodePipeline AWS CodeBuild Para automação adicional, você pode integrar essa solução a um sistema de gerenciamento de tickets ou problemas, como o Jira. Para obter mais informações, consulte a seção Informações adicionais desse padrão.

Ferramentas

Serviços da AWS

  • O Account Factory for Terraform (AFT) é a principal ferramenta dessa solução. O aft-account-provisioning-customizations repositório contém o código do Terraform para criar personalizações Contas da AWS, como atribuições personalizadas de usuários ou grupos do IAM Identity Center.

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

  • 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 Step Functionsé um serviço de orquestração sem servidor que ajuda você a combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios.

Outras ferramentas

  • Python é uma linguagem de programação de computador de uso geral.

  • 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 repositório de código do AFT está disponível no repositório GitHub AWS Control Tower Account Factory for Terraform. O código desse padrão está disponível no Govern SSO Assignments para usar o repositório Account Contas da AWS Factory for Terraform (AFT).

Práticas recomendadas

Épicos

TarefaDescriçãoHabilidades necessárias

Criar um perfil do IAM.

Na conta AWS Control Tower de gerenciamento, use o Terraform para criar uma função do IAM. Essa função tem acesso entre contas e uma política de confiança que permite acesso federado do provedor de identidade. Ele também tem permissões para conceder acesso a outras contas por meio de AWS Control Tower. A função Lambda assumirá essa função. Faça o seguinte:

  1. Baixe o AFTCrossAccountRole.tf arquivo do repositório GitHub de códigos.

  2. Modifique o AFTCrossAccountRole.tf arquivo conforme necessário para seu AWS ambiente.

  3. No Terraform, insira os seguintes comandos para criar essa função do IAM:

    terraform init terraform plan terraform apply
  4. Confirme se a função foi implantada com sucesso e tem o acesso cruzado esperado entre contas.

AWS DevOps, arquiteto de nuvem

Personalize a solução para seu ambiente.

  1. Digite o comando a seguir para clonar o Govern SSO Assignments para usar o repositório Account Contas da AWS Factory for Terraform (AFT) em sua estação de trabalho local.

    git clone https://github.com/aws-samples/aft-custom-sso-assignment.git
  2. Na aft-account-provisioning-customizations/terraform pasta, abra o variables.tf arquivo.

  3. Modifique as variáveis conforme necessário para seu ambiente.

  4. Salve e feche o arquivo variables.tf.

  5. Abra o account-request.tf arquivo no seu aft-account-request repositório.

  6. Modifique os custom_fields parâmetros para definir os conjuntos de permissões e direcionar usuários e grupos. Para obter mais informações, consulte a seção Arquitetura desse padrão.

  7. Salve e feche o arquivo account-request.tf.

AWS DevOps, arquiteto de nuvem

Implante a solução.

  1. No repositório clonado, copie o conteúdo da terraform pasta e cole-o na terraform pasta do repositório. aft-account-provisioning-customizations

  2. Na conta de gerenciamento do AFT, inicie o ct-aft-account-provisioning-customizations pipeline. Isso implanta a solução personalizada. Para obter instruções, consulte Iniciar um pipeline em CodePipeline.

  3. Confirme se os recursos foram implantados com sucesso na conta de gerenciamento do AFT.

AWS DevOps, arquiteto de nuvem

Configure uma conexão de repositório de código.

Configure uma conexão entre o repositório de código em que você armazenará os arquivos de configuração e o seu Conta da AWS. Para obter instruções, consulte Adicionar provedores de origem terceirizados aos pipelines usando CodeConnections na AWS CodePipeline documentação.

AWS DevOps, arquiteto de nuvem
TarefaDescriçãoHabilidades necessárias

Inicie o pipeline AFT para implantar uma nova conta.

Siga as instruções em Provisionar uma nova conta com o AFT para iniciar o pipeline que cria uma nova Conta da AWS em seu AWS Control Tower ambiente. Aguarde a conclusão do processo de criação da conta.

AWS DevOps, arquiteto de nuvem

Valide as alterações.

  1. Abra o console de AWS IAM Identity Center.

  2. Na lista de contas, escolha a conta recém-criada.

  3. Valide se os conjuntos de permissões foram atribuídos para conceder acesso aos usuários e grupos de destino.

AWS DevOps, arquiteto de nuvem

Solução de problemas

ProblemaSolução

A atribuição do conjunto de permissões não está funcionando.

Verifique se o ARN do grupo, o ID da organização e os parâmetros do Lambda estão corretos. Para ver exemplos, consulte a seção Visão geral da solução desse padrão.

A atualização do código no repositório não inicia o pipeline.

Esse problema está relacionado à conectividade entre você Conta da AWS e o repositório. No AWS Management Console, valide se a conexão está ativa. Para obter mais informações, consulte GitHub as conexões na AWS CodePipeline documentação.

Mais informações

Integração com uma ferramenta de gerenciamento de tickets

Você pode optar por integrar essa solução a uma ferramenta de gerenciamento de tickets ou problemas, como o Jira ou ServiceNow. O diagrama a seguir mostra um exemplo de fluxo de trabalho para essa opção. Você pode integrar a ferramenta de gerenciamento de tickets aos repositórios de soluções AFT usando os conectores da sua ferramenta. Para conectores do Jira, consulte Integrar o Jira com. GitHub Para ServiceNow conectores, consulte Integração com. GitHub Você pode até mesmo criar soluções personalizadas que exijam que os usuários forneçam um ID do ticket como parte da aprovação do pull request. Se uma solicitação para criar um novo Conta da AWS usando o AFT for aprovada, esse evento poderá iniciar um fluxo de trabalho que adiciona campos personalizados ao aft-account-request GitHub repositório. Você pode criar qualquer fluxo de trabalho personalizado que atenda aos requisitos do seu caso de uso.

Fluxo de trabalho que usa GitHub ações e uma ferramenta de gerenciamento de tickets.

O diagrama mostra o seguinte fluxo de trabalho:

  1. Os usuários solicitam uma atribuição personalizada do conjunto de permissões em uma ferramenta de gerenciamento de tickets, como o Jira.

  2. Depois que o caso for aprovado, um fluxo de trabalho começa a atualizar a atribuição do conjunto de permissões. (Opcional) Você pode usar plug-ins para automação personalizada dessa etapa.

  3. Os operadores enviam o código do Terraform com os parâmetros atualizados do conjunto de permissões para o aft-account-request repositório em uma ramificação de desenvolvimento ou recurso.

  4. GitHub As ações são AWS CodeBuild iniciadas usando uma chamada OpenID Connect (OIDC). CodeBuild executa varreduras de segurança de infraestrutura como código (IaC) usando ferramentas como tfsec e checkov. Ele avisa os operadores sobre quaisquer violações de segurança.

  5. Se nenhuma violação for encontrada, o GitHub Actions cria uma pull request automática e atribui uma revisão de código aos proprietários do código. Ele também cria uma tag para a pull request.

  6. Se o proprietário do código aprovar a revisão do código, outro fluxo de trabalho de GitHub ações será iniciado. Ele verifica os padrões de pull request, incluindo:

    • Se o título da pull request atender aos requisitos.

    • Se o corpo da pull request contiver números de casos aprovados.

    • Se o pull request estiver marcado corretamente.

  7. Se as pull requests atenderem aos padrões, o GitHub Actions iniciará o fluxo de trabalho do produto AFT. Ele usa o início da ct-aft-account-request tubulação AWS CodePipeline. Esse pipeline inicia a máquina de estado aft-account-provisioning-framework personalizada em Step Functions. Essa máquina de estado funciona conforme descrito anteriormente na seção Visão geral da solução desse padrão.