Configurar registros VPC de fluxo para centralização em todas as contas AWS - 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á.

Configurar registros VPC de fluxo para centralização em todas as contas AWS

Criado por Benjamin Morris (AWS) e Aman Kaur Gandhi () AWS

Ambiente: produção

Tecnologias: gestão e governança

AWSserviços: Amazon S3; Amazon VPC

Resumo

Em uma nuvem privada virtual (AWS) da Amazon Web Services (VPC), o recurso VPC Flow Logs pode fornecer dados úteis para solução de problemas operacionais e de segurança. No entanto, há limitações no uso de registros VPC de fluxo em um ambiente com várias contas. Especificamente, os registros de fluxo entre contas do Amazon CloudWatch Logs não são suportados. Em vez disso, centralize os logs configurando um bucket do Amazon Simple Storage Service (Amazon S3) com a política de bucket apropriada.

Observação: este padrão discute os requisitos para enviar logs de fluxo para um local centralizado. No entanto, se você também quiser que os registros estejam disponíveis localmente nas contas dos membros, você pode criar vários registros de fluxo para cada umVPC. Usuários sem acesso à conta do Log Archive podem ver os registros de tráfego para solucionar problemas. Como alternativa, você pode configurar um único registro de fluxo para cada um VPC que envie registros para o CloudWatch Logs. Em seguida, você pode usar um filtro de assinatura do Amazon Data Firehose para encaminhar os registros para um bucket do S3. Para obter mais informações, consulte a seção Recursos relacionados.

Pré-requisitos e limitações

Pré-requisitos

  • Uma AWS conta ativa

  • Uma organização da AWS Organizations com uma conta usada para centralizar registros (por exemplo, Log Archive)

Limitações

Se você usar a AWS chave gerenciada do Key Management Service (AWSKMS) aws/s3 para criptografar seu bucket central, ele não receberá registros de uma conta diferente. Em vez disso, você verá um erro parecido com o seguinte.

"Unsuccessful": [ { "Error": { "Code": "400", "Message": "LogDestination: <bucketName> is undeliverable" }, "ResourceId": "vpc-1234567890123456" } ]

Isso ocorre porque as chaves AWS gerenciadas de uma conta não podem ser compartilhadas entre contas.

A solução é usar a criptografia gerenciada do Amazon S3 (SSE-S3) ou uma chave gerenciada pelo AWS KMS cliente que você possa compartilhar com as contas dos membros.

Arquitetura

Pilha de tecnologias de destino

No diagrama a seguir, dois registros de fluxo são implantados para cada umVPC. Um envia registros para um grupo local CloudWatch de registros. O outro envia logs para um bucket do S3 em uma conta de registro centralizada. A política de bucket permite que o serviço de entrega de logs grave registros no bucket.

Observação: a partir de novembro de 2023, AWS agora oferece suporte à chave de condição aws: SourceOrg ID. Essa condição permite que você negue a gravação no bucket centralizado para contas fora da sua AWS Organizations organização.

Arquitetura de destino

De VPC cada registro de fluxo envia registros para CloudWatch e um registro de fluxo diz registros para o bucket do S3.

Automação e escala

Cada um VPC está configurado para enviar registros para o bucket do S3 na conta de registro central. Use uma das seguintes soluções de automação para ajudar a garantir que os logs de fluxo sejam configurados adequadamente:

Ferramentas

Ferramentas

  • O Amazon CloudWatch Logs ajuda você a centralizar os registros de todos os seus sistemas, aplicativos e AWS serviços para que você possa monitorá-los e arquivá-los com segurança.

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

  • A Amazon Virtual Private Cloud (AmazonVPC) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual se assemelha a uma rede tradicional que você operaria em seu próprio data center, com os benefícios de usar a infraestrutura escalável do. AWS Esse padrão usa o recurso VPCFlow Logs para capturar informações sobre o tráfego IP que entra e sai das interfaces de rede em seuVPC.

Práticas recomendadas

Usar a infraestrutura como código (IaC) pode simplificar muito o processo de implantação do VPC Flow Logs. Abstrair suas definições de VPC implantação para incluir uma construção de recurso de log de fluxo implantará suas VPCs com registros de fluxo automaticamente. Isso é demonstrado na próxima seção.

Logs de fluxo centralizados

Exemplo de sintaxe para adicionar registros de fluxo centralizados a um VPC módulo no Terraform HashiCorp

Esse código cria um registro de fluxo que envia registros de um VPC para um bucket S3 centralizado. Observe que esse padrão não abrange a criação do bucket do S3.

Para obter declarações de política de bucket recomendadas, consulte a seção Informações adicionais.

