Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configura i log di flusso VPC per la centralizzazione tra gli account AWS
Creato da Benjamin Morris (AWS) e Aman Kaur Gandhi (AWS)
Riepilogo
In un cloud privato virtuale (VPC) di Amazon Web Services (AWS), la funzionalità VPC Flow Logs può fornire dati utili per la risoluzione dei problemi operativi e di sicurezza. Tuttavia, esistono limitazioni all'utilizzo dei log di flusso VPC in un ambiente con più account. In particolare, i log di flusso tra account di Amazon CloudWatch Logs non sono supportati. Puoi invece centralizzare i log configurando un bucket Amazon Simple Storage Service (Amazon S3) con la policy dei bucket appropriata.
Nota
Questo modello illustra i requisiti per l'invio dei log di flusso a una posizione centralizzata. Tuttavia, se desideri che i log siano disponibili anche localmente negli account dei membri, puoi creare più log di flusso per ogni VPC. Gli utenti che non hanno accesso all'account Log Archive possono visualizzare i registri del traffico per la risoluzione dei problemi. In alternativa, puoi configurare un singolo log di flusso per ogni VPC che invia i log a Logs. CloudWatch Puoi quindi utilizzare un filtro di abbonamento Amazon Data Firehose per inoltrare i log a un bucket S3. Per ulteriori informazioni, consulta la sezione Risorse correlate.
Prerequisiti e limitazioni
Prerequisiti
Un account AWS attivo
Un'organizzazione AWS Organizations con un account utilizzato per centralizzare i log (ad esempio, Log Archive)
Limitazioni
Se utilizzi la chiave gestita di AWS Key Management Service (AWS KMS) aws/s3
per crittografare il tuo bucket centrale, questo non riceverà i log da un altro account. Vedrai invece un codice di Unsuccessful
errore 400 con un messaggio come quello "LogDestination: <bucketName> is undeliverable"
che hai fornito. ResourceId
Questo perché le chiavi gestite da AWS di un account non possono essere condivise tra account.
La soluzione consiste nell'utilizzare la crittografia gestita di Amazon S3 (SSE-S3) o una chiave gestita dai clienti AWS KMS che puoi condividere con gli account dei membri.
Architettura
Stack tecnologico Target
Nel diagramma seguente, vengono distribuiti due log di flusso per ogni VPC. Uno invia i log a un gruppo di Logs locale. CloudWatch L'altro invia i log a un bucket S3 in un account di registrazione centralizzato. La policy del bucket consente al servizio di consegna dei log di scrivere i log nel bucket.
Nota
A partire da novembre 2023, AWS ora supporta la chiave di condizione aws: SourceOrg ID
Architettura Target

Automazione e scalabilità
Ogni VPC è configurato per inviare i log al bucket S3 nell'account di registrazione centrale. Utilizza una delle seguenti soluzioni di automazione per garantire che i log di flusso siano configurati in modo appropriato:
Strumenti
Strumenti
Amazon CloudWatch Logs ti aiuta a centralizzare i log di tutti i tuoi sistemi, applicazioni e servizi AWS in modo da poterli monitorare e archiviare in modo sicuro.
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
Amazon Virtual Private Cloud (Amazon VPC) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito. Questa rete virtuale è simile a una rete tradizionale che gestiresti nel tuo data center, con i vantaggi dell'utilizzo dell'infrastruttura scalabile di AWS. Questo modello utilizza la funzionalità VPC Flow Logs per acquisire informazioni sul traffico IP in entrata e in uscita dalle interfacce di rete del tuo VPC.
Best practice
L'utilizzo dell'infrastruttura come codice (IaC) può semplificare notevolmente il processo di implementazione dei VPC Flow Logs. L'astrazione delle definizioni di distribuzione VPC per includere un costrutto di risorse per i log di flusso consentirà di implementare automaticamente VPCs i log di flusso. Questo è dimostrato nella prossima sezione.
Registri di flusso centralizzati
Sintassi di esempio per aggiungere registri di flusso centralizzati a un modulo VPC in Terraform HashiCorp
Questo codice crea un log di flusso che invia i log da un VPC a un bucket S3 centralizzato. Nota che questo schema non copre la creazione del bucket S3.
Per le istruzioni sulla policy consigliata per i bucket, consulta la sezione Informazioni aggiuntive.
variable "vpc_id" { type = string }
locals { 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_flow_log" {
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.
}
Per ulteriori informazioni sul formato di log personalizzato, consulta la documentazione AWS.
Registri di flusso locali
Sintassi di esempio per aggiungere registri di flusso locali a un modulo VPC in Terraform con le autorizzazioni richieste
Questo codice crea un log di flusso che invia i log da un VPC a un gruppo Logs CloudWatch locale.
data "aws_region" "current" {}
variable "vpc_id" { type = string }
resource "aws_iam_role" "local_flow_log_role" {
name = "flow-logs-policy-${var.vpc_id}"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [{
"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:CreateLog*", "logs:PutLogEvents", "logs:DescribeLog*", "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" {
name = "vpc-flow-logs/${var.vpc_id}"
retention_in_days = 30
}
resource "aws_flow_log" "local_flow_log" {
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
}
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Determina la strategia di crittografia e crea la policy per il bucket S3 centrale. | Il bucket centrale non supporta la chiave | Conformità |
Crea il bucket centrale per i log di flusso. | Crea il bucket centrale a cui verranno inviati i log di flusso e applica la strategia di crittografia scelta nel passaggio precedente. Dovrebbe trovarsi in un Log Archive o in un account con scopi simili. Ottieni la policy sui bucket dalla sezione Informazioni aggiuntive e applicala al tuo bucket centrale dopo aver aggiornato i segnaposto con i valori specifici dell'ambiente. | Informazioni generali su AWS |
Configura VPC Flow Logs per inviare i log al bucket di log di flusso centrale. | Aggiungi i log di flusso a ogni VPC da cui desideri raccogliere dati. Il modo più scalabile per farlo è utilizzare strumenti IaC come AFT o AWS Cloud Development Kit (AWS CDK). Ad esempio, puoi creare un modulo Terraform che distribuisce un VPC insieme a un log di flusso. Se necessario, aggiungi i log di flusso manualmente. | Amministratore di rete |
Configura i log di flusso VPC per l'invio ai log locali. CloudWatch | (Facoltativo) Se desideri che i log di flusso siano visibili negli account in cui vengono generati, crea un altro log di flusso per inviare i dati ai CloudWatch log nell'account locale. In alternativa, puoi inviare i dati a un bucket S3 specifico dell'account nell'account locale. | Informazioni generali su AWS |
Risorse correlate
Informazioni aggiuntive
Politica Bucket
Questo esempio di policy sui bucket può essere applicato al bucket S3 centrale per i log di flusso, dopo aver aggiunto i valori per i nomi dei segnaposto.
{
"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"
}
}
}
]
}