Envoyer des logs de services AWS avec la fonction Lambda Datadog
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 :
- Configurez la fonction Lambda du Forwarder Datadog dans votre compte 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 : si vous appartenez à la région us-east-1
d’AWS, utilisez l’intégration Datadog/AWS PrivateLink.
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.
Activer la journalisation pour votre service AWS
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 :
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.
Si vous ne l’avez pas déjà fait, configurez la fonction Lambda de collecte de logs AWS avec Datadog.
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 :
"cloudfront:GetDistributionConfig",
"cloudfront:ListDistributions",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"lambda:List*",
"lambda:GetPolicy",
"redshift:DescribeClusters",
"redshift:DescribeLoggingStatus",
"s3:GetBucketLogging",
"s3:GetBucketLocation",
"s3:GetBucketNotification",
"s3:ListAllMyBuckets",
"s3:PutBucketNotification",
"states:ListStateMachines",
"states:DescribeStateMachine",
"wafv2:ListLoggingConfigurations",
"logs:PutSubscriptionFilter",
"logs:DeleteSubscriptionFilter",
"logs:DescribeSubscriptionFilters"
Autorisation AWS | Description |
---|
cloudfront:GetDistributionConfig | Récupère le nom du compartiment S3 contenant les logs d’accès CloudFront. |
cloudfront:ListDistributions | Répertorie toutes les distributions CloudFront. |
elasticloadbalancing:
DescribeLoadBalancers | Répertorie tous les répartiteurs de charge. |
Examinez la colonne Subscriptions de la page des groupes de logs pour vérifier que le nouveau flux Kinesis est bien abonné à vos groupes de logs. | |
lambda:List* | Énumère toutes les fonctions Lambda. |
lambda:GetPolicy | Récupère la stratégie Lambda lorsque des déclencheurs doivent être supprimés. |
redshift:DescribeClusters | Répertorie tous les clusters Redshift. |
redshift:DescribeLoggingStatus | Récupère le nom du compartiment S3 contenant des logs Redshift. |
s3:GetBucketLogging | Récupère le nom du compartiment S3 contenant les logs d’accès S3. |
s3:GetBucketLocation | Récupère la région du compartiment S3 contenant les logs d’accès S3. |
s3:GetBucketNotification | Récupère les configurations des déclencheurs Lambda existants. |
Documentation, liens et articles supplémentaires utiles: | |
s3:PutBucketNotification | 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.
Recueillir des logs depuis un groupe de logs CloudWatch
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 :
- Dans la console AWS, accédez à Lambda.
- 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
.
Resources:
MyLogSubscriptionFilter:
Type: "AWS::Logs::SubscriptionFilter"
Properties:
DestinationArn: "<ARN_FORWARDER_DATADOG>"
LogGroupName: "<NOM_GROUPE_LOGS_CLOUDWATCH>"
FilterPattern: ""
Collecte de logs depuis des compartiments S3
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 :
Une fois la fonction Lambda installée, ajoutez manuellement un déclencheur dans la console AWS sur le compartiment S3 qui contient vos logs :
Sélectionnez le compartiment, puis suivez les instructions d’AWS :
Définissez le bon type d’événement sur les compartiments S3 :
Accédez ensuite à la section Log de Datadog pour commencer à explorer vos logs !
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.
resource "aws_s3_bucket_notification" "my_bucket_notification" {
bucket = my_bucket
lambda_function {
lambda_function_arn = "<ARN_FORWARDER_DATADOG>"
events = ["s3:ObjectCreated:*"]
filter_prefix = "AWSLogs/"
filter_suffix = ".log"
}
}
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.
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: "<MON_COMPARTIMENT>"
NotificationConfiguration:
LambdaConfigurations:
- Event: 's3:ObjectCreated:*'
Function: "<ARN_FORWARDER_DATADOG>"
Nettoyage et filtrage
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.