Configure o registro centralizado em escala corporativa 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á.

Configure o registro centralizado em escala corporativa usando o Terraform

Criado por Aarti Rajput (AWS), Yashwant Patel (AWS) e Nishtha Yadav (AWS)

Resumo

O registro centralizado é vital para a infraestrutura de nuvem de uma organização, pois fornece visibilidade de suas operações, segurança e conformidade. À medida que sua organização expande seu AWS ambiente em várias contas, uma estratégia estruturada de gerenciamento de registros se torna fundamental para executar operações de segurança, atender aos requisitos de auditoria e alcançar a excelência operacional.

Esse padrão fornece uma estrutura escalável e segura para centralizar registros de vários serviços Contas da AWS e, a fim de permitir o gerenciamento de registros em escala empresarial em implantações complexas. AWS A solução é automatizada usando o Terraform, que é uma ferramenta de infraestrutura como código (IaC) HashiCorp que garante implantações consistentes e reproduzíveis e minimiza a configuração manual. Ao combinar o Amazon CloudWatch Logs, o Amazon Data Firehose e o Amazon Simple Storage Service (Amazon S3), você pode implementar um pipeline robusto de agregação e análise de logs que fornece:

  • Gerenciamento centralizado de registros em toda a sua organização em AWS Organizations

  • Coleta automatizada de registros com controles de segurança integrados

  • Processamento de registros escalável e armazenamento durável

  • Relatórios de conformidade e trilhas de auditoria simplificados

  • Monitoramento e insights operacionais em tempo real

A solução coleta registros de contêineres e funções do Amazon Elastic Kubernetes Service (Amazon EKS AWS Lambda ), funções e instâncias de banco de dados do Amazon Relational Database Service (Amazon RDS) por meio de registros. CloudWatch Ele encaminha automaticamente esses registros para uma conta de registro dedicada usando filtros de CloudWatch assinatura. O Firehose gerencia o pipeline de streaming de log de alto rendimento para o Amazon S3 para armazenamento de longo prazo. O Amazon Simple Queue Service (Amazon SQS) está configurado para receber notificações de eventos do Amazon S3 após a criação do objeto. Isso permite a integração com serviços de análise, incluindo:

  • Amazon OpenSearch Service para pesquisa de registros, visualização e análise em tempo real

  • Amazon Athena para consultas baseadas em SQL

  • Amazon EMR para processamento em grande escala

  • Lambda para transformação personalizada

  • Amazon QuickSight para painéis

Todos os dados são criptografados usando AWS Key Management Service (AWS KMS), e toda a infraestrutura é implantada usando o Terraform para uma configuração consistente em todos os ambientes.

Essa abordagem de registro centralizado permite que as organizações melhorem sua postura de segurança, mantenham os requisitos de conformidade e otimizem a eficiência operacional em toda a AWS infraestrutura.

Pré-requisitos e limitações

Pré-requisitos

Para obter instruções sobre como configurar AWS Control Tower contas AFT e Application, consulte a seção Epics.

Contas obrigatórias

Sua organização AWS Organizations deve incluir as seguintes contas:

  • Conta de aplicativo — Uma ou mais contas de origem nas quais Serviços da AWS (Amazon EKS, Lambda e Amazon RDS) são executadas e geram registros

  • Conta de arquivamento de registros — uma conta dedicada para armazenamento e gerenciamento centralizados de registros

Versões do produto

Arquitetura

O diagrama a seguir ilustra uma arquitetura de registro AWS centralizada que fornece uma solução escalável para coletar, processar e armazenar registros de várias contas de aplicativos em uma conta dedicada do Log Archive. Essa arquitetura gerencia com eficiência os registros de Serviços da AWS, incluindo Amazon RDS, Amazon EKS e Lambda, e os encaminha por meio de um processo simplificado para os buckets regionais do S3 na conta do Log Archive.

Arquitetura de registro centralizada da AWS para coletar registros de várias contas de aplicativos.

