La prise en charge d'AWS Lambda par ASM est en version bêta. La détection des menaces s'effectue via l'extension lambda.

La solution Application Security Management (ASM) de Datadog peut être utilisée pour surveiller vos fonctions AWS Lambda. Consultez la section Compatibilité pour connaître les fonctionnalités ASM compatibles avec les fonctions sans serveur.

Afin de configurer ASM pour AWS Lambda, vous devrez généralement :

  1. Identifier les fonctions vulnérables ou visées par des attaques qui profiteront le plus d’ASM. Pour ce faire, consultez l’onglet Security de votre Service Catalog.
  2. Configurer l’instrumentation ASM en utilisant le plug-in Serverless Framework de Datadog ou en définissant manuellement les différentes couches.
  3. Déclencher des signaux de sécurité dans votre application afin de vérifier comment Datadog affiche les informations générées.

Prérequis

  • La solution APM pour les applications sans serveur doit être configurée sur la fonction Lambda de façon à ce que les traces soient directement envoyées à Datadog. L’intégration X-Ray, utilisée pour envoyer les données de trace à APM, ne prend pas en charge les données dont ASM a besoin pour surveiller les fonctions.

Prise en main

Le plug-in Serverless Framework Datadog configure automatiquement vos fonctions de façon à ce que les métriques, traces et logs soient envoyées à Datadog via l’extension Lambda Datadog.

