Enviar logs de servicios de AWS con la función Lambda de Datadog

El servicio logs de AWS puede recopilarse con la función Lambda de Datadog Forwarder. Esta Lambda—que se activa en S3 Buckets, CloudWatch grupos log y eventos EventBridge—reenvía logs a Datadog.

Para empezar a recoger logs de tus servicios AWS:

  1. Configura la función Lambda de Datadog Forwarder en tu cuenta AWS.
  2. Habilita el registro para tu servicio AWS (la mayoría de los servicios AWS pueden loguear a un bucket S3 o CloudWatch Grupo log).
  3. Configurar los disparadores que hacen que la Lambda Forwarder se ejecute cuando hay nuevos logs que reenviar. Hay dos maneras de Configurar los disparadores.

Nota: Si te encuentras en la región AWS us-east-1, aprovecha Datadog-AWS Private Link.

Nota: Cloudformation crea una política IAM que incluye KMS:Decrypt para todos los recursos, y no se alinea con las mejores prácticas de AWS Security Hub. Este permiso se utiliza para descifrar objetos de buckets S3 cifrados con KMS para configurar la función Lambda, y no se puede predecir qué clave KMS se utiliza para cifrar los buckets S3. Puedes eliminar este permiso de forma segura una vez que la instalación haya finalizado correctamente.

Habilita el registro para tu servicio AWS

Se admite cualquier servicio AWS que genere logs en un bucket S3 o un CloudWatch Grupo log. Encontrará instrucciones de configuración para los servicios en la siguiente tabla:

Servicio AWSActivar generar logs del servicio AWSEnviar AWS logs a Datadog
API GatewayHabilitar logs de Amazon API GatewayColección manual y automática de log.
CloudfrontHabilitar logs de Amazon CloudFrontColección manual y automática de log.
CloudTrailActivar logs AWS CloudTrailColección Manual de log. Consulta AWS Configuración para Cloud SIEM si estás configurando AWS CloudTrail para Cloud SIEM.
DynamoDBHabilitar logs de Amazon DynamoDBColección Manual de log.
EC2-Utiliza Datadog Agent para enviar tus logs a Datadog.
ECS-Utiliza la dirección Docker Agent para recoger tus logs.
Elastic Balanceo de carga (ELB)Habilitar logs de Amazon ELBColección manual y automática de log.
Lambda-Colección manual y automática de log.
RDSHabilitar logs de Amazon RDSColección Manual de log.
Ruta 53Habilitar logs de Amazon Ruta 53Colección Manual de log.
S3Activar logs de Amazon S3Colección manual y automática de log.
[SNS] 32El SNS no proporciona logs, pero puede procesar logs y eventos que transitan por el servicio SNS.Colección Manual de log.
RedShiftActivar logs de Amazon RedshiftColección manual y automática de log.
Acceso verificadoActivar logs del acceso verificadoColección Manual de log.
VPCHabilitar logs de Amazon VPCColección Manual de log.
funciones StepActivar logs de funciones Amazon StepColección Manual de log.
Cortafuegos de aplicaciones webActivar logs de Amazon WAFColección manual y automática de log.
MWAAActivar logs de Amazon MWAAColección Manual de log.

Establecer disparadores

Existen dos opciones a la hora de configurar los disparadores en la función Lambda de Datadog Forwarder:

  • Automáticamente: Datadog recupera automáticamente los log de localización para el servicio AWS seleccionado y los añade como disparadores en la función Lambda de Datadog Forwarder. Datadog también mantiene actualizada la lista.
  • Manualmente: Configura tu mismo cada disparador.

Configurar automáticamente los disparadores

Datadog puede Configurar disparadores automáticamente la función Lambda de Datadog Forwarder para recopilar logs de AWS de las siguientes fuentes y localizaciones:

