Activer ASM pour AWS Lambda
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 :
- 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.
- Configurer l’instrumentation ASM en utilisant le plug-in Serverless Framework de Datadog ou en définissant manuellement les différentes couches.
- 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 :
- Installez le plug-in Serverless Framework Datadog :
serverless plugin install --name serverless-plugin-datadog
- 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
- Redéployez la fonction et invoquez-la. Après quelques minutes, elle apparaît dans les vues ASM.
- 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>:72
# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:72
# Use this format for x86-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:72
# Use this format for arm64-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:72
```
Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour `RUNTIME` sont `Python37`, `Python38` et `Python39`.
Node
# Use this format for AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:91
# Use this format for AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:91
```
Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour RUNTIME sont `Node12-x`, `Node14-x`, `Node16-x` et `Node18-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:8
# In AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-java:8
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
- 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:36
# arm64-based Lambda in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:36
# x86-based Lambda in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:36
# arm64-based Lambda in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:36
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>:72
# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:72
# Use this format for x86-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:72
# Use this format for arm64-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:72
```
Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour `RUNTIME` sont `Python37`, `Python38`, `Python39`, `Python310` et `Python311`.
Node
# Use this format for AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:91
# Use this format for AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:91
```
Remplacez `<AWS_REGION>` par une région AWS valide, comme `us-east-1`. Les options disponibles pour RUNTIME sont `Node12-x`, `Node14-x`, `Node16-x` et `Node18-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:8
# In AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-java:8
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:6
# arm64-based Lambda in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:417141415827: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
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:36
# arm64-based Lambda in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension-ARM:36
# x86-based Lambda in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:36
# arm64-based Lambda in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:36
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
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
.
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.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: