Comment activer la journalisation AWS WAF et envoyer des journaux vers CloudWatch, Amazon S3 ou Kinesis Data Firehose ?

Dernière mise à jour : 22/07/2022

Je veux activer la journalisation pour AWS WAF et envoyer les journaux vers Amazon CloudWatch, Amazon Simple Storage Service (Amazon S3) ou Amazon Kinesis Data Firehose. Comment activer les journaux AWS WAF et quelles sont les autorisations requises ?

Brève description

Tout d'abord, sélectionnez une destination prise en charge pour votre liste ACL Web AWS WAF. AWS WAF prend en charge les destinations de journaux suivantes :

Assurez-vous de disposer des autorisations de ressources nécessaires pour activer les journaux AWS WAF. Ensuite, activez les journaux AWS WAF en utilisant la destination sélectionnée.

Solution

Les destinations suivantes sont prises en charge pour le stockage de vos journaux AWS WAF :

Amazon CloudWatch Logs

Pour envoyer les journaux à un groupe de journaux CloudWatch Logs, définissez le groupe de journaux CloudWatch Logs comme destination lors de l'activation des journaux AWS WAF.

Créez un nouveau groupe de journaux ou utilisez-en un existant. Lorsqu'ils sont activés, les journaux AWS WAF sont envoyés aux groupes de journaux dans des flux de journaux. Vous pouvez analyser ces journaux à l'aide de Logs Insights. Pour obtenir plus d'informations, consultez la section What are my options to analyze AWS WAF logs stored in CloudWatch or Amazon S3?

Lorsque vous utilisez des journaux CloudWatch, tenez compte des points suivants :

  • Les noms des groupes de journaux doivent commencer par le préfixe aws-waf-logs-.
  • Les groupes de journaux doivent appartenir au même compte et à la même région AWS que votre liste ACL Web. Pour les listes ACL Web globales associées à CloudFront, le groupe de journaux doit se trouver dans la région USA Est (Virginie du Nord).
  • Les groupes de journaux ont des quotas pour les groupes de journaux lors du stockage des journaux.
  • Les flux de journaux créés dans des groupes de journaux ont le format suivant :
Region_web-acl-name_log-stream-number

Autorisations nécessaires

Le compte qui active les journaux AWS WAF à l'aide du groupe de journaux CloudWatch Logs doit disposer des autorisations suivantes :

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • logs:PutResourcePolicy
  • logs:DescribeResourcePolicies
  • logs:DescribeLogGroups

Ces autorisations sont nécessaires pour modifier la configuration de la journalisation des listes ACL Web, configurer la livraison des journaux et pour récupérer et modifier les autorisations d'un groupe de journaux. Ces autorisations doivent être attribuées à l'utilisateur qui gère AWS WAF.

Lorsque ces autorisations sont attribuées, AWS ajoute automatiquement la politique suivante aux politiques basées sur les ressources de CloudWatch Logs. Cela permet aux services de livraison de transmettre les journaux à un groupe de journaux CloudWatch Logs.
Remarque : le numéro de compte et l'Amazon Resource Name (ARN) seront spécifiques à votre compte pour la politique suivante.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSLogDeliveryWrite20150319",
      "Effect": "Allow",
      "Principal": {
        "Service": ["delivery.logs.amazonaws.com"]
      },
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": ["arn:aws:logs:us-east-1:0123456789:log-group:my-log-group:log-stream:*"],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": ["0123456789"]
        },
        "ArnLike": {
          "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"]
        }
      }
    }
  ]
}

Si vous ne voyez pas de journaux dans votre groupe de journaux, vérifiez si les autorisations nécessaires précédentes sont ajoutées à la politique basée sur les ressources de votre groupe de journaux à l'aide de l'API DescribeResourcePolicies. Vous pouvez modifier la politique basée sur les ressources pour les services de journaux à l'aide de PutResourcePolicy.

Pour plus d'informations sur les autorisations des groupes de journaux, consultez la section Activation de la journalisation à partir de certains services AWS.

Compartiment Amazon S3

Pour envoyer les journaux vers un compartiment Amazon S3, définissez le compartiment S3 comme destination lors de l'activation des journaux AWS WAF.

Les listes ACL Web publient les fichiers journaux dans un compartiment S3 toutes les cinq minutes. La taille maximale du fichier est de 75 mégaoctets (Mo). Si la taille du fichier dépasse la taille maximale, un nouveau fichier est journalisé. Lorsque les journaux sont activés, vous pouvez les analyser à l'aide d'Amazon Athena. Pour plus d'informations, consultez la section Interrogation des journaux AWS WAF.

Les noms de compartiment S3 pour la journalisation AWS WAF doivent commencer par le préfixe aws-waf-logs-.

Autorisations nécessaires

Le compte qui active les journaux AWS WAF à l'aide d'un compartiment S3 doit disposer des autorisations suivantes :

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • s3:PutBucketPolicy
  • s3:GetBucketPolicy

Ces autorisations sont nécessaires pour activer la journalisation AWS WAF et configurer la livraison des journaux pour un compartiment S3. Ils sont également nécessaires pour récupérer et modifier la politique de compartiment permettant la livraison des journaux AWS WAF vers un compartiment S3.

Lorsque ces autorisations sont attribuées, l'exemple de politique suivant est automatiquement ajouté à la politique de compartiment pour permettre la livraison des journaux au compartiment S3 :
Remarque : le numéro de compte et l'Amazon Resource Name (ARN) sont spécifiques à votre compte pour la politique suivante.