O fluxo de trabalho inclui cinco processos:

  1. Processo de fluxo de log

    • O processo de fluxo de registros começa nas contas do aplicativo, onde são Serviços da AWS gerados vários tipos de registros, como registros gerais, de erros, de auditoria, de consultas lentas do Amazon RDS, registros do plano de controle do Amazon EKS e registros de execução de funções e erros do Lambda.

    • CloudWatch serve como ponto de coleta inicial. Ele reúne esses registros no nível do grupo de registros em cada conta do aplicativo.

    • Em CloudWatch, os filtros de assinatura determinam quais registros devem ser encaminhados para a conta central. Esses filtros oferecem controle granular sobre o encaminhamento de registros, para que você possa especificar padrões de log exatos ou fluxos de log completos para centralização.

  2. Transferência de registros entre contas

    • Os registros são movidos para a conta do Log Archive. CloudWatch os filtros de assinatura facilitam a transferência entre contas e preservam o contexto regional.

    • A arquitetura estabelece vários fluxos paralelos para lidar com diferentes fontes de log de forma eficiente, a fim de garantir desempenho e escalabilidade ideais.

  3. Processamento de registros na conta do Log Archive

    • Na conta do Log Archive, o Firehose processa os fluxos de log recebidos.

    • Cada região mantém fluxos de entrega dedicados do Firehose que podem transformar, converter ou enriquecer os registros conforme necessário.

    • Esses streams do Firehose entregam os registros processados aos buckets do S3 na conta Log Archive, que está localizada na mesma região das contas do aplicativo de origem (Região A no diagrama) para manter os requisitos de soberania dos dados.

  4. Notificações e fluxos de trabalho adicionais

    • Quando os registros chegam aos buckets S3 de destino, a arquitetura implementa um sistema de notificação usando o Amazon SQS.

    • As filas SQS regionais permitem o processamento assíncrono e podem acionar fluxos de trabalho adicionais, análises ou sistemas de alerta com base nos registros armazenados.

  5. AWS KMS para segurança

    A arquitetura é incorporada AWS KMS para fins de segurança. AWS KMS fornece chaves de criptografia para os buckets do S3. Isso garante que todos os registros armazenados mantenham a criptografia em repouso, mantendo a criptografia regional para atender aos requisitos de residência de dados.

Ferramentas

Serviços da AWS

  • CloudWatchA Amazon é um serviço de monitoramento e observabilidade que coleta dados operacionais e de monitoramento na forma de registros, métricas e eventos. Ele fornece uma visão unificada dos AWS recursos, aplicativos e serviços que são executados na AWS e em servidores locais.

  • CloudWatch Os filtros de assinatura de registros são expressões que correspondem a um padrão nos eventos de registro recebidos e entregam eventos de registro correspondentes ao AWS recurso especificado para processamento ou análise adicionais.

  • AWS Control Tower O Account Factory For Terraform (AFT) configura um pipeline do Terraform para ajudá-lo a provisionar e personalizar contas em. AWS Control Tower O AFT fornece provisionamento de contas baseado em Terraform, permitindo que você administre suas contas com. AWS Control Tower

  • O Amazon Data Firehose fornece dados de streaming em tempo real para destinos como Amazon S3, Amazon Redshift e Amazon Service. OpenSearch Ele é escalonado automaticamente para corresponder à taxa de transferência de seus dados e não requer administração contínua.

  • O Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço gerenciado de orquestração de contêineres que facilita a implantação, o gerenciamento e a escalabilidade de aplicativos em contêineres usando o Kubernetes. Ele gerencia automaticamente a disponibilidade e a escalabilidade dos nós do plano de controle do Kubernetes.

  • AWS Key Management Service (AWS KMS) cria e controla chaves de criptografia para criptografar seus dados. AWS KMS se integra a outros Serviços da AWS para ajudá-lo a proteger os dados que você armazena com esses serviços.

  • AWS Lambdaé um serviço de computação sem servidor que permite executar código sem provisionar ou gerenciar servidores. Ele escala automaticamente seus aplicativos executando o código em resposta a cada acionador e cobra somente pelo tempo de computação que você usa.

  • O Amazon Relational Database Service (Amazon RDS) é um serviço gerenciado de banco de dados relacional que facilita a configuração, a operação e a escalabilidade de um banco de dados relacional na nuvem. Ele fornece capacidade econômica e redimensionável, ao mesmo tempo em que automatiza tarefas administrativas demoradas.

  • O Amazon Simple Queue Service (Amazon SQS) é um serviço de enfileiramento de mensagens que permite separar e escalar microsserviços, sistemas distribuídos e aplicativos sem servidor. Ele elimina a complexidade de gerenciar e operar o middleware orientado a mensagens.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado em nuvem que oferece escalabilidade, disponibilidade de dados, segurança e desempenho. Ele pode armazenar e recuperar qualquer quantidade de dados de qualquer lugar na web.

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.

