Les logs de service AWS peuvent être recueillis via la fonction Lambda du Forwarder Datadog. Ce Lambda, qui se déclenche sur les compartiments S3, les groupes de logs CloudWatch et les événements EventBridge, transmet les logs à Datadog.
Pour commencer à recueillir des logs à partir de vos services AWS :
Activez la journalisation pour votre service AWS (la plupart des services AWS peuvent se connecter à un compartiment S3 ou à un groupe de logs CloudWatch).
Configurez les déclencheurs qui entraînent l’exécution de la fonction Lambda du Forwarder lorsqu’il y a de nouveaux logs à transférer. Les déclencheurs peuvent être configurés de deux façons différentes.
Remarque : CloudFormation crée une stratégie IAM qui inclut l’autorisation KMS:Decrypt pour toutes les ressources, ce qui n’est pas conforme aux bonnes pratiques d’AWS Security Hub. Cette autorisation sert à déchiffrer les objets des compartiments S3 chiffrés par KMS dans le but de configurer la fonction Lambda, et il est impossible de prévoir la clé KMS qui sera utilisée pour chiffrer les compartiments S3. Vous pouvez supprimer cette autorisation en toute sécurité une fois l’installation terminée.
Tous les services AWS qui génèrent des logs dans un compartiment S3 ou un groupe de logs CloudWatch sont pris en charge. Consultez les instructions de configuration des services les plus utilisés dans le tableau ci-dessous :
Service AWS
Activation de la journalisation pour le service AWS
Il existe deux méthodes de configuration des déclencheurs sur la fonction Lambda du Forwarder Datadog :
Automatiquement : Datadog récupère automatiquement les emplacements des logs pour les services AWS sélectionnés et les ajoute en tant que déclencheurs pour la fonction Lambda du Forwarder Datadog. Datadog met également la liste à jour.
Manuellement : configurez vous-même chaque déclencheur.
Datadog peut automatiquement configurer des déclencheurs sur la fonction Lambda du Forwarder Datadog afin de recueillir les logs AWS à partir des sources et emplacements suivants :
Source
Emplacement
Logs d’accès API Gateway
CloudWatch
Logs d’exécution API Gateway
CloudWatch
Logs d’accès ELB de l’application
S3
Logs d’accès ELB classique
S3
Logs d’accès CloudFront
S3
Logs Lambda
CloudWatch
Logs Redshift
S3
Logs d’accès S3
S3
Log des Step Functions
CloudWatch
Logs d’accès Web Application Firewall
S3, CloudWatch
Remarque : Les Filtres d’abonnement ne sont pas créés automatiquement par le DatadogForwarder. Créez les directement dans un Log Group.
Vérifiez que la stratégie du rôle IAM utilisé pour l’intégration Datadog/AWS possède les autorisations suivantes. Le fonctionnement de ces autorisations est décrit ci-dessous :
Ajoute ou supprime un déclencheur Lambda basé sur des événements de compartiment S3.
states:ListStateMachines
Répertorie toutes les Step Functions.
states:DescribeStateMachine
Récupère la configuration des logs d’une Step Function.
wafv2:ListLoggingConfigurations
Répertorie toutes les configurations de logs de Web Application Firewall.
logs:PutSubscriptionFilter
Ajoute un déclencheur Lambda basé sur des événements de log CloudWatch.
logs:DeleteSubscriptionFilter
Supprime un déclencheur Lambda basé sur des événements de log CloudWatch.
logs:DescribeSubscriptionFilters
Répertorie les filtres d’abonnement pour le groupe de logs spécifié.
Sur la page de l’intégration AWS, sélectionnez le compte AWS à partir duquel recueillir les logs, puis cliquez sur l’onglet Log Collection.
Saisissez l’ARN du Lambda créé à la section précédente, puis cliquez sur Add.
Sélectionnez les services à partir desquels vous souhaitez recueillir des logs, puis cliquez sur Save. Pour arrêter la collecte de logs d’un service spécifique, désélectionnez la source associée.
Si vous possédez des logs dans plusieurs régions, vous devez créer des fonctions Lambda supplémentaires dans ces régions et les indiquer sur cette page.
Pour arrêter la collecte de l’ensemble des logs AWS, passez la souris sur une fonction Lambda, puis cliquez sur l’icône de suppression. Tous les déclencheurs de cette fonction seront supprimés.
Quelques minutes après cette première configuration, vos logs AWS apparaissent dans le Log Explorer Datadog.
Si vous recueillez des logs depuis un groupe de logs CloudWatch, configurez le déclencheur entraînant l’exécution de la fonction Lambda du Forwarder Datadog à l’aide de l’une des méthodes suivantes :
Cliquez sur Functions, puis sélectionnez le Forwarder Datadog.
Cliquez sur Add trigger, puis sélectionnez CloudWatch Logs.
Sélectionnez le groupe de logs dans le menu déroulant.
Nommez votre filtre, puis indiquez son pattern (facultatif).
Cliquez sur Add.
Accédez à la section Logs de Datadog pour consulter les nouveaux événements de log envoyés à votre groupe de logs.
Si vous utilisez Terraform, vous pouvez provisionner et gérer vos déclencheurs avec la ressource aws_cloudwatch_log_subscription_filter. Consultez l’exemple de code ci-dessous.
resource "aws_cloudwatch_log_subscription_filter" "datadog_log_subscription_filter" {
name = "datadog_log_subscription_filter"
log_group_name = <NOM_GROUPE_LOGS_CLOUDWATCH> # par exemple, /aws/lambda/nom_fonction_lambda
destination_arn = <ARN_FORWARDER_DATADOG> # par exemple, arn:aws:lambda:us-east-1:123:function:datadog-forwarder
filter_pattern = ""
}
Si vous utilisez AWS CloudFormation, vous pouvez provisionner et gérer vos déclencheurs avec la ressource CloudFormation AWS::Logs::SubscriptionFilter. Consultez l’exemple de code ci-dessous.
L’exemple de code fonctionne également pour AWS SAM et Serverless Framework. Pour ce dernier, le code doit être placé dans la section resources de votre fichier serverless.yml.
Si vous recueillez des logs depuis un compartiment S3, configurez le déclencheur entraînant l’exécution de la fonction Lambda du Forwarder Datadog à l’aide de l’une des méthodes suivantes :
Si vous utilisez Terraform, vous pouvez provisionner et gérer vos déclencheurs avec la ressource aws_s3_bucket_notification. Consultez l’exemple de code ci-dessous.
Si vous utilisez CloudFormation, vous pouvez configurer les déclencheurs avec la propriété NotificationConfiguration de CloudFormation pour votre compartiment S3. Consultez l’exemple de code ci-dessous.
Vous pouvez nettoyer les adresses e-mail ou IP dans les logs envoyés par la fonction Lambda, ou définir une règle de nettoyage personnalisée dans les paramètres de la fonction Lambda.
Vous pouvez également exclure ou envoyer uniquement les logs correspondant à un pattern spécifique via l’option de filtrage.