View a markdown version of this page

Configuração do registro em log centralizado em escala empresarial 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á.

Configuração do registro em log centralizado em escala empresarial usando o Terraform

Aarti Rajput, Yashwant Patel e Nishtha Yadav, Amazon Web Services

Resumo

O registro em log 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 logs com controles de segurança integrados

  • Processamento de logs 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 fluxo de logs de throughput ao Amazon S3 para armazenamento em longo prazo. O Amazon Simple Queue Service (Amazon SQS) é configurado para receber notificações de eventos do Amazon S3 na criação de objetos. Isso permite a integração com serviços de analytics, 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 Quick Sight 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 logs: uma conta dedicada para armazenamento e gerenciamento centralizados de logs

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 em log centralizado da AWS para coletar logs de várias contas de aplicações.

O fluxo de trabalho inclui cinco processos:

  1. Processo de fluxo de logs

    • 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 logs no nível do grupo de logs em cada conta de aplicação.

    • 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 logs, para que você possa especificar padrões de log exatos ou fluxos de log completos para centralização.

  2. Transferência de logs 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 performance e escalabilidade ideais.

  3. Processamento de logs na conta de arquivamento de logs

    • Na conta de arquivamento de logs, o Firehose processa os fluxos de logs recebidos.

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

    • Esses fluxos do Firehose entregam os logs processados aos buckets do S3 na conta de arquivamento de logs, que está localizada na mesma região das contas de aplicações de origem (Região A no diagrama) para manter os requisitos de soberania de dados.

  4. Notificações e fluxos de trabalho adicionais

    • Quando os logs chegam aos buckets do S3 de destino, a arquitetura implementa um sistema de notificações usando o Amazon SQS.

    • As filas regionais de SQS permitem o processamento assíncrono e podem acionar fluxos de trabalho adicionais, analytics ou sistemas de alertas com base nos logs 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 logs armazenados mantenham a criptografia em repouso, assegurando 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 faz o dimensionamento automático para corresponder ao throughput 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 o dimensionamento de aplicações em contêineres usando o Kubernetes. Ele gerencia automaticamente a disponibilidade e a escalabilidade dos nós do ambiente de gerenciamento 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.

  • O AWS Lambda é um serviço de computação com tecnologia sem servidor que permite executar código sem provisionar nem gerenciar servidores. Ele dimensiona automaticamente as aplicações executando o código em resposta a cada gatilho e cobra apenas pelo tempo de computação usado.

  • O Amazon Relational Database Service (Amazon RDS) é um serviço de banco de dados relacional gerenciado que facilita a configuração, a operação e o dimensionamento de um banco de dados relacional na nuvem. Ele fornece recursos econômicos e redimensionáveis enquanto automatiza tarefas administrativas demoradas.

  • O Amazon Simple Queue Service (Amazon SQS) é um serviço de enfileiramento de mensagens que permite desacoplar e dimensionar microsserviços, sistemas distribuídos e aplicações com tecnologia 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 na nuvem que oferece escalabilidade, disponibilidade de dados, segurança e performance. 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

TarefaDescriptionHabilidades 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 documentação do AWS Control Tower.

Administrador da AWS

Habilite o compartilhamento de recursos na 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 de aplicações.

Para provisionar novas contas de aplicações 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
TarefaDescriptionHabilidades necessárias

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

  1. Crie uma pasta chamada Application_account no caminho-raiz do repositório aft-account-customizations. Esse repositório é criado automaticamente quando você configura o AFT (confira 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. No diretório-raiz do repositório centralised-logging-at-enterprise-scale-using-terraform, copie o conteúdo do diretório Application_account para o diretório Application_account/terraform no repositório aft-account-customizations.

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

DevOps engenheiro

Analise e edite os parâmetros de entrada para configurar a conta de aplicação.

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 repositório aft-account-customizations, na pasta Application_account, configure os parâmetros de entrada no arquivo terraform.tfvars com base nos requisitos da sua organização:

  • environment: o nome do ambiente (por exemplo, prod, dev, 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 do perfil administrativo que será usado para gerenciar recursos.

  • tags: um mapa de pares de chave/valor que representam marcações 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 os detalhes de configuração da VPC.

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

  • lambda_config: um objeto que contém os detalhes de configuração para funções do 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
TarefaDescriptionHabilidades necessárias

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

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

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

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

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

DevOps engenheiro

Analise e edite os parâmetros de entrada para configurar a conta de arquivamento de logs.

Nesta etapa, você define o arquivo de configuração para criar recursos na conta de arquivamento de logs, incluindo fluxos de entrega do Firehose, buckets do S3, filas do SQS e políticas e perfis do IAM.

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

  • environment: o nome do ambiente (por exemplo, prod, dev, 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
TarefaDescriptionHabilidades necessárias

Opção 1: implante os arquivos de configuração do Terraform pelo 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 repositório aft-account-customizations:

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

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

DevOps engenheiro

Opção 2: implante o arquivo de configuração do Terraform manualmente.

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

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

  2. Execute este 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 faz uma comparação com o estado atual da sua infraestrutura.

  4. Aplique as alterações:

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

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Verifique os filtros de assinatura.

Para verificar se os filtros de assinatura encaminham os logs corretamente dos grupos de logs da conta de aplicação para a conta de arquivamento de logs:

  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 logs (/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 especificado no arquivo de configuração do Terraform.

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

DevOps engenheiro

Verifique os fluxos do Firehose.

Para verificar se os fluxos do Firehose na conta de arquivamento de logs processam os logs de aplicações corretamente:

  1. Na conta de arquivamento de logs, abra o console do Firehose.

  2. No painel de navegação à esquerda, escolha Fluxos do Firehose.

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

    • O destino mostra o bucket do S3 correto.

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

    • O carimbo de data/hora da entrega recente é atual.

DevOps engenheiro

Valide os buckets do S3 centralizados.

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

  1. Na conta de arquivamento de logs, abra o console do Amazon S3.

  2. Selecione cada bucket de registro em log 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 a integridade dos dados.

DevOps engenheiro

Valide as filas do SQS.

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

  1. Na conta de arquivamento de logs, 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 do S3.

DevOps engenheiro
TarefaDescriptionHabilidades 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 repositório aft-account-customizations.

  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. Apague o conteúdo do arquivo main.tf.

  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 (como dev), substitua main 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 se quiser limpar os recursos manualmente, use os seguintes comandos do Terraform nas pastas Application_account e Log_archive_account:

  1. Inicialize a configuração do Terraform:

    $ terraform init

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

  2. Teste as alterações de limpeza:

    $ terraform destroy

    Esse comando avalia quais recursos serão destruídos e faz uma comparação do 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 de arquivamento de logs, verifique se a política de destino inclui:

    • A entidade principal da conta de origem correta.

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

    • Um ARN de destino válido.

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

  3. Verifique se o perfil do IAM anexado ao destino tem permissões para o Firehose.

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

Verifique o seguinte:

  1. Na conta de aplicação, verifique se o perfil do IAM tem:

    • Permissões para chamar PutSubscriptionFilter.

    • 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 fluxo de entrega do Firehose não mostra registros de entrada.

Verifique o seguinte:

  1. Confirme se o perfil do IAM do Firehose:

    • 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 definições de buffer e as configurações de entrega.

Recursos relacionados