OrigenLocalización
Logs de acceso a la API GatewayCloudWatch
Ejecución de logs de API GatewayCloudWatch
Logs de acceso de la aplicación ELBS3
Logs de acceso a ELB clásicoS3
Logs de acceso a CloudFrontS3
Logs de LambdaCloudWatch
Logs de RedshiftS3
Logs de acceso S3S3
Funciones StepCloudWatch
Cortafuegos de aplicaciones webS3, CloudWatch

Nota: Los Filtros de suscripción no son creados automáticamente por DatadogForwarder. Crealos directamente en un Grupo de Log.

  1. Si aún no lo has hecho, configura la función AWS Lambda de recopilación de logs de Datadog.

  2. Asegúrese de que la política de rol IAM utilizada para la integración Datadog-AWS tiene los siguientes permisos. La información sobre cómo se utilizan estos permisos se puede encontrar en las descripciones a continuación:

    "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"
    
    Permiso AWSDescripción
    cloudfront:GetDistributionConfigObtener el nombre del bucket de S3 que contiene los logs de acceso a CloudFront.
    cloudfront:ListDistributionsLista todas las distribuciones de CloudFront.
    elasticloadbalancing:
    DescribeLoadBalancers
    Lista todos los equilibradores de carga.
    elasticloadbalancing:
    DescribeLoadBalancerAttributes
    Obtener el nombre del bucket S3 que contiene los logs de acceso a ELB.
    lambda:List*Lista todas las funciones Lambda.
    lambda:GetPolicyObtener la política de Lambda cuando los disparadores deben ser eliminados.
    redshift:DescribeClustersLista todos los clústeres de Redshift.
    redshift:DescribeLoggingStatusObtener el nombre del bucket S3 que contiene logs de Redshift.
    s3:GetBucketLoggingObtener el nombre del bucket S3 que contiene los logs de acceso S3.
    s3:GetBucketLocationObtener la región del bucket S3 que contiene los logs de acceso S3.
    s3:GetBucketNotificationObtener las configuraciones de activación Lambda existentes.
    s3:PutBucketNotificationAñadir o eliminar un disparador Lambda basado en el bucket S3 eventos.
    states:ListStateMachinesLista todas las funciones Step.
    states:DescribeStateMachineObtener detalles de registro sobre una función Step.
    wafv2:ListLoggingConfigurationsLista todas las configuraciones de registro del Cortafuegos de aplicaciones web.
    logs:PutSubscriptionFilterAñadir un disparador Lambda basado en log de eventos de CloudWatch
    logs:DeleteSubscriptionFilterEliminar un disparador Lambda basado en log de eventos de CloudWatch
    logs:DescribeSubscriptionFiltersLista los filtros de suscripción para el grupo log especificado.
  3. En la página integración AWS, selecciona la cuenta AWS de la que desea recolectar logs y haga clic en la pestaña Log Collection.

    La pestaña Log Collection de la página integración AWS para una cuenta AWS específica con instrucciones de enviar logs de servicio AWS y cuadro de texto para autosuscribir la función Lambda de Forwarder mediante el ingreso de ARN de la función Lambda de Forwarder

  4. Introduzca el ARN de Lambda creada en la sección anterior y haga clic en Add.

  5. Seleccione los servicios de los que deseas recopilar logs y haz clic en Save. Para dejar de recopilar logs de un determinado servicio, anule la selección de la fuente de log.

    La pestaña Log Collection de la página integración AWS para una cuenta AWS específica con una función Lambda introdujó de manera exitosa Included ARNs y algunos de sus servicios habilitados en la fuente de log

  6. Si tienes logs en varias regiones, debes crear funciones Lambda adicionales en esas regiones e introducirlas en esta página.

  7. Para dejar de recopilar todos los AWS logs , pase el ratón por encima de una Lambda y haga clic en el icono Eliminar. Se eliminarán todos los disparadores de esa función.

  8. A los pocos minutos de esta configuración inicial, tus AWS logs apareceran en el log Explorer de Datadog.

