Configure los registros VPC de flujo para la centralización en todas las cuentas AWS - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configure los registros VPC de flujo para la centralización en todas las cuentas AWS

Creado por Benjamin Morris (AWS) y Aman Kaur Gandhi () AWS

Entorno: producción

Tecnologías: administración y gobierno

AWSservicios: Amazon S3; Amazon VPC

Resumen

En una nube privada virtual de Amazon Web Services (AWS) (VPC), la función VPC Flow Logs puede proporcionar datos útiles para la resolución de problemas operativos y de seguridad. Sin embargo, el uso de los registros de VPC flujo en un entorno de varias cuentas tiene limitaciones. En concreto, no se admiten los registros de flujos entre cuentas de Amazon CloudWatch Logs. En su lugar, puede centralizar los registros configurando un bucket de Amazon Simple Storage Service (Amazon S3) con la política de bucket adecuada.

Nota: Este patrón detalla los requisitos para enviar los registros de flujo a una ubicación centralizada. Sin embargo, si también desea que los registros estén disponibles localmente en las cuentas de los miembros, puede crear varios registros de flujo para cada unoVPC. Los usuarios que no tengan acceso a la cuenta de Log Archive pueden ver los registros de tráfico para solucionar los problemas. Como alternativa, puede configurar un único registro de flujo para cada uno de ellos, VPC que envíe los CloudWatch registros a Logs. A continuación, puede utilizar un filtro de suscripción a Amazon Data Firehose para reenviar los registros a un bucket de S3. Para obtener más información, consulte la sección Recursos relacionados.

Requisitos previos y limitaciones

Requisitos previos

  • Una cuenta activa AWS

  • Una AWS organización de Organizations con una cuenta que se usa para centralizar los registros (por ejemplo, Log Archive)

Limitaciones

Si utilizas la AWS clave administrada por el Servicio de administración de claves (AWSKMS) aws/s3 para cifrar tu depósito central, este no recibirá los registros de otra cuenta. En su lugar, verá un error como el siguiente.

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

Esto se debe a que las claves AWS administradas de una cuenta no se pueden compartir entre cuentas.

La solución consiste en utilizar el cifrado gestionado de Amazon S3 (SSE-S3) o una clave gestionada por el AWS KMS cliente que pueda compartir con las cuentas de los miembros.

Arquitectura

Pila de tecnología de destino

En el siguiente diagrama, se implementan dos registros de flujo para cada unoVPC. Uno envía los registros a un grupo de CloudWatch registros local. El otro envía los registros a un bucket de S3 en una cuenta de registro centralizada. La política de bucket permite al servicio de entrega de registros escribir registros en el bucket.

Nota: A partir de noviembre de 2023, AWS ahora es compatible con la clave de condición aws: SourceOrg ID. Esta condición le permite denegar la escritura en el depósito centralizado para cuentas ajenas a su AWS Organizations organización.

Arquitectura de destino

Desde cada registro VPC de flujo, se envían los registros al depósito de S3 CloudWatch y, desde un registro de flujo, se envían registros al depósito de S3.

Automatizar y escalar

Cada uno VPC está configurado para enviar registros al depósito de S3 de la cuenta de registro central. Use una de las siguientes soluciones de automatización para asegurarse de que los registros de flujo estén configurados correctamente:

Herramientas

Herramientas

  • Amazon CloudWatch Logs le ayuda a centralizar los registros de todos sus sistemas, aplicaciones y AWS servicios para que pueda supervisarlos y archivarlos de forma segura.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

  • Amazon Virtual Private Cloud (AmazonVPC) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esta red virtual se parece a una red tradicional que utilizaría en su propio centro de datos, con las ventajas de utilizar la infraestructura escalable que ofreceAWS. Este patrón utiliza la función de registros de VPC flujo para capturar información sobre el tráfico IP que entra y sale de las interfaces de red de su empresaVPC.

Prácticas recomendadas

El uso de la infraestructura como código (IaC) puede simplificar considerablemente el proceso de implementación de VPC Flow Logs. Al resumir las definiciones de VPC despliegue para incluir una construcción de recursos de registro de flujo, se desplegará automáticamente VPCs con los registros de flujo. Esto se demuestra en la siguiente sección.

Registros de flujo centralizados

Ejemplo de sintaxis para agregar registros de flujo centralizados a un VPC módulo en Terraform HashiCorp

Este código crea un registro de flujo que envía los registros desde un VPC bucket S3 centralizado. Tenga en cuenta que este patrón no incluye la creación del bucket de S3.

Para ver las instrucciones de política de bucket recomendadas, consulte la sección de Información adicional.

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 flujo locales

Ejemplo de sintaxis para agregar registros de flujo locales a un VPC módulo en Terraform con los permisos necesarios

Este código crea un registro de flujo que envía los registros desde un grupo de registros local VPC a un grupo de CloudWatch registros.

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" } }

Epics

TareaDescripciónHabilidades requeridas

Determine la estrategia de cifrado y cree la política para el bucket de S3 central.

El depósito central no admite la aws/s3 AWS KMS clave, por lo que debe usar SSE -S3 o una clave administrada por el AWS KMS cliente. Si usa una AWS KMS clave, la política de claves debe permitir que las cuentas de los miembros usen la clave.

Conformidad

Cree el bucket de registro de flujo central.

Cree el bucket central al que se enviarán los registros de flujo y aplique la estrategia de cifrado que eligió en el paso anterior. Debe estar en un archivo de registro o en una cuenta con un propósito similar.

Consulte la política de bucket en la sección de Información adicional y aplíquela a su bucket central después de actualizar los marcadores de posición con los valores específicos de su entorno.

General AWS

Configure los registros de VPC flujo para enviar los registros al depósito de registros de flujo central.

Agregue registros de flujo a cada uno de los VPC que desee recopilar datos. La forma más escalable de hacerlo es utilizar herramientas de iAC, como AFT el AWS Cloud Development Kit (AWSCDK). Por ejemplo, puedes crear un módulo de Terraform que despliegue un registro de flujo VPC junto con otro. Si es necesario, añada los registros de flujo manualmente.

Administrador de red

Configure los registros VPC de flujo para enviarlos a los registros locales CloudWatch .

(Opcional) Si desea que los registros de flujo estén visibles en las cuentas en las que se generan los registros, cree otro registro de flujo para enviar datos a CloudWatch los registros de la cuenta local. Como alternativa, puede enviar los datos a un bucket de S3 específico de la cuenta en la cuenta local.

General AWS

Recursos relacionados

Información adicional

Política de bucket

Este ejemplo de política de bucket se puede aplicar a su bucket central de S3 para los registros de flujo después de añadir valores en los nombres de los marcadores de posición.

{ "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" } } } ] }