Código

O código desse padrão está disponível no repositório de registro GitHub centralizado.

Práticas recomendadas

Épicos

TarefaDescriçãoHabilidades necessárias

Configure um AWS Control Tower ambiente com o AFT.

  1. Implante AWS Control Tower seguindo as instruções na AWS Control Tower documentação.

  2. Implante o AFT seguindo as instruções na AWS Control Tower documentação.

Administrador da AWS

Ative o compartilhamento de recursos para a organização.

  1. Configure AWS Command Line Interface (AWS CLI) com credenciais da conta de gerenciamento, que fornecem permissões administrativas para gerenciar AWS Control Tower.

  2. Execute o seguinte AWS CLI comando em qualquer Região da AWS:

    aws ram enable-sharing-with-aws-organization

    Isso permite o compartilhamento de recursos em sua organização em AWS Organizations todas as regiões que oferecem suporte AWS Resource Access Manager (AWS RAM).

Administrador da AWS

Verifique ou provisione contas do aplicativo.

Para provisionar novas contas de aplicativos para seu caso de uso, crie-as por meio do AFT. Para obter mais informações, consulte Provisionar uma nova conta com o AFT na AWS Control Tower documentação.

Administrador da AWS
TarefaDescriçãoHabilidades necessárias

Copie o conteúdo da Application_account pasta para o aft-account-customizations repositório.

  1. Crie uma pasta nomeada Application_account no caminho raiz do aft-account-customizations repositório. Esse repositório é criado automaticamente quando você configura o AFT (veja o épico anterior).

  2. Navegue até o diretório raiz do scale-using-terraform repositório centralised-logging-at-enterprise-, copie o conteúdo do aft/account diretório e cole-o no Application_account diretório que você criou na etapa 1 do aft-account-customizations repositório.

  3. Do diretório raiz do centralised-logging-at-enterprise-scale-using-terraform repositório, copie o conteúdo do Application_account diretório para o Application_account/terraform diretório no aft-account-customizations repositório.

  4. No aft-account-customizations/Application_account/terraform.tfvars arquivo, confirme se todos os parâmetros foram passados como argumentos nos arquivos de configuração correspondentes do Terraform.

DevOps engenheiro

Revise e edite os parâmetros de entrada para configurar a conta do aplicativo.

Nesta etapa, você configura o arquivo de configuração para criar recursos em contas de aplicativos, incluindo grupos de CloudWatch log, filtros de CloudWatch assinatura, funções e políticas do IAM e detalhes de configuração das funções Amazon RDS, Amazon EKS e Lambda.

No seu aft-account-customizations repositório, na Application_account pasta, configure os parâmetros de entrada no terraform.tfvars arquivo com base nos requisitos da sua organização:

  • environment: o nome do ambiente (por exemplo,, proddev,staging) em que os recursos serão implantados.

  • account_name: o nome do Conta da AWS local onde os recursos serão criados.

  • log_archive_account_id: o Conta da AWS ID em que os registros serão arquivados.

  • admin_role_name: o nome da função administrativa que será usada para gerenciar recursos.

  • tags: um mapa de pares de valores-chave que representam tags comuns a serem aplicadas a todos os recursos.

  • rds_config: um objeto que contém detalhes de configuração para instâncias do Amazon RDS.

  • allowed_cidr_blocks: uma lista de blocos CIDR que têm permissão para acessar os recursos.

  • destination_name:Uma variável usada para criar o Amazon Resource Name (ARN) do CloudWatch destino em que os registros serão transmitidos.

  • rds_parameters:Um objeto que contém as configurações do grupo de parâmetros do Amazon RDS.

  • vpc_config: um objeto que contém detalhes da configuração da VPC.

  • eks_config: um objeto que contém detalhes de configuração para clusters do Amazon EKS.

  • lambda_config: um objeto que contém detalhes de configuração para funções Lambda.

  • restrictive_cidr_range: uma lista de intervalos de CIDR restritivos para regras de grupos de segurança.

  • target_account_id: o Conta da AWS ID da conta do Log Archive de destino na qual os recursos serão implantados.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Copie o conteúdo da Log_archive_account pasta para o aft-account-customizations repositório.

  1. Crie uma pasta nomeada Log_archive_account no caminho raiz do aft-account-customizations repositório. Esse repositório é criado automaticamente quando você configura o AFT.

  2. Navegue até o diretório raiz do centralised-logging-at-enterprise-scale-using-terraform repositório, copie o conteúdo do aft/account diretório e cole-o no Log_archive_account diretório que você criou na etapa anterior do aft-account-customizations repositório.

  3. Do diretório raiz do centralised-logging-at-enterprise-scale-using-terraform repositório, copie o conteúdo do Log_archive_account diretório para o Log_archive_account/terraform diretório no aft-account-customizations repositório.

  4. No aft-account-customizations/Log_archive_account/terraform.tfvars arquivo, confirme se todos os parâmetros foram passados como argumentos nos arquivos de configuração correspondentes do Terraform.