Configurar manualmente los disparadores

Recopilar logs del grupo log de CloudWatch

Si estas recopilando logs de un grupo log de CloudWatch, Configura el disparador de la función Lambda de Datadog Forwarder utilizando uno de los siguientes métodos:

  1. En la consola AWS, vaya a Lambda.
  2. Haz clic en Functions y selecciona Datadog Forwarder .
  3. Haz clic en Add trigger y selecciona **CloudWatch Logs **.
  4. Selecciona el grupo log en el menú desplegable.
  5. Introduce un nombre para el filtro y, opcionalmente, especifique un patrón de filtrado.
  6. Haz clic en Add (Añadir).
  7. Ve a la sección Datadog log para explorar cualquier nuevo eventos log enviado a su grupo log.

Para los usuarios de Terraform, puedes aprovisionar y gestionar tus disparadores utilizando el recurso aws_cloudwatch_log_subscription_filter. Vea el código de ejemplo a continuación.

resource "aws_cloudwatch_log_subscription_filter" "datadog_log_subscription_filter" {
  name = "datadog_log_subscription_filter"
  log_group_name = <CLOUDWATCH_LOG_GROUP_NAME> # for example, /aws/lambda/my_lambda_name
  destination_arn = <DATADOG_FORWARDER_ARN> # for example, arn:aws:lambda:us-east-1:123:function:datadog-forwarder
  filter_pattern = ""
}

Para los usuarios de AWS CloudFormation, puedes aprovisionar y gestionar tus disparadores utilizando el recurso CloudFormation AWS::logs::SubscriptionFilter. Vea el código de ejemplo a continuación.

El código de ejemplo también funciona para AWS SAM y serverless Framework. Para serverless Framework, coloque el código en la sección resources dentro de su serverless.yml.

Resources:
  MyLogSubscriptionFilter:
    Type: "AWS::Logs::SubscriptionFilter"
    Properties:
      DestinationArn: "<DATADOG_FORWARDER_ARN>"
      LogGroupName: "<CLOUDWATCH_LOG_GROUP_NAME>"
      FilterPattern: ""

Recopilación de logs de buckets S3

Si estas recopilando logs de un bucket S3, Configurar el disparador a la función Lambda de Datadog Forwarder utilizando uno de los siguientes métodos:

  1. Una vez instalada la función Lambda, añade manualmente un disparador en el bucket S3 que contiene tus logs en la consola AWS:

    Añadir disparador
  2. Seleccione el bucket y siga las instrucciones de AWS:

    integración Lambda
  3. Establece el tipo correcto de evento en los buckets S3:

    Objeto Creado

¡Una vez hecho esto, entra en tu sección Datadog Log para empezar a explorar tus logs!

Para los usuarios de Terraform, puedes aprovisionar y gestionar tus disparadores utilizando el recurso aws_s3_bucket_notification. Consulte el código de ejemplo a continuación.

resource "aws_s3_bucket_notification" "my_bucket_notification" {
  bucket = my_bucket
  lambda_function {
    lambda_function_arn = "<DATADOG_FORWARDER_ARN>"
    events = ["s3:ObjectCreated:*"]
    filter_prefix = "AWSLogs/"
    filter_suffix = ".log"
  }
}

Para los usuarios de CloudFormation, puedes Configurar disparadores usando CloudFormation NotificationConfiguration para tu bucket S3. Consulte el código de ejemplo a continuación.

Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: "<MY_BUCKET>"
      NotificationConfiguration:
        LambdaConfigurations:
        - Event: 's3:ObjectCreated:*'
          Function: "<DATADOG_FORWARDER_ARN>"

Depurar y filtrar

Puedes depurar correos electrónicos o direcciones IP de logs enviados por la función Lambda, o definir una regla de depuración personalizada en los parámetros de Lambda. También puedes excluir o enviar solo aquellos logs que coincidan con un patrón específico utilizando la opción de filtrado.