Governança de conjuntos de permissões para várias contas usando o Account Factory para 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á.

Governança de conjuntos de permissões para várias contas usando o Account Factory para Terraform

Anand Krishna Varanasi e Siamak Heshmati, 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. Centro de Identidade do AWS IAM 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, pois elimina a necessidade de intervenção manual por parte da equipe de engenharia de plataforma. Com esta solução, é possível aprimorar 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

  • Esta solução pode ser usada somente com contas gerenciadas pelo AWS Control Tower. A implantação da solução ocorre usando o Account Factory para Terraform.

  • Este modelo 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 IAM Identity Center identity source tutorials na documentação do Centro de Identidade do IAM.

Arquitetura

Visão geral do AFT

O AFT configura um pipeline do Terraform que ajuda você a provisionar e personalizar suas contas no 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 do Terraform de solicitação de conta e o confirma para o repositório. Isso inicia o fluxo de trabalho do AFT para o provisionamento da conta. Depois que o provisionamento da conta é concluído, o AFT pode executar automaticamente as 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 o código do Terraform para criar ou atualizar Contas da AWS.

  • aft-account-customizations: este repositório contém o código do Terraform para criar ou personalizar recursos em nível de conta.

  • aft-global-customizations: este 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: este repositório gerencia personalizações aplicadas apenas a contas específicas criadas e gerenciadas com o AFT. Por exemplo, é possível usar esse repositório para personalizar as atribuições de usuários ou de grupos no Centro de Identidade do IAM 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 estados implantada por meio deste padrão opera em conjunto com a máquina de estado aft_account_provisioning_customizations do AFT já existente. 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. Essa ação é realizada ao enviar uma alteração para o repositório aft-account-request. A solicitação para criar ou atualizar uma conta inicia um fluxo 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

A seguir, apresentamos um exemplo de parâmetros que você pode fornecer na função do Lambda para atribuição de conjuntos de permissões a usuários e grupos de destino:

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

Os seguintes são os parâmetros desta instrução:

  • InstanceArn: o nome do recurso da Amazon (ARN) da organização

  • PermissionSetArn: o ARN do conjunto de permissões

  • PrincipalId: o identificador de um usuário ou de um grupo no Centro de Identidade do IAM 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 esta solução.

Apesar de o valor de InstanceArn precisar se manter constante, é possível modificar a função do Lambda para que ela atribua diversos conjuntos de permissões a diferentes identidades de destino. Os parâmetros destinados a conjuntos de permissões devem terminar com PermissionSetArn, e os parâmetros destinados a usuários e grupos devem terminar com PrincipalId. É necessário definir ambos os atributos. A seguir, apresentamos um exemplo de como definir múltiplos conjuntos de permissões e usuários e grupos de destino:

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 aciona a máquina de estado aft-account-provisioning-framework do Step Functions. Essa máquina de estado inicia a função do Lambda extract-alternate-sso. 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 Centro de Identidade do IAM. Os exemplos de fontes de identidade incluem Okta, Active Directory ou Ping Identity.

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

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

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

  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 conta com atributos para registrar os metadados definidos pelo usuário. O atributo ddb_event_name define o tipo de operação do 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 aciona a função do Lambda aft_alternate_sso_extract.

  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. Além disso, a função obtém os conjuntos de permissões e as atribuições de identidades da tabela aft-request-audit do Amazon 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 obter automação adicional, você pode integrar esta solução a um sistema de gerenciamento de tíquetes ou de 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 desta 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

TarefaDescriptionHabilidades necessárias

Criar um perfil do IAM.

Na conta AWS Control Tower de gerenciamento, use o Terraform para criar uma função do IAM. Este perfil conta com acesso entre contas e uma política de confiança que permite acesso federado com o provedor de identidades. Ele também tem permissões para conceder acesso a outras contas por meio de AWS Control Tower. A função do Lambda assumirá este perfil. 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, digite os seguintes comandos para criar este perfil do IAM:

    terraform init terraform plan terraform apply
  4. Valide se o perfil foi implantado com êxito e conta com o acesso entre contas esperado.

AWS DevOps, arquiteto de nuvem

Personalize a solução para o 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 pasta aft-account-provisioning-customizations/terraform, abra o arquivo variables.tf.

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

  4. Salve e feche o arquivo variables.tf.

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

  6. Altere os parâmetros custom_fields para definir os conjuntos de permissões e os usuários e grupos de destino. Para obter mais informações, consulte a seção Arquitetura deste 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 pasta terraform e cole-o na pasta terraform do repositório aft-account-provisioning-customizations.

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

  3. Valide se os recursos foram implantados com êxito na conta gerencial do AFT.

AWS DevOps, arquiteto de nuvem

Configure uma conexão com um 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
TarefaDescriptionHabilidades necessárias

Inicie o pipeline do 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 do Centro de Identidade do AWS IAM.

  2. Na lista de contas, selecione 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 de conjuntos de permissões não está funcionando.

Verifique se o ARN do grupo, a ID da organização e os parâmetros do Lambda estão corretos. Para obter exemplos, consulte a seção Visão geral da solução deste 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 Console de gerenciamento da AWS, 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 tíquetes

Você pode optar por integrar essa solução a uma ferramenta de gerenciamento de tickets ou problemas, como o Jira ou ServiceNow. O diagrama apresentado a seguir ilustra um exemplo de fluxo de trabalho para esta opção. É possível integrar a ferramenta de gerenciamento de tíquetes aos repositórios da solução do 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é criar soluções personalizadas que exijam que os usuários forneçam uma ID de tíquete como parte da aprovação da solicitação de pull. 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 projetar 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 a atribuição de um conjunto de permissões personalizado em uma ferramenta de gerenciamento de tíquetes, como o Jira.

  2. Após a aprovação do caso, um fluxo de trabalho é iniciado para atualizar a atribuição do conjunto de permissões. Opcional) É possível usar plug-ins para automação personalizada desta etapa.

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

  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. Essa ação alerta 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. Também é criada uma etiqueta para a solicitação de pull.

  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. Além disso, ocorre a verificação dos padrões da solicitação de pull, incluindo:

    • Se o título da solicitação de pull atender aos requisitos.

    • Se o corpo da solicitação de pull contiver números de casos aprovados.

    • Se a solicitação de pull estiver devidamente marcada.

  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 aciona a máquina de estado personalizada aft-account-provisioning-framework no Step Functions. Essa máquina de estado funciona conforme descrito anteriormente na seção Visão geral da solução deste padrão.