{
  "Version": "2012-10-17",
  "Id": "AWSLogDeliveryWrite20150319",
  "Statement": [
    {
      "Sid": "AWSLogDeliveryAclCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::my-bucket",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": [
            "0123456789"
          ]
        },
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:logs:us-east-1:0123456789:*"
          ]
        }
      }
    },
    {
      "Sid": "AWSLogDeliveryWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket/AWSLogs/account-ID/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control",
          "aws:SourceAccount": [
            "0123456789"
          ]
        },
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:logs:us-east-1:0123456789:*"
          ]
        }
      }
    }
  ]
}

Si vous ne voyez pas les journaux AWS WAF dans le compartiment S3, vérifiez si les autorisations nécessaires sont présentes dans la politique de compartiment à l'aide de l'API GetBucketPolicy. Vous pouvez modifier la politique de compartiment à l'aide de l'API PutBucketPolicy.

Pour envoyer des journaux vers un autre compte ou une autre région AWS, consultez la section Comment envoyer les journaux AWS WAF vers un compartiment Amazon S3 dans un compte de journalisation centralisé ?

Amazon Kinesis Data Firehose

Pour envoyer les journaux AWS WAF au flux Kinesis Data Firehose, vous devez créer un flux de diffusion. Le flux de diffusion possède différentes destinations de stockage des journaux.

Lorsque vous utilisez Kinesis Data Firehose, tenez compte des points suivants :

  • Le nom Kinesis Data Firehose doit commencer par le préfixe aws-waf-logs-.
  • Le flux de diffusion Kinesis Data Firehose doit se trouver dans le même compte et la même région AWS que votre ACL Web. Pour les ACL Web globales associées à CloudFront, Kinesis Data Firehose doit se trouver dans la région USA Est (Virginie du Nord).
  • Un journal AWS WAF équivaut à un enregistrement Kinesis Data Firehose et est soumis aux quotas Amazon Kinesis Data Firehose.
    Important : si vous recevez plus de 10 000 demandes par seconde, vos données sont limitées et toutes les demandes ne sont pas journalisées. Pour éviter la limitation, vous devez demander une augmentation du quota pour Kinesis Data Firehose.

Autorisations nécessaires

Le compte qui active les journaux AWS WAF à l'aide de la destination Kinesis Data Firehose doit disposer des autorisations suivantes :

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • iam:CreateServiceLinkedRole
  • firehose:ListDeliveryStreams

Pour plus d'informations sur les rôles liés aux services et l'autorisation iam:CreateServiceLinkedRole, consultez la section Utilisation des rôles liés aux services pour AWS WAF.

Pour créer un flux de diffusion Kinesis Data Firehose, procédez comme suit :

  1. Ouvrez la console Amazon Kinesis.
  2. Pour Region (Région), sélectionnez la région AWS dans laquelle vous avez créé votre liste ACL web.
    Remarque : sélectionnez Global si votre liste ACL Web est configurée pour Amazon CloudFront.
  3. Dans le panneau de navigation, sélectionnez Delivery streams (Flux de diffusion).
  4. Choisissez Create delivery stream (Créer un flux de diffusion).
  5. Pour Source, choisissez Direct PUT (PUT direct).
  6. Pour Destination, choisissez parmi les destinations disponibles pour Kinesis Firehose.
  7. Pour Delivery stream name (Nom du flux de diffusion), saisissez un nom commençant par aws-waf-logs- pour votre flux de diffusion.
  8. Vérifiez que Data transformation (Transformation des données) et Record format conversion (Conversion du format d'enregistrement) sont définis sur Disabled (Désactivé).
  9. Saisissez les paramètres Destination settings (Paramètres de destination) en fonction de la méthode de destination que vous avez choisie à l'étape 6.
  10. (Facultatif) Pour Buffer hints, compression and encryption (Indices, compression et chiffrage de tampon), configurez selon vos spécifications ou conservez les paramètres par défaut.
  11. (Facultatif) Pour Advanced settings (Paramètres avancés), configurez selon vos spécifications ou conservez les paramètres par défaut.
  12. Vérifiez les paramètres du flux de diffusion. Si les paramètres correspondent à vos spécifications, choisissez Create delivery stream (Créer un flux de diffusion).

Activer les journaux AWS WAF

Après avoir choisi la destination vers laquelle vous souhaitez envoyer vos journaux AWS WAF, activez la journalisation AWS WAF en procédant comme suit :

  1. Ouvrez la console AWS WAF.
  2. Pour Region (Région), sélectionnez la région AWS dans laquelle vous avez créé votre liste ACL web.
    Remarque : sélectionnez Global si votre liste ACL web est configurée pour Amazon CloudFront.
  3. Sélectionnez votre liste ACL Web.
  4. Choisissez Logging and Metrics (Journalisation et métriques), puis Enable (Activer).
  5. Sélectionnez la Destination où vous souhaitez stocker les journaux AWS WAF parmi les destinations prises en charge.
  6. Pour Redacted fields (Champs censurés), sélectionnez les champs que vous souhaitez omettre des journaux.
  7. Pour Filter logs (Filtrer les journaux), ajoutez le filtre pour contrôler les demandes que vous souhaitez stocker.
  8. Choisissez Save (Enregistrer).

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?