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

Los registros de servicios de AWS se pueden recopilar con la función Lambda Forwarder de Datadog. Esta Lambda—que se activa en los buckets de S3, grupos de registros de CloudWatch y eventos de EventBridge—reenvía registros a Datadog.

Para comenzar a recopilar registros de tus servicios de AWS:

  1. Configura la función Lambda Forwarder de Datadog en tu cuenta de AWS.
  2. Habilita el registro para tu servicio de AWS (la mayoría de los servicios de AWS pueden registrar en un bucket de S3 o en un grupo de registros de CloudWatch).
  3. Configura los disparadores que hacen que la función Lambda Forwarder se ejecute cuando hay nuevos registros que se deben reenviar. Hay dos formas de configurar los disparadores.

Notas:

  • Puedes usar AWS PrivateLink para enviar tus registros a través de una conexión privada.
  • 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 de S3 cifrados con KMS para configurar la función Lambda, y la clave KMS utilizada para cifrar los buckets de S3 no se puede predecir. Puedes eliminar de forma segura este permiso después de que la instalación finalice con éxito.

Habilita el registro para tu servicio de AWS

Cualquier servicio de AWS que genere registros en un bucket de S3 o en un grupo de registros de CloudWatch es compatible. Encuentra las instrucciones de configuración para los servicios más utilizados en la tabla a continuación:

