View a markdown version of this page

Journalisation des appels d'API de fonction Web à l'aide de AWS CloudTrail - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Journalisation des appels d'API de fonction Web à l'aide de AWS CloudTrail

Avec AWS CloudTrail, vous pouvez suivre les actions entreprises par un utilisateur, un rôle ou Service AWS dans les fonctions AWS Lambda Web. CloudTrail fournit un enregistrement de ces actions. CloudTrail capture les invocations de fonctions Web sous forme d'événements de données. Vous pouvez utiliser ces informations pour déterminer qui a invoqué une fonction Web, quand et d'où, ce qui facilite l'analyse de sécurité et l'audit opérationnel.

Événements de données de fonction Web dans CloudTrail

Les événements de données fournissent des informations sur les opérations effectuées sur une ressource. Par exemple, l'appel d'un point de terminaison de fonction Web est un événement de données. Ces opérations sont également connues sous le nom d'opérations de plan de données, et elles portent souvent sur un volume élevé. Par défaut, CloudTrail n'enregistre pas les événements liés aux données et l'historique des CloudTrail événements ne les enregistre pas.

Des frais supplémentaires sont facturés pour les événements de données. Pour en savoir plus, consultez Tarification de CloudTrail .

Vous pouvez enregistrer les événements de données pour le type de AWS::Lambda::WebFunction ressource à l'aide de la CloudTrail console ou AWS CLI des opérations de CloudTrail l'API. CloudTrail enregistre chaque invocation dans la région Région AWS qui a répondu à la demande et awsRegion identifie cette région. Contrairement aux journaux et aux métriques, les événements d'invocation ne sont pas centralisés dans la région d'origine. Pour un point de PerRegion terminaison MultiRegion ou un point de terminaison, utilisez un magasin de données de suivi ou d'événement multirégional afin que les appels soient enregistrés dans chaque région desservie par le point de terminaison.

Le tableau suivant indique le type d'événement de données pour les fonctions Web.

Type d’événement de données (console) valeur resources.type API de données connectées à CloudTrail
Fonction Web Lambda AWS::Lambda::WebFunction InvokeWebFunctionEndpoint

CloudTrail enregistre les identificateurs clés suivants pour une invocation de fonction Web :

IdentifiantValue
eventSourcelambda.amazonaws.com
eventNameInvokeWebFunctionEndpoint. Il s'agit de la valeur sur laquelle filtrer.
Action IAMlambda:InvokeWebFunctionEndpoint
readOnlyfalse, car un appel exécute votre code de fonction.
resources.typeAWS::Lambda::WebFunction
resources.ARNL'ARN de la fonction, et non l'ARN du point de terminaison. Les sélecteurs de parcours fonctionnent donc au niveau de la fonction.

Le sélecteur d'événements avancé suivant enregistre les appels pour une seule fonction Web.

