Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Konfiguration von VPC Flow Logs für die Zentralisierung über AWS-Konten hinweg
Erstellt von Benjamin Morris (AWS) und Aman Kaur Gandhi (AWS)
Übersicht
In einer virtuellen privaten Cloud (VPC) von Amazon Web Services (AWS) kann die VPC Flow Logs-Funktion nützliche Daten für betriebliche und sicherheitstechnische Problembehebungen bereitstellen. Es gibt jedoch Einschränkungen bei der Verwendung von VPC Flow Logs in einer Umgebung mit mehreren Konten. Insbesondere kontenübergreifende Datenflussprotokolle von Amazon CloudWatch Logs werden nicht unterstützt. Stattdessen können Sie die Protokolle zentralisieren, indem Sie einen Amazon Simple Storage Service (Amazon S3) -Bucket mit der entsprechenden Bucket-Richtlinie konfigurieren.
Anmerkung
In diesem Muster werden die Anforderungen für das Senden von Flow-Protokollen an einen zentralen Ort beschrieben. Wenn Sie jedoch möchten, dass Protokolle auch lokal in Mitgliedskonten verfügbar sind, können Sie für jede VPC mehrere Flow-Logs erstellen. Benutzer ohne Zugriff auf das Log Archive-Konto können Datenverkehrsprotokolle zur Fehlerbehebung einsehen. Alternativ können Sie ein einzelnes Flow-Protokoll für jede VPC konfigurieren, die CloudWatch Protokolle an Logs sendet. Anschließend können Sie einen Amazon Data Firehose-Abonnementfilter verwenden, um die Protokolle an einen S3-Bucket weiterzuleiten. Weitere Informationen finden Sie im Abschnitt Verwandte Ressourcen.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto
Eine Organisation von AWS Organizations mit einem Konto, das zur Zentralisierung von Protokollen verwendet wird (z. B. Log Archive)
Einschränkungen
Wenn Sie den verwalteten Schlüssel des AWS Key Management Service (AWS KMS) verwenden, aws/s3
um Ihren zentralen Bucket zu verschlüsseln, empfängt er keine Protokolle von einem anderen Konto. Stattdessen wird Ihnen der Unsuccessful
Fehlercode 400 mit einer Meldung wie "LogDestination: <bucketName> is undeliverable"
der von Ihnen angegebenen ResourceId
angezeigt.
Dies liegt daran, dass die von AWS verwalteten Schlüssel eines Kontos nicht von mehreren Konten gemeinsam genutzt werden können.
Die Lösung besteht darin, entweder die von Amazon S3 verwaltete Verschlüsselung (SSE-S3) oder einen vom Kunden verwalteten AWS KMS-Schlüssel zu verwenden, den Sie mit Mitgliedskonten teilen können.
Architektur
Zieltechnologie-Stack
In der folgenden Abbildung werden zwei Flow-Logs für jede VPC bereitgestellt. Einer sendet Protokolle an eine lokale CloudWatch Protokollgruppe. Die andere sendet Protokolle an einen S3-Bucket in einem zentralen Protokollierungskonto. Die Bucket-Richtlinie ermöglicht es dem Log-Lieferdienst, Logs in den Bucket zu schreiben.
Anmerkung
Seit November 2023 unterstützt es AWS jetzt den Bedingungsschlüssel aws: SourceOrg ID
Zielarchitektur