Pour installer et configurer le plug-in Serverless Framework Datadog :

  1. Installez le plug-in Serverless Framework Datadog :
    serverless plugin install --name serverless-plugin-datadog
    
  2. Activez ASM en mettant à jour votre fichier serverless.yml (ou en utilisant toute autre méthode privilégiée pour définir les variables d’environnement de votre fonction) :
    environment:
      AWS_LAMBDA_EXEC_WRAPPER: /opt/datadog_wrapper
      DD_SERVERLESS_APPSEC_ENABLED: true
    
  3. Redéployez la fonction et invoquez-la. Après quelques minutes, elle apparaît dans les vues ASM.

  1. Installez le traceur Datadog :
    • Python

      # Use this format for x86-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:88
      
         # Use this format for arm64-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:88
      
         # Use this format for x86-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:88
      
         # Use this format for arm64-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:88
         ```
         Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour `RUNTIME` sont `Python38`, `Python39`, `Python310`, `Python311`, `Python312`.
      
    • Node

      # Use this format for AWS commercial regions
        arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:106
      
        # Use this format for AWS GovCloud regions
        arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:106
        ```  
        Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour RUNTIME sont `Node16-x`, `Node18-x`, `Node20-x`.
      
    • Java : Configurez les couches pour votre fonction Lambda à l’aide de l’ARN en respectant l’un des formats suivants, en fonction de l’endroit où votre fonction Lambda est déployée. Remplacez <AWS_REGION> par une région AWS valide telle que us-east-1 :

      # In AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:dd-trace-java:13
      # In AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-java:13
      
    • Go : le traceur Go ne fait appel à aucune couche et fonctionne comme un module Go standard. Vous pouvez installer la dernière version avec la commande suivante :

      go get -u github.com/DataDog/datadog-lambda-go
      
    • .NET : Configurez les couches pour votre fonction Lambda à l’aide de l’ARN en respectant l’un des formats suivants, en fonction de l’endroit où votre fonction Lambda est déployée. Remplacez <AWS_REGION> par une région AWS valide telle que us-east-1 :

      # x86-based Lambda in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:dd-trace-dotnet:6
      # arm64-based Lambda in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:dd-trace-dotnet-ARM:6
      # x86-based Lambda in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet:6
      # arm64-based Lambda  in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet-ARM:6
      
  2. Installez l’extension Lambda Datadog en configurant les couches pour votre fonction Lambda à l’aide de l’ARN, en respectant l’un des formats suivants. Remplacez <AWS_REGION> par une région AWS valide telle que us-east-1 :
    # x86-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:55
    # arm64-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:55
    # x86-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:55
    # arm64-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:55
    

  1. Installez le traceur Datadog :

    • Python

      # Use this format for x86-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:88
      
         # Use this format for arm64-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:88
      
         # Use this format for x86-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:88
      
         # Use this format for arm64-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:88
         ```
         Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour `RUNTIME` sont `Python38`, `Python39`, `Python310`, `Python311`, `Python312`.
      
    • Node

      # Use this format for AWS commercial regions
        arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:106
      
        # Use this format for AWS GovCloud regions
        arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:106
        ```  
        Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour RUNTIME sont `Node16-x`, `Node18-x`, `Node20-x`.
      
    • Java : Configurez les couches pour votre fonction Lambda à l’aide de l’ARN en respectant l’un des formats suivants, en fonction de l’endroit où votre fonction Lambda est déployée. Remplacez <AWS_REGION> par une région AWS valide telle que us-east-1 :

      # In AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:417141415827:layer:dd-trace-java:13
      # In AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-java:13
      
    • Go : le traceur Go ne fait appel à aucune couche et fonctionne comme un module Go standard. Vous pouvez installer la dernière version avec la commande suivante :

      go get -u github.com/DataDog/datadog-lambda-go
      
    • .NET : Configurez les couches pour votre fonction Lambda à l’aide de l’ARN en respectant l’un des formats suivants, en fonction de l’endroit où votre fonction Lambda est déployée. Remplacez <AWS_REGION> par une région AWS valide telle que us-east-1 :

      # x86-based Lambda in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:417141415827:layer:dd-trace-dotnet:15
      # arm64-based Lambda in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:417141415827:layer:dd-trace-dotnet-ARM:15
      # x86-based Lambda in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet:15
      # arm64-based Lambda  in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet-ARM:15
      
  2. Installez l’extension Lambda Datadog en configurant les couches pour votre fonction Lambda à l’aide de l’ARN, en respectant l’un des formats suivants. Remplacez <AWS_REGION> par une région AWS valide telle que us-east-1 :

    # x86-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension:55
    # arm64-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension-ARM:55
    # x86-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:55
    # arm64-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:55
    

  1. Activez ASM en ajoutant les variables d’environnement suivantes sur le déploiement de votre fonction :

    environment:
      AWS_LAMBDA_EXEC_WRAPPER: /opt/datadog_wrapper
      DD_SERVERLESS_APPSEC_ENABLED: true
    

    Pour les fonctions NodeJS ou Python, ajoutez également ce qui suit :

    environment:
      DD_TRACE_ENABLED: true
    
  2. Pour les fonctions Node et Python uniquement, vérifiez bien que le gestionnaire de la fonction est correctement défini :

    • Node : définissez le gestionnaire de votre fonction sur /opt/nodejs/node_modules/datadog-lambda-js/handler.handler.
      • Définissez également la variable d’environnement DD_LAMBDA_HANDLER sur votre gestionnaire d’origine, comme myfunc.handler.
    • Python : définissez le gestionnaire de votre fonction sur datadog_lambda.handler.handler.
      • Définissez également la variable d’environnement DD_LAMBDA_HANDLER sur votre gestionnaire d’origine, comme myfunc.handler.
  3. Redéployez la fonction et invoquez-la. Après quelques minutes, elle apparaît dans les vues ASM.

Pour voir la détection des menaces Application Security Management en action, envoyez des patterns d’attaque connus sur votre application. Par exemple, envoyez un en-tête HTTP avec la valeur acunetix-product pour déclencher une tentative d’attaque par analyse des vulnérabilités :

curl -H 'My-ASM-Test-Header: acunetix-product' https://url-de-votre-fonction/route-existante

Quelques minutes après avoir activé votre application et envoyé les patterns d’attaque, des informations sur les menaces s’affichent dans l’Application Signals Explorer.

Page des détails d'un signal de sécurité avec des tags, des métriques, des recommandations de mesures et les adresses IP de la personne malveillante associée à la menace

Pour aller plus loin