[ { "Name": "web-function-invokes", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Lambda::WebFunction"] }, { "Field": "resources.ARN", "Equals": ["arn:aws:lambda:us-east-1:111122223333:web-function/hello-world"] } ] } ]

Pour activer les événements de données sur un parcours, procédez comme suit.

Pour activer et vérifier les événements relatifs aux données de la fonction Web (AWS CLI)
  1. Créez ou choisissez le parcours qui enregistrera les événements liés aux données. Pour obtenir des instructions, consultez la section Journalisation des événements liés aux données dans le guide de AWS CloudTrail l'utilisateur.

  2. Enregistrez le sélecteur d'événements avancé suivant sousweb-function-data-events.json. Il enregistre les appels pour une fonction Web. Pour enregistrer les appels pour chaque fonction Web du compte, supprimez le sélecteur de resources.ARN champs.

    [ { "Name": "web-function-invocations", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Lambda::WebFunction"] }, { "Field": "resources.ARN", "Equals": [ "arn:aws:lambda:us-east-1:111122223333:web-function/my-web-app" ] } ] } ]
  3. Appliquez le sélecteur à la piste :

    aws cloudtrail put-event-selectors \ --trail-name my-trail \ --advanced-event-selectors file://web-function-data-events.json
    Important

    put-event-selectorsremplace les sélecteurs d'événements existants du sentier. Si le parcours enregistre déjà d'autres événements, incluez leurs sélecteurs dans le même fichier.

  4. Appelez le point de terminaison avec une demande de test.

  5. Recherchez la destination du sentier poureventName = InvokeWebFunctionEndpoint. Vérifiez l'ARN de la fonction, l'heure de l'événement, l'ID de la demande, les informations sur l'appelant disponibles pour le chemin d'authentification et les éventuels champs d'erreur conditionnelle. Si le sélecteur fonctionne, la requête renvoie un InvokeWebFunctionEndpoint événement pour votre demande de test, comme dans l'exemple présenté dansExemple : appel réussi (appelant non authentifié).

Pour enregistrer des événements de données dans un magasin de données d'événements CloudTrail Lake à la place, ajoutez les mêmes sélecteurs de champs au magasin de données d'événements. Pour plus d’informations, consultez le Guide de l’utilisateur AWS CloudTrail .

Champs d'un InvokeWebFunctionEndpoint événement

Le tableau suivant décrit les champs d'un InvokeWebFunctionEndpoint événement.

Champ Remarques
eventVersion Version du format de l'événement .
eventSource Toujours lambda.amazonaws.com.
eventName Toujours InvokeWebFunctionEndpoint.
eventCategory Toujours Data.
eventType Le type d'événement, par exempleAwsApiCall.
readOnly Toujoursfalse, car un appel exécute votre code de fonction.
managementEvent Toujours false.
eventTime Date et heure, en UTC, auxquelles Lambda a enregistré l'événement. Pour un appel réussi, Lambda enregistre l'événement lorsque votre fonction commence sa réponse, eventTime ce qui peut être postérieur à l'heure d'arrivée de la demande.
sourceIPAddress Adresse IP à partir de laquelle la demande a été faite.
userAgent L'agent utilisé par l'appelant pour effectuer la demande. Présent lorsque l'appelant envoie un User-Agent en-tête.
requestParameters Contient endpointArn l'ARN du point de terminaison invoqué. La charge utile de la demande n'est pas enregistrée.
responseElements Toujours null.
resources Contient une entrée avec le accountIdtype, et ARN de la fonction.
additionalEventData Contient functionRevisionArn l'ARN de la révision qui a répondu à la demande. Ce champ est présent sur tous les événements, y compris les refus.
tlsDetails Version TLS, suite de chiffrement et en-tête hôte de la demande.
userIdentity L'identité de l'appelant. Pour plus de détails, consultez la liste suivante.
sharedEventID Présent lorsque CloudTrail le même événement est diffusé à plus d'une personne Compte AWS.
errorCode, errorMessage Présent uniquement en cas d'erreur.
requestID, eventID, recipientAccountId, awsRegion CloudTrail Champs standard qui identifient la demande, l'événement, le destinataire Compte AWS et le Région AWS.

Les événements Web Function utilisent les formes d'ARN suivantes :

  • Fonction (resources[].ARN) — arn:aws:lambda:us-east-1:123456789012:web-function/my-fn

  • Point de terminaison (requestParameters.endpointArn) — arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/endpoint/my-endpoint

  • Révision (additionalEventData.functionRevisionArn) — arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/revision/rev-a1b2c

Le userIdentity champ dépend de la manière dont l'appelant s'est authentifié :

  • Les invocations non authentifiées sont enregistrées avec le type. userIdentity Unknown

  • IAM-authenticated les appelants sont enregistrés avec leur propre directeur. Par exemple, un appelant utilisant des informations d'identification temporaires apparaît avec les AssumedRole caractères typearn, an et a. sessionContext

  • Le champ accessKeyId n'est pas renseigné.

Événements d’erreur

CloudTrail enregistre également les tentatives d'invocation qui échouent une fois que l'appelant est authentifié. Le tableau suivant décrit ces événements d'erreur.

Scénario errorCode errorMessage
Appelant non autorisé AccessDenied L'utilisateur n'est pas autorisé à effectuer : lambda:InvokeWebFunctionEndpoint
Taux de demande, simultanéité ou limite de vCPU atteinte (point de terminaison ou compte) ThrottlingException Vitesse de transfert dépassée
Défaut de service ServiceException Erreur de service
Erreur d'application ou demande client non valide Non applicable Considéré comme un appel d'API réussi. L'invocation a atteint et exécuté la fonction.

Une invocation réussie ne comporte aucun errorCode ouerrorMessage. Les refus d'autorisation sont enregistrés sous AccessDenied le nom de. CloudTrail n'enregistre pas les demandes qui échouent à l'authentification, telles que les demandes dont la signature est manquante, mal formée, non valide ou expirée, et n'enregistre pas les demandes rejetées par Lambda avant l'authentification, telles que les demandes adressées à un point de terminaison rateLimit dont la valeur est 0. Les défaillances de l'infrastructure d'authentification interne ne sont pas non plus enregistrées. Pour détecter un pic de demandes rejetées, lancez une alarme HTTPResponseStatusClass4XX dans l'espace de AWS/Lambda/Web noms.

Exemple : appel réussi (appelant non authentifié)

L'exemple suivant montre un appel réussi par un appelant non authentifié.

{ "Records": [ { "eventVersion": "1.11", "userIdentity": { "type": "Unknown" }, "eventTime": "2026-09-22T18:41:07Z", "eventSource": "lambda.amazonaws.com", "eventName": "InvokeWebFunctionEndpoint", "awsRegion": "us-east-1", "sourceIPAddress": "203.0.113.42", "userAgent": "curl/8.4.0", "requestParameters": { "endpointArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/endpoint/my-endpoint" }, "responseElements": null, "additionalEventData": { "functionRevisionArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/revision/rev-a1b2c" }, "requestID": "b1f8a4c2-7e3d-4a19-9f6b-2c5d8e0a1234", "eventID": "d4c3b2a1-5f6e-7a8b-9c0d-1e2f3a4b5c6d", "readOnly": false, "resources": [ { "accountId": "123456789012", "type": "AWS::Lambda::WebFunction", "ARN": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn" } ], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "123456789012", "eventCategory": "Data", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "bcdfghjklmnpqrst.b7t.lambda-web.us-east-1.on.aws" } } ] }

Pour un IAM-authenticated appelant, le userIdentity champ contient plutôt le principal de l'appelant, par exemple tapez AssumedRole avec un arn et unsessionContext, et les champs restants restent inchangés.

Exemple : invocation refusée

Les événements d'erreur comportent errorCode eterrorMessage. L'exemple suivant montre un appel refusé.

{ "Records": [ { "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "ARO01EXAMPLEID:session-name", "arn": "arn:aws:sts::123456789012:assumed-role/app-invoke-role/session-name", "accountId": "123456789012", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "ARO01EXAMPLEID", "arn": "arn:aws:iam::123456789012:role/app-invoke-role", "accountId": "123456789012", "userName": "app-invoke-role" }, "attributes": { "creationDate": "2026-09-22T18:39:55Z", "mfaAuthenticated": "false" } } }, "eventTime": "2026-09-22T18:42:13Z", "eventSource": "lambda.amazonaws.com", "eventName": "InvokeWebFunctionEndpoint", "awsRegion": "us-east-1", "sourceIPAddress": "203.0.113.42", "userAgent": "aws-sdk-python/1.34.0", "errorCode": "AccessDenied", "errorMessage": "User is not authorized to perform: lambda:InvokeWebFunctionEndpoint", "requestParameters": { "endpointArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/endpoint/my-endpoint" }, "responseElements": null, "additionalEventData": { "functionRevisionArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/revision/rev-a1b2c" }, "requestID": "c2e9b5d3-8f4e-4b2a-a07c-3d6e9f1b2345", "eventID": "e5d4c3b2-6a7f-8b9c-0d1e-2f3a4b5c6d7e", "readOnly": false, "resources": [ { "accountId": "123456789012", "type": "AWS::Lambda::WebFunction", "ARN": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn" } ], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "123456789012", "eventCategory": "Data", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "bcdfghjklmnpqrst.b7t.lambda-web.us-east-1.on.aws" } } ] }

Événements de gestion dans CloudTrail

CloudTrail enregistre les événements de gestion des fonctions Web par défaut. Vous pouvez consulter les événements de gestion des 90 derniers jours dans l' CloudTrail historique des événements sans créer de trace. Pour les conserver plus longtemps, créez une banque de données sur les événements CloudTrail relatifs aux sentiers ou aux lacs. Pour plus d’informations, consultez Journalisation des événements de gestion dans le Guide de l’utilisateur AWS CloudTrail .

CloudTrail enregistre les opérations de fonction Web suivantes en tant qu'événements de gestion. Le eventName champ de chaque événement est identique au nom de l'opération.

Ressource ou tâche Opérations
Fonctions Web CreateWebFunction, GetWebFunction, ListWebFunctions, DeleteWebFunction
Révisions CreateWebFunctionRevision, GetWebFunctionRevision, ListWebFunctionRevisions, DeleteWebFunctionRevision
Points de terminaison CreateWebFunctionEndpoint, GetWebFunctionEndpoint, ListWebFunctionEndpoints, UpdateWebFunctionEndpoint, DeleteWebFunctionEndpoint
Paramètres du compte GetWebAccountSettings
Politiques basées sur une ressource PutResourcePolicy, GetResourcePolicy, DeleteResourcePolicy
Étiquettes TagResource, UntagResource, ListTags

L'invocation d'une fonction Web est une opération de plan de données. CloudTrail l'enregistre uniquement en tant qu'événement de données, comme décrit dansÉvénements de données de fonction Web dans CloudTrail.

Pour plus d’informations, consultez les ressources suivantes :