Servicio de AWSActivar el registro del servicio de AWSEnviar registros de AWS a Datadog
API GatewayHabilitar registros de Amazon API GatewayManual y recolección automática de registros.
AppSyncHabilitar registros de AWS AppSyncManual y recolección automática de registros.
Lote-Recolección automática de registros.
Bedrock Agentcore-Recolección automática de registros.
CloudfrontHabilitar registros de Amazon CloudFrontManual y recolección automática de registros.
CloudTrailHabilitar registros de AWS CloudTrailRecolección manual y automática de registros. Consulta Configuración de AWS para Cloud SIEM si estás configurando AWS CloudTrail para Cloud SIEM.
CodeBuildHabilitar registros de AWS CodeBuildRecolección manual y automática de registros.
DMSHabilitar los registros del Servicio de Migración de Bases de Datos de AWSRecolección manual y automática de registros.
DocumentDBHabilitar los registros de Amazon DocumentDBRecolección manual y automática de registros.
DynamoDBHabilitar los registros de Amazon DynamoDBRecolección manual de registros.
EC2-Utiliza el Datadog Agent para enviar tus registros a Datadog.
ECS-Utiliza el Docker Agent para recopilar tus registros o recolección manual y automática de registros.
EKSHabilitar los registros de Amazon EKSRecolección manual y automática de registros.
Elastic Load Balancing (ELB)Habilitar los registros de Amazon ELBRecolección manual y automática de registros.
GlueHabilitar los registros de AWS GlueRecolección manual y automática de registros.
IoT CoreHabilitar los registros de Amazon IoT CoreRecolección automática de registros.
Lambda-Recolección manual y automática de registros.
MWAAHabilitar registros de Amazon MWAARecolección manual y automática de registros.
Network FirewallHabilitar registros de AWS Network FirewallManual y [recolección automática de registros.
PCS-Colección automática de registros.
RDSHabilitar registros de Amazon RDSRecolección manual de registros.
RedShiftHabilitar registros de Amazon RedshiftManual y colección automática de registros.
Redshift Serverless-Colección automática de registros.
Route 53Habilitar registros de consultas DNS de Amazon Route 53 y registros de consultas de resolutorManual y colección automática de registros.
S3Habilitar registros de Amazon S3Manual y colección automática de registros.
SNSSNS no proporciona registros, pero puedes procesar registros y eventos que están transitando hacia el Servicio SNS.Manual colección de registros.
SSM-Recolección automática de registros.
Step FunctionsHabilitar registros de Amazon Step FunctionsRecolección manual de registros.
Verified AccessHabilitar registros de Verified AccessManual y recolección automática de registros.
VPCHabilitar registros de Amazon VPCManual y recolección automática de registros.
VPNHabilitar registros de AWS VPNManual y recolección automática de registros.
Web Application FirewallHabilitar registros de AWS WAFManual y recolección automática de registros.

Configurar disparadores

Hay dos opciones al configurar disparadores en la función Lambda de Datadog Forwarder:

  • Automáticamente: Datadog recupera automáticamente las ubicaciones de los registros para los servicios de AWS seleccionados y las agrega como disparadores en la función Lambda de Datadog Forwarder. Datadog también mantiene la lista actualizada.
  • Manualmente: Configura cada disparador tú mismo.

Configurar disparadores automáticamente

Datadog puede configurar automáticamente disparadores en la función Lambda de Datadog Forwarder para recopilar registros de AWS. Sin embargo, la suscripción automática no admite la creación de disparadores en diferentes cuentas o regiones de AWS. Para escenarios donde los registros se publican en buckets de S3 en una cuenta separada, recomendamos crear manualmente un disparador en la misma cuenta que el bucket para sortear esta limitación.

Las siguientes fuentes y ubicaciones son compatibles:

FuenteUbicación
Apache Airflow (MWAA)CloudWatch
Registros de Acceso de API GatewayCloudWatch
Registros de Ejecución de API GatewayCloudWatch
Registros de Acceso de ELB de AplicaciónS3
Registros de AppSyncCloudWatch
BatchCloudWatch
Registros de Bedrock AgentcoreS3, CloudWatch
Registros de Acceso de ELB ClásicoS3
Registros de Acceso de CloudFrontS3
Registros de CloudtrailS3, CloudWatch
Registros de CodeBuildS3, CloudWatch
Registros de DMSCloudWatch
Registros de DocumentDBCloudWatch
Registros de ECSCloudWatch
Registros del Plano de Control de EKSCloudWatch
Registros de Insights de Contenedor de EKSCloudWatch
Registros de Glue JobsCloudWatch
Registros de LambdaCloudWatch
Registros de Lambda@EdgeCloudWatch
Registros de IoT CoreCloudWatch
Registros de Firewall de RedS3, CloudWatch
Registros de PCSCloudWatch
Registros de RedshiftS3, CloudWatch
Registros de Redshift ServerlessCloudWatch
Registros de RDSCloudWatch
Registros de Consultas DNS de Route53CloudWatch
Registros de consultas de Route53 ResolverS3, CloudWatch
Registros de Acceso a S3S3
Registros de Comandos de SSMCloudWatch
Step FunctionsCloudWatch
Registros de Acceso VerificadoS3, CloudWatch
Registros de Flujo de VPCS3, CloudWatch
Registros de VPNCloudWatch
Firewall de aplicaciones webS3, CloudWatch

Nota: Los filtros de suscripción son creados automáticamente en los grupos de registros de CloudWatch por el DatadogForwarder, y se nombran en el formato DD_LOG_SUBSCRIPTION_FILTER_<LOG_GROUP_NAME>.

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

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

    "airflow:GetEnvironment",
    "airflow:ListEnvironments",
    "appsync:ListGraphqlApis",
    "batch:DescribeJobDefinitions",
    "cloudfront:GetDistributionConfig",
    "cloudfront:ListDistributions",
    "cloudtrail:GetTrail",
    "cloudtrail:ListTrails",
    "codebuild:BatchGetProjects",
    "codebuild:ListProjects",
    "dms:DescribeReplicationInstances",
    "ec2:DescribeFlowLogs",
    "ec2:DescribeVerifiedAccessInstanceLoggingConfigurations",
    "ec2:DescribeVpnConnections",
    "ecs:DescribeTaskDefinition",
    "ecs:ListTaskDefinitionFamilies",
    "eks:DescribeCluster",
    "eks:ListClusters",
    "elasticloadbalancing:DescribeLoadBalancerAttributes",
    "elasticloadbalancing:DescribeLoadBalancers",
    "glue:BatchGetJobs",
    "glue:GetJobs",
    "glue:GetJob",
    "glue:ListJobs",
    "iot:GetV2LoggingOptions",
    "lambda:GetPolicy",
    "lambda:InvokeFunction",
    "lambda:List*",
    "logs:DeleteSubscriptionFilter",
    "logs:DescribeDeliveries",
    "logs:DescribeDeliverySources",
    "logs:DescribeLogGroups",
    "logs:DescribeSubscriptionFilters",
    "logs:GetDeliveryDestination",
    "logs:PutSubscriptionFilter",
    "network-firewall:DescribeLoggingConfiguration",
    "network-firewall:ListFirewalls",
    "rds:DescribeDBClusters",
    "rds:DescribeDBInstances",
    "redshift-serverless:ListNamespaces",
    "redshift:DescribeClusters",
    "redshift:DescribeLoggingStatus",
    "route53:ListQueryLoggingConfigs",
    "route53resolver:ListResolverQueryLogConfigs",
    "s3:GetBucketLocation",
    "s3:GetBucketLogging",
    "s3:GetBucketNotification",
    "s3:ListAllMyBuckets",
    "s3:PutBucketNotification",
    "ssm:GetServiceSetting",
    "ssm:ListCommands",
    "states:DescribeStateMachine",
    "states:ListStateMachines",
    "wafv2:ListLoggingConfigurations"
    
    AWS PermissionDescription
    airflow:ListEnvironmentsList all MWAA environment names.
    airflow:GetEnvironmentGet information about a MWAA environment.
    appsync:ListGraphqlApisList all GraphQL Apis.
    batch:DescribeJobDefinitionsList all Batch job definitions.
    cloudfront:GetDistributionConfigGet the name of the S3 bucket containing CloudFront access logs.
    cloudfront:ListDistributionsList all CloudFront distributions.
    cloudtrail:GetTrailGet Trail logging information.
    cloudtrail:ListTrailsList all Cloudtrail trails.
    codebuild:BatchGetProjectsList all CodeBuild projects.
    codebuild:ListProjectsGet information on CodeBuild projects.
    dms:DescribeReplicationInstancesList all replication instances for DMS.
    ec2:DescribeFlowLogsList all Flow log configurations.
    ec2:DescribeVerifiedAccessInstanceLoggingConfigurationsList all Verified Access instance logging configurations.
    ec2:DescribeVpnConnectionsList all VPN connections.
    ecs:DescribeTaskDefinitionDescribe ECS task definition.
    ecs:ListTaskDefinitionFamiliesList all task definition families.
    elasticloadbalancing:
    DescribeLoadBalancers
    List all load balancers.
    elasticloadbalancing:
    DescribeLoadBalancerAttributes
    Get the name of the S3 bucket containing ELB access logs.
    glue:BatchGetJobsGet information about multiple Glue jobs.
    glue:GetJobGet information about a Glue job.
    glue:GetJobsList all Glue jobs.
    glue:ListJobsList all Glue job names.
    eks:DescribeClusterDescribe an EKS cluster.
    eks:ListClustersList all EKS clusters.
    iot:GetV2LoggingOptionsGet IoT V2 logging options.
    lambda:InvokeFunctionInvoke a Lambda function.
    lambda:List*List all Lambda functions.
    lambda:GetPolicyGet the Lambda policy when triggers are to be removed.
    logs:PutSubscriptionFilterAdd a Lambda trigger based on CloudWatch Log events.
    logs:DeleteSubscriptionFilterRemove a Lambda trigger based on CloudWatch Log events.
    logs:DescribeLogGroupsDescribe CloudWatch log groups.
    logs:DescribeDeliveriesDescribe CloudWatch log deliveries.
    logs:DescribeDeliverySourcesDescribe CloudWatch log delivery sources.
    logs:DescribeSubscriptionFiltersList the subscription filters for the specified log group.
    logs:GetDeliveryDestinationGet a CloudWatch log delivery destination.
    network-firewall:DescribeLoggingConfigurationGet the logging configuration of a firewall.
    network-firewall:ListFirewallsList all Network Firewall firewalls.
    rds:DescribeDBClustersList all RDS clusters.
    rds:DescribeDBInstancesList all RDS instances.
    redshift:DescribeClustersList all Redshift clusters.
    redshift:DescribeLoggingStatusGet the name of the S3 bucket containing Redshift Logs.
    redshift-serverless:ListNamespacesList all Redshift Serverless namespaces.
    route53:ListQueryLoggingConfigsList all DNS query logging configurations for Route 53.
    route53resolver:ListResolverQueryLogConfigsList all Resolver query logging configurations for Route 53.
    s3:GetBucketLoggingGet the name of the S3 bucket containing S3 access logs.
    s3:GetBucketLocationGet the region of the S3 bucket containing S3 access logs.
    s3:GetBucketNotificationGet existing Lambda trigger configurations.
    s3:ListAllMyBucketsList all S3 buckets.
    s3:PutBucketNotificationAdd or remove a Lambda trigger based on S3 bucket events.
    ssm:GetServiceSettingGet the SSM service setting for customer script log group name.
    ssm:ListCommandsList all SSM commands.
    states:ListStateMachinesList all Step Functions.
    states:DescribeStateMachineGet logging details about a Step Function.
    wafv2:ListLoggingConfigurationsList all logging configurations of the Web Application Firewall.
  3. En la página de integración de AWS, selecciona la cuenta de AWS de la que deseas recopilar registros y haz clic en la pestaña Recopilación de registros.

  4. En la sección Datadog Forwarder Lambda, ingresa el ARN de la Lambda creada en la sección anterior y haz clic en Agregar. La función Lambda aparece en la tabla a continuación con su nombre, versión y región.

  5. En la sección Autosuscripción de registros, bajo Fuentes de registros, habilita los servicios de los cuales deseas recopilar registros activándolos. Para dejar de recopilar registros de un servicio en particular, desactiva la fuente de registro.

  6. (Opcional) En la sección Filtros de etiquetas de fuente de registro, puedes filtrar la recopilación de registros por etiquetas de recursos para cada fuente de registro. Selecciona una fuente de registro del menú desplegable y agrega etiquetas en el formato key:value para limitar qué registros de recursos se recopilan. Nota: Las etiquetas de recursos se convierten automáticamente a minúsculas para coincidir con las convenciones de la plataforma de Datadog. Define tus filtros de etiquetas en minúsculas para evitar desajustes.

  7. Si tienes registros en múltiples regiones, debes crear funciones Lambda adicionales en esas regiones y agregarlas en la sección Datadog Forwarder Lambda.

  8. Para dejar de recopilar todos los registros de AWS de una función Lambda específica, pasa el cursor sobre la Lambda en la tabla y haz clic en el ícono de eliminar. Se eliminan todos los disparadores para esa función.

  9. Dentro de unos minutos después de esta configuración inicial, tus registros de AWS aparecerán en el Explorador de Registros de Datadog.

Configura los disparadores manualmente

Recopilando registros del grupo de registros de CloudWatch

Si estás recopilando registros de un grupo de registros de CloudWatch, configura el disparador para la función Lambda de Datadog Forwarder utilizando uno de los siguientes métodos:

  1. En la consola de AWS, ve a Lambda.
  2. Haz clic en Funciones y selecciona el Datadog Forwarder.
  3. Haz clic en Agregar disparador y selecciona Registros de CloudWatch.
  4. Selecciona el grupo de registros del menú desplegable.
  5. Ingresa un nombre para tu filtro y, opcionalmente, especifica un patrón de filtro.
  6. Haz clic en Agregar.
  7. Ve a la sección de Registros de Datadog para explorar cualquier nuevo evento de registro enviado a tu grupo de registros.

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

data "aws_cloudwatch_log_group" "some_log_group" {
  name = "/some/log/group"
}

resource "aws_lambda_permission" "lambda_permission" {
  action        = "lambda:InvokeFunction"
  function_name = "datadog-forwarder" # this is the default but may be different in your case
  principal     = "logs.amazonaws.com" # or logs.amazonaws.com.cn for China*
  source_arn    = data.aws_cloudwatch_log_group.some_log_group.arn
}

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

* All use of Datadog Services in (or in connection with environments within) mainland China is subject to the disclaimer published in the Restricted Service Locations section on our website.

Para los usuarios de AWS CloudFormation, pueden aprovisionar y gestionar sus disparadores utilizando el recurso de CloudFormation AWS::Logs::SubscriptionFilter. Consulta el código de ejemplo a continuación.

El código de muestra también funciona para AWS SAM y Serverless Framework. Para Serverless Framework, coloca el código en la sección resources dentro de tu serverless.yml.

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

Recopilando registros de buckets S3

Si estás recolectando registros de un bucket S3, configura el disparador para la función Lambda de Datadog Forwarder utilizando uno de los siguientes métodos:

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

    Añadiendo disparador
  2. Selecciona el bucket y luego sigue las instrucciones de AWS:

    Integration Lambda
  3. Establece el tipo de evento correcto en los buckets S3:

    Objeto Creado

Una vez hecho, ve a tu sección de registros de Datadog para comenzar a explorar tus registros.

Para los usuarios de Terraform, pueden aprovisionar y gestionar sus disparadores utilizando el recurso aws_s3_bucket_notification. Consulta el código de muestra 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, pueden configurar disparadores utilizando la NotificationConfiguration de CloudFormation para su bucket S3. Consulta el código de muestra a continuación.

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

Limpieza y filtrado

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

Lectura adicional