DevOps engenheiro

Revise e edite os parâmetros de entrada para configurar a conta do Log Archive.

Nesta etapa, você configura o arquivo de configuração para criar recursos na conta do Log Archive, incluindo fluxos de entrega do Firehose, buckets S3, filas SQS e funções e políticas do IAM.

Na Log_archive_account pasta do seu aft-account-customizations repositório, configure os parâmetros de entrada no terraform.tfvars arquivo com base nos requisitos da sua organização:

  • environment: o nome do ambiente (por exemplo,, proddev,staging) em que os recursos serão implantados.

  • destination_name: uma variável usada para criar o ARN do CloudWatch destino em que os registros serão transmitidos.

  • source_account_ids: uma lista dos Conta da AWS IDs que podem colocar filtros de assinatura no destino do registro. Você pode inserir IDs quantas contas quiser habilitar para o registro centralizado.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Opção 1 - Implantar os arquivos de configuração do Terraform a partir do AFT.

No AFT, o pipeline do AFT é acionado depois que você envia o código com as alterações de configuração para o GitHub aft-account-customizations repositório. O AFT detecta automaticamente as alterações e inicia o processo de personalização da conta.

Depois de fazer alterações nos arquivos do Terraform (terraform.tfvars), confirme e envie suas alterações para o seu aft-account-customizations repositório:

$ git add * $ git commit -m "update message" $ git push origin main
nota

Se você estiver usando uma ramificação diferente (comodev), main substitua pelo nome da ramificação.

DevOps engenheiro

Opção 2 - Implantar o arquivo de configuração do Terraform manualmente.

Se você não estiver usando o AFT ou quiser implantar a solução manualmente, poderá usar os seguintes comandos do Terraform Log_archive_account nas pastas Application_account e:

  1. Clone o GitHub repositório e configure os parâmetros de entrada no terraform.tfvars arquivo.

  2. Execute o seguinte comando:

    $ terraform init
  3. Pré-visualize as alterações:

    $ terraform plan

    Esse comando avalia a configuração do Terraform para determinar o estado desejado dos recursos e o compara com o estado atual da sua infraestrutura.

  4. Aplique as alterações:

    $ terraform apply
  5. Revise as alterações planejadas e digite yes no prompt para continuar com a inscrição.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Verifique os filtros de assinatura.

Para verificar se os filtros de assinatura encaminham os registros corretamente dos grupos de registros da conta do aplicativo para a conta do Log Archive:

  1. Na conta do aplicativo, abra o CloudWatch console.

  2. No painel de navegação esquerdo, escolha Log groups (Grupos de log).

  3. Selecione cada grupo de registros (/aws/rds,/aws/eks,/aws/lambda) e escolha a guia Filtros de assinatura.

    Você deve ver filtros de assinatura ativos que apontam para o ARN de destino, com base no nome que você especificou no arquivo de configuração do Terraform.

  4. Escolha qualquer filtro de assinatura para verificar sua configuração e status.

DevOps engenheiro

Verifique os streams do Firehose.

