Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Configurer les journaux de flux VPC pour les centraliser sur les comptes AWS
Créée par Benjamin Morris (AWS) et Aman Kaur Gandhi (AWS)
Récapitulatif
Dans un cloud privé virtuel (VPC) Amazon Web Services (AWS), la fonctionnalité VPC Flow Logs peut fournir des données utiles pour le dépannage opérationnel et de sécurité. Cependant, l'utilisation des journaux de flux VPC dans un environnement multi-comptes est limitée. Plus précisément, les journaux de flux entre comptes d'Amazon CloudWatch Logs ne sont pas pris en charge. Vous pouvez plutôt centraliser les journaux en configurant un compartiment Amazon Simple Storage Service (Amazon S3) avec la politique de compartiment appropriée.
Note
Ce modèle décrit les exigences relatives à l'envoi de journaux de flux vers un emplacement centralisé. Toutefois, si vous souhaitez également que les journaux soient disponibles localement dans les comptes membres, vous pouvez créer plusieurs journaux de flux pour chaque VPC. Les utilisateurs n'ayant pas accès au compte Log Archive peuvent consulter les journaux de trafic pour résoudre les problèmes. Vous pouvez également configurer un journal de flux unique pour chaque VPC qui envoie des journaux à CloudWatch Logs. Vous pouvez ensuite utiliser un filtre d'abonnement Amazon Data Firehose pour transférer les journaux vers un compartiment S3. Pour plus d'informations, consultez la section Ressources connexes.
Conditions préalables et limitations
Prérequis
Un compte AWS actif
Une organisation AWS Organizations disposant d'un compte utilisé pour centraliser les journaux (par exemple, Log Archive)
Limites
Si vous utilisez la clé gérée par AWS Key Management Service (AWS KMS) aws/s3
pour chiffrer votre compartiment central, celui-ci ne recevra pas les journaux d'un autre compte. Au lieu de cela, vous verrez un code Unsuccessful
d'erreur 400 avec un message tel que "LogDestination: <bucketName> is undeliverable"
pour votre compteResourceId
.
Cela est dû au fait que les clés gérées par AWS d'un compte ne peuvent pas être partagées entre les comptes.
La solution consiste à utiliser le chiffrement géré par Amazon S3 (SSE-S3) ou une clé gérée par le client AWS KMS que vous pouvez partager avec les comptes des membres.
Architecture
Pile technologique cible
Dans le schéma suivant, deux journaux de flux sont déployés pour chaque VPC. L'un d'eux envoie des journaux à un groupe de CloudWatch journaux local. L'autre envoie les journaux vers un compartiment S3 dans un compte de journalisation centralisé. La politique de compartiment autorise le service de livraison de journaux à écrire des journaux dans le compartiment.
Note
Depuis novembre 2023, prend AWS désormais en charge la clé de condition aws : SourceOrg ID
Architecture cible

Automatisation et mise à l'échelle
Chaque VPC est configuré pour envoyer des journaux au compartiment S3 du compte de journalisation central. Utilisez l'une des solutions d'automatisation suivantes pour vous assurer que les journaux de flux sont correctement configurés :
Outils
Outils
Amazon CloudWatch Logs vous aide à centraliser les journaux de tous vos systèmes, applications et services AWS afin que vous puissiez les surveiller et les archiver en toute sécurité.
Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
Amazon Virtual Private Cloud (Amazon VPC) vous aide à lancer des ressources AWS dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages liés à l'utilisation de l'infrastructure évolutive d'AWS. Ce modèle utilise la fonctionnalité VPC Flow Logs pour capturer des informations sur le trafic IP à destination et en provenance des interfaces réseau de votre VPC.
Bonnes pratiques
L'utilisation de l'infrastructure en tant que code (IaC) peut considérablement simplifier le processus de déploiement des journaux de flux VPC. Si vous extrayez les définitions de déploiement de votre VPC pour inclure une structure de ressources de journal de flux, VPCs vous serez automatiquement déployé avec les journaux de flux. Cela est démontré dans la section suivante.
Journaux de flux centralisés
Exemple de syntaxe pour ajouter des journaux de flux centralisés à un module VPC dans Terraform HashiCorp
Ce code crée un journal de flux qui envoie les journaux d'un VPC vers un compartiment S3 centralisé. Notez que ce modèle ne couvre pas la création du compartiment S3.
Pour les déclarations de politique relatives aux compartiments recommandées, consultez la section Informations supplémentaires.
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.
}
Pour plus d'informations sur le format de journal personnalisé, consultez la documentation AWS.
Journaux de flux locaux
Exemple de syntaxe pour ajouter des journaux de flux locaux à un module VPC dans Terraform avec les autorisations requises
Ce code crée un journal de flux qui envoie des journaux d'un VPC à un groupe de CloudWatch journaux local.
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
}
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Déterminez la stratégie de chiffrement et créez la politique pour le compartiment S3 central. | Le compartiment central ne prend pas en charge la clé | Conformité d' |
Créez le compartiment à journaux de flux central. | Créez le compartiment central vers lequel les journaux de flux seront envoyés et appliquez la stratégie de chiffrement que vous avez choisie à l'étape précédente. Cela doit se trouver dans une archive de journaux ou dans un compte à usage similaire. Obtenez la politique de compartiment dans la section Informations supplémentaires et appliquez-la à votre compartiment central après avoir mis à jour les espaces réservés avec les valeurs spécifiques à votre environnement. | AWS général |
Configurez les journaux de flux VPC pour envoyer les journaux au bucket de journaux de flux central. | Ajoutez des journaux de flux à chaque VPC à partir duquel vous souhaitez collecter des données. La méthode la plus évolutive consiste à utiliser des outils IaC tels que AFT ou AWS Cloud Development Kit (AWS CDK). Par exemple, vous pouvez créer un module Terraform qui déploie un VPC parallèlement à un journal de flux. Si nécessaire, vous ajoutez les journaux de flux manuellement. | Administrateur réseau |
Configurez les journaux de flux VPC à envoyer aux journaux locaux CloudWatch . | (Facultatif) Si vous souhaitez que les journaux de flux soient visibles dans les comptes sur lesquels ils sont générés, créez un autre journal de flux pour envoyer des données aux CloudWatch journaux du compte local. Vous pouvez également envoyer les données vers un compartiment S3 spécifique au compte dans le compte local. | AWS général |
Ressources connexes
Informations supplémentaires
Politique relative aux compartiments
Cet exemple de politique de compartiment peut être appliqué à votre compartiment S3 central pour les journaux de flux, après avoir ajouté des valeurs pour les noms d'espaces réservés.
{
"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"
}
}
}
]
}