Automatisierung und Skalierung
Jede VPC ist so konfiguriert, dass sie Protokolle an den S3-Bucket im zentralen Protokollierungskonto sendet. Verwenden Sie eine der folgenden Automatisierungslösungen, um sicherzustellen, dass die Flow-Logs ordnungsgemäß konfiguriert sind:
Tools
Tools
Amazon CloudWatch Logs hilft Ihnen dabei, die Protokolle all Ihrer Systeme, Anwendungen und AWS-Services zu zentralisieren, sodass Sie sie überwachen und sicher archivieren können.
Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
Amazon Virtual Private Cloud (Amazon VPC) hilft Ihnen, AWS-Ressourcen in einem von Ihnen definierten virtuellen Netzwerk zu starten. Dieses virtuelle Netzwerk ähnelt einem herkömmlichen Netzwerk, das Sie in Ihrem eigenen Rechenzentrum betreiben würden, mit den Vorteilen der skalierbaren Infrastruktur von AWS. Dieses Muster verwendet die Funktion VPC Flow Logs, um Informationen über den IP-Verkehr zu und von Netzwerkschnittstellen in Ihrer VPC zu erfassen.
Bewährte Methoden
Die Verwendung von Infrastructure as Code (IaC) kann den Bereitstellungsprozess von VPC Flow Logs erheblich vereinfachen. Wenn Sie Ihre VPC-Bereitstellungsdefinitionen so abstrahieren, dass sie ein Flow-Log-Ressourcenkonstrukt enthalten, werden Ihre VPCs With-Flow-Logs automatisch bereitgestellt. Dies wird im nächsten Abschnitt demonstriert.
Zentralisierte Flussprotokolle
Beispielsyntax für das Hinzufügen zentraler Flow-Logs zu einem VPC-Modul in Terraform HashiCorp
Dieser Code erstellt ein Flow-Protokoll, das Protokolle von einer VPC an einen zentralen S3-Bucket sendet. Beachten Sie, dass dieses Muster nicht die Erstellung des S3-Buckets abdeckt.
Empfohlene Bucket-Richtlinien finden Sie im Abschnitt Zusätzliche Informationen.
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.
}
Weitere Informationen zum benutzerdefinierten Protokollformat finden Sie in der AWS-Dokumentation.
Lokale Datenflussprotokolle
Beispielsyntax für das Hinzufügen von lokalen Flow-Logs zu einem VPC-Modul in Terraform mit den erforderlichen Berechtigungen
Dieser Code erstellt ein Flow-Protokoll, das Protokolle von einer VPC an eine lokale CloudWatch Logs-Gruppe sendet.
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
}
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Ermitteln Sie die Verschlüsselungsstrategie und erstellen Sie die Richtlinie für den zentralen S3-Bucket. | Der zentrale Bucket unterstützt den | Compliance |
Erstellen Sie den zentralen Flow-Log-Bucket. | Erstellen Sie den zentralen Bucket, an den die Flow-Logs gesendet werden, und wenden Sie die Verschlüsselungsstrategie an, die Sie im vorherigen Schritt ausgewählt haben. Dies sollte sich in einem Log-Archiv oder einem Konto mit ähnlichem Zweck befinden. Rufen Sie die Bucket-Richtlinie im Abschnitt Zusätzliche Informationen ab und wenden Sie sie auf Ihren zentralen Bucket an, nachdem Sie die Platzhalter mit Ihren umgebungsspezifischen Werten aktualisiert haben. | Allgemeines AWS |
Konfigurieren Sie VPC Flow Logs so, dass Protokolle an den zentralen Flow-Log-Bucket gesendet werden. | Fügen Sie jeder VPC, von der Sie Daten sammeln möchten, Flow-Logs hinzu. Der skalierbarste Weg, dies zu tun, ist die Verwendung von IaC-Tools wie AFT oder AWS Cloud Development Kit (AWS CDK). Sie können beispielsweise ein Terraform-Modul erstellen, das eine VPC zusammen mit einem Flow-Log bereitstellt. Bei Bedarf fügen Sie die Flow-Logs manuell hinzu. | Netzwerkadministrator |
Konfigurieren Sie VPC Flow Logs so, dass sie an lokale CloudWatch Logs gesendet werden. | (Optional) Wenn Sie möchten, dass Flow-Protokolle in den Konten sichtbar sind, in denen die Protokolle generiert werden, erstellen Sie ein weiteres Flow-Protokoll, um Daten an CloudWatch Logs im lokalen Konto zu senden. Alternativ können Sie die Daten an einen kontospezifischen S3-Bucket im lokalen Konto senden. | Allgemeines AWS |
Zugehörige Ressourcen
Zusätzliche Informationen
Bucket-Richtlinie
Dieses Beispiel für eine Bucket-Richtlinie kann auf Ihren zentralen S3-Bucket für Flow-Logs angewendet werden, nachdem Sie Werte für Platzhalternamen hinzugefügt haben.
{
"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"
}
}
}
]
}