Para verificar se os streams do Firehose na conta do Log Archive processam os registros do aplicativo com êxito:

  1. Na conta do Log Archive, abra o console do Firehose.

  2. No painel de navegação esquerdo, escolha Firehose streams.

  3. Escolha qualquer stream do Firehose e verifique o seguinte:

    • O destino mostra o bucket S3 correto.

    • A guia Monitoramento mostra métricas de entrega bem-sucedidas.

    • A data e hora da entrega recente é atual.

DevOps engenheiro

Valide os buckets S3 centralizados.

Para verificar se os buckets S3 centralizados recebem e organizam os registros adequadamente:

  1. Na conta do Log Archive, abra o console do Amazon S3.

  2. Selecione cada bucket de registro central.

  3. Navegue pela estrutura de pastas: AWSLogs/AccountID/Region/Service.

    Você deve ver os arquivos de log organizados por timestamp () YYYY/MM/DD/HH.

  4. Escolha qualquer arquivo de log recente e verifique seu formato e integridade dos dados.

DevOps engenheiro

Valide as filas do SQS.

Para verificar se as filas do SQS recebem notificações para novos arquivos de log:

  1. Na conta do Log Archive, abra o console do Amazon SQS.

  2. No painel de navegação à esquerda, escolha Queues (Filas).

  3. Selecione cada fila configurada e escolha Enviar e receber mensagens.

    Você deve ver mensagens que contêm notificações de eventos do S3 para novos arquivos de log.

  4. Escolha qualquer mensagem para verificar se ela contém as informações corretas do objeto S3.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Opção 1 - Desative o arquivo de configuração do Terraform do AFT.

Quando você remove os arquivos de configuração do Terraform e envia as alterações, o AFT inicia automaticamente o processo de remoção de recursos.

  1. Navegue até o aft-account-customizations repositório.

  2. Acesse o diretório terraform.

  3. Exclua os seguintes arquivos:

    • Diretório modules

    • iam.tf

    • versions.tf

    • variables.tf

    • outputs.tf

    • terraform.tfvars

  4. Limpe o conteúdo do main.tf arquivo.

  5. Envie suas alterações para o repositório:

    # Stage all changes $ git add * # Commit cleanup changes $ git commit -m "Remove AFT customizations" # Push to repository $ git push origin main
    nota

    Se você estiver usando uma ramificação diferente (comodev), main substitua pelo nome da ramificação.

DevOps engenheiro

Opção 2 — Limpe os recursos do Terraform manualmente.

Se você não estiver usando o AFT ou quiser limpar os recursos manualmente, use os seguintes comandos do Terraform Log_archive_account nas pastas Application_account e:

  1. Inicialize a configuração do Terraform:

    $ terraform init

    Esse comando inicializa o Terraform e garante o acesso ao estado atual.

  2. Pré-visualize as alterações de limpeza:

    $ terraform destroy

    Esse comando avalia quais recursos serão destruídos e compara o estado desejado com o estado atual da sua infraestrutura.

  3. Execute a limpeza. Quando solicitado, digite yes para confirmar e executar o plano de destruição.

DevOps engenheiro

Solução de problemas

ProblemaSolução

O destino dos CloudWatch registros não foi criado ou está inativo.

Valide o seguinte:

  1. Na conta do Log Archive, verifique se a política de destino inclui:

    • O principal correto da conta de origem.

    • A ação correta (logs:PutSubscriptionFilter).

    • Um ARN de destino válido.

  2. Confirme se o stream do Firehose existe e está ativo.

  3. Verifique se a função do IAM anexada ao destino tem permissões para o Firehose.

O filtro de assinatura falhou ou está preso no status pendente.

Verifique o seguinte:

  1. Na conta do aplicativo, verifique se a função do IAM tem:

    • Permissões para ligarPutSubscriptionFilter.

    • Uma relação de confiança com a CloudWatch Logs.

  2. Confirme se o ARN de destino está correto.

  3. Verifique CloudWatch os registros para ver se há mensagens de erro específicas.

O stream de entrega do Firehose não mostra registros recebidos.

Verifique o seguinte:

  1. Confirme se a função Firehose IAM tem:

    • Permissões para gravar no Amazon S3.

    • Acesso à AWS KMS chave se a criptografia estiver ativada.

  2. Analise CloudWatch as métricas para:

    • IncomingRecords

    • DeliveryToS3.Records

  3. Verifique as configurações de buffer e de entrega.

Recursos relacionados