variable "vpc_id" { type = string description = "ID of the VPC for which you want to create a Flow Log" } locals { # For more details: https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-custom custom_log_format_v5 = "$${version} $${account-id} $${interface-id} $${srcaddr} $${dstaddr} $${srcport} $${dstport} $${protocol} $${packets} $${bytes} $${start} $${end} $${action} $${log-status} $${vpc-id} $${subnet-id} $${instance-id} $${tcp-flags} $${type} $${pkt-srcaddr} $${pkt-dstaddr} $${region} $${az-id} $${sublocation-type} $${sublocation-id} $${pkt-src-aws-service} $${pkt-dst-aws-service} $${flow-direction} $${traffic-path}" } resource "aws_flow_log" "centralized" { log_destination = "arn:aws:s3:::centralized-vpc-flow-logs-<log_archive_account_id>" # Optionally, a prefix can be added after the ARN. log_destination_type = "s3" traffic_type = "ALL" vpc_id = var.vpc_id log_format = local.custom_log_format_v5 # If you want fields from VPC Flow Logs v3+, you will need to create a custom log format. tags = { Name = "centralized_flow_log" } }

Registros de fluxo locais

Exemplo de sintaxe para adicionar registros de fluxo locais a um VPC módulo no Terraform com as permissões necessárias

Esse código cria um registro de fluxo que envia registros de um VPC para um grupo de CloudWatch registros local.

data "aws_region" "current" {} variable "vpc_id" { type = string description = "ID of the VPC for which you want to create a Flow Log" } resource "aws_iam_role" "local_flow_log_role" { name = "flow-logs-policy-${var.vpc_id }" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "vpc-flow-logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF } resource "aws_iam_role_policy" "logs_permissions" { name = "flow-logs-policy-${var.vpc_id}" role = aws_iam_role.local_flow_log_role.id policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:CreateLogDelivery", "logs:DeleteLogDelivery" ], "Effect": "Allow", "Resource": "arn:aws:logs:${data.aws_region.current.name}:*:log-group:vpc-flow-logs*" } ] } EOF } resource "aws_cloudwatch_log_group" "local_flow_logs" { # checkov:skip=CKV_AWS_338:local retention is set to 30, centralized S3 bucket can retain for long-term name = "vpc-flow-logs/${var.vpc_id}" retention_in_days = 30 } resource "aws_flow_log" "local" { iam_role_arn = aws_iam_role.local_flow_log_role.arn log_destination = aws_cloudwatch_log_group.local_flow_logs.arn traffic_type = "ALL" vpc_id = var.vpc_id tags = { Name = "local_flow_log" } }

Épicos

TarefaDescriçãoHabilidades necessárias

Determine a estratégia de criptografia e crie a política para o bucket central do S3.

O bucket central não suporta a aws/s3 AWS KMS chave, então você deve usar SSE -S3 ou uma chave gerenciada pelo AWS KMS cliente. Se você usar uma AWS KMS chave, a política de chaves deve permitir que as contas dos membros usem a chave.

Conformidade

Crie o bucket de log de fluxo central.

Crie o bucket central para o qual os logs de fluxo serão enviados e aplique a estratégia de criptografia que você escolheu na etapa anterior. Isso deve estar em um arquivo de log ou em uma conta com finalidade semelhante.

Obtenha a política do bucket na seção Informações adicionais e aplique-a ao seu bucket central depois de atualizar os espaços reservados com os valores específicos do seu ambiente.

Geral AWS

Configure os registros de VPC fluxo para enviar registros para o bucket central de registros de fluxo.

Adicione registros de fluxo VPC a cada um dos quais você deseja coletar dados. A maneira mais escalável de fazer isso é usar ferramentas de IaC, como AFT o AWS Cloud Development Kit () AWSCDK. Por exemplo, você pode criar um módulo do Terraform que implanta um VPC junto com um registro de fluxo. Se necessário, você adiciona os logs de fluxo manualmente.

Administrador de rede

Configure os registros de VPC fluxo para enviar aos CloudWatch registros locais.

(Opcional) Se você quiser que os registros de fluxo fiquem visíveis nas contas em que os registros estão sendo gerados, crie outro registro de fluxo para enviar dados para o CloudWatch Logs na conta local. Como alternativa, você pode enviar os dados para um bucket S3 específico da conta na conta local.

Geral AWS

Recursos relacionados

Mais informações

Política de bucket

Esse exemplo de política de bucket pode ser aplicado ao bucket central do S3 para logs de fluxo, depois de adicionar valores para nomes de espaço reservado.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceOrgID": "<ORG_ID>" } } }, { "Sid": "AWSLogDeliveryCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::<BUCKET_NAME>", "Condition": { "StringEquals": { "aws:SourceOrgID": "<ORG_ID>" } } }, { "Sid": "DenyUnencryptedTraffic", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::<BUCKET_NAME>/*", "arn:aws:s3:::<BUCKET_NAME>" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }