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.
Pour résoudre les problèmes liés à l'exécution des demandes ou à l'accès des clients à votre API, vous pouvez activer Amazon CloudWatch Logs pour enregistrer les appels d'API. Pour plus d'informations sur CloudWatch, voirSurveillez l'exécution de l'API REST avec CloudWatch les métriques Amazon.
CloudWatch formats de journal pour API Gateway
Il existe deux types de connexion à l'API CloudWatch : la journalisation de l'exécution et la journalisation des accès. Lors de la journalisation de l'exécution, API Gateway gère les CloudWatch journaux. Le processus comprend la création de groupes de journaux et de flux de journaux, et la génération de rapports dans les flux de journaux sur toutes les demandes et réponses des utilisateurs.
Les données journalisées incluent les erreurs ou les suivis d’exécution (comme valeurs des paramètres des demandes ou réponses, ou données utiles), les données utilisées par les mécanismes d’autorisation Lambda (anciennement appelés mécanismes d’autorisation personnalisée), et indiquent, entre autres, si des clés d’API sont requises, si les plans d’utilisation sont activés, ainsi que d’autres informations. API Gateway supprime les en-têtes d’autorisation, les valeurs des clés d’API et d’autres paramètres de demande sensibles similaires des données journalisées.
Pour améliorer votre niveau de sécurité, nous vous recommandons d'utiliser la journalisation des exécutions au INFO
niveau ERROR
or. Vous devrez peut-être le faire pour vous conformer aux différents cadres de conformité. Pour plus d'informations, consultez la section Contrôles Amazon API Gateway dans le guide de AWS Security Hub l'utilisateur.
Lorsque vous déployez une API, API Gateway crée un groupe de journaux et, sous celui-ci, les flux de journaux. Le groupe de journaux est nommé selon le format API-Gateway-Execution-Logs_{rest-api-id}/{stage_name}
. Dans chaque groupe de journaux, les journaux sont ensuite divisés en flux de journaux, qui sont ordonnés par Heure du dernier événement à mesure que les données sont rapportées.
Dans la journalisation des accès, vous, en tant que développeur d’API, souhaitez enregistrer qui a accédé à votre API et comment l’appelant à eu accès à l’API. Vous pouvez créer votre propre groupe de journaux ou en choisir un existant, qui peut être géré par API Gateway. Pour spécifier les détails d’accès, vous devez sélectionner des variables $context, un format de journal et une destination de groupe de journaux.
Le format du journal d’accès doit inclure au moins $context.requestId
ou $context.extendedRequestId
. À titre de bonne pratique, incluez $context.requestId
et $context.extendedRequestId
dans le format de votre journal.
$context.requestId
-
Cela journalise la valeur dans l’en-tête
x-amzn-RequestId
. Les clients peuvent écraser la valeur de l’en-têtex-amzn-RequestId
avec une valeur au format d’un identifiant unique universel (UUID). API Gateway renvoie cet ID de demande dans l’en-tête de réponsex-amzn-RequestId
. API Gateway remplace les demandes remplacées IDs qui ne sont pas au format UUID par celles figurant
dans vos journaux d'accès.UUID
_REPLACED_INVALID_REQUEST_ID $context.extendedRequestId
-
extendedRequestID est un ID unique généré par API Gateway. API Gateway renvoie cet ID de demande dans l’en-tête de réponse
x-amz-apigw-id
. Un appelant API ne peut pas fournir ni remplacer cet ID de demande. Vous devrez peut-être fournir cette valeur au AWS Support pour résoudre les problèmes liés à votre API. Pour de plus amples informations, veuillez consulter $contextVariables pour les modèles de données, les autorisateurs, les modèles de mappage et la journalisation des CloudWatch accès.
Note
Seules les variables $context
sont prises en charge.
Choisissez un format de journal également adopté par votre backend analytique, comme Common Log Format
Quelques exemples de certains formats de journaux d’accès utilisés couramment sont affichés dans la console API Gateway et répertoriés ci-dessous.
-
CLF
(Format de journal commun): $context.identity.sourceIp $context.identity.caller $context.identity.user [$context.requestTime]"$context.httpMethod $context.resourcePath $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
-
JSON
:{ "requestId":"$context.requestId", "extendedRequestId":"$context.extendedRequestId","ip": "$context.identity.sourceIp", "caller":"$context.identity.caller", "user":"$context.identity.user", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod", "resourcePath":"$context.resourcePath", "status":"$context.status", "protocol":"$context.protocol", "responseLength":"$context.responseLength" }
-
XML
:<request id="$context.requestId"> <extendedRequestId>$context.extendedRequestId</extendedRequestId> <ip>$context.identity.sourceIp</ip> <caller>$context.identity.caller</caller> <user>$context.identity.user</user> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <resourcePath>$context.resourcePath</resourcePath> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> </request>
-
CSV
(valeurs séparées par des virgules) :$context.identity.sourceIp,$context.identity.caller,$context.identity.user,$context.requestTime,$context.httpMethod,$context.resourcePath,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId
Autorisations pour la CloudWatch journalisation
Pour activer CloudWatch les journaux, vous devez autoriser API Gateway à lire et à écrire les journaux CloudWatch de votre compte. Amazon APIGateway PushToCloudWatchLogs dispose de toutes les autorisations requises.
Note
API Gateway appelle AWS Security Token Service pour assumer le rôle IAM. Assurez-vous donc que celui-ci AWS STS est activé pour la région. Pour plus d'informations, consultez la section Gestion du AWS STS dans une AWS région.
Pour accorder ces autorisations à votre compte, créez un rôle IAM en apigateway.amazonaws.com
tant qu'entité de confiance, associez la politique précédente au rôle IAM et définissez l'ARN du rôle IAM sur la cloudWatchRole propriété Arn de votre compte. Vous devez définir la cloudWatchRolepropriété Arn séparément pour chaque AWS région dans laquelle vous souhaitez activer CloudWatch les journaux.
Si vous recevez un message d'erreur lors de la définition de l'ARN du rôle IAM, vérifiez les paramètres de votre AWS Security Token Service compte pour vous assurer qu' AWS STS il est activé dans la région que vous utilisez. Pour plus d'informations sur l'activation AWS STS, consultez la section Gestion du AWS STS dans une AWS région dans le guide de l'utilisateur IAM.
Configuration de la journalisation des CloudWatch API à l'aide de la console API Gateway
Pour configurer la journalisation de CloudWatch l'API, vous devez avoir déployé l'API sur une étape. Vous devez également avoir configuré un ARN de rôle CloudWatch Logs approprié pour votre compte.
Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.
-
Dans le volet de navigation principal, choisissez Paramètres, puis sous Journalisation, choisissez Modifier.
-
Pour l'ARN du rôle de CloudWatch journal, entrez l'ARN d'un rôle IAM avec les autorisations appropriées. Vous devez le faire une fois pour chaque création Compte AWS à l' APIs aide d'API Gateway.
-
Dans le volet de navigation principal, choisissez APIs, puis effectuez l'une des opérations suivantes :
-
Choisissez une API existante, puis une étape.
-
Créez une API et déployez-la dans une étape.
-
Dans le volet de navigation principal, choisissez Étapes.
-
Dans la section Journaux et suivi, choisissez Modifier.
-
Pour activer la journalisation de l’exécution :
-
Sélectionnez un niveau de journalisation dans le menu déroulant CloudWatch Logs. Les niveaux de journalisation sont les suivants :
-
Désactivé – La journalisation n’est pas activée pour cette étape.
-
Erreurs uniquement – La journalisation n’est activée que pour les erreurs.
-
Journaux d’erreurs et d’informations – La journalisation est activée pour tous les événements.
-
-
(Facultatif) Sélectionnez Suivi des données pour activer la journalisation du suivi des données pour votre étape. Cela peut être utile pour résoudre les problèmes APIs, mais peut entraîner l'enregistrement de données sensibles.
Note
Nous vous recommandons de ne pas utiliser le suivi des données pour la production APIs.
-
(Facultatif) Sélectionnez Mesures détaillées pour activer les CloudWatch mesures détaillées.
Pour plus d'informations sur CloudWatch les métriques, consultezSurveillez l'exécution de l'API REST avec CloudWatch les métriques Amazon.
-
-
Pour activer la journalisation des accès :
-
Activez Journalisation des accès personnalisée.
-
Pour ARN de destination des journaux d’accès, entrez l’ARN d’un groupe de journaux. Le format ARN est le suivant :
arn:aws:logs:
.{region}
:{account-id}
:log-group:log-group-name
-
Dans Format des journaux, entrez un format de journal. Vous pouvez choisir CLF, JSON, XML ou CSV. Pour en savoir plus sur les exemples de formats de journal, consultez CloudWatch formats de journal pour API Gateway.
-
-
Sélectionnez Enregistrer les modifications.
Note
Vous pouvez activer la journalisation de l’exécution et la journalisation de l’accès indépendamment l’une de l’autre.
API Gateway est maintenant prêt à enregistrer les demandes adressées à votre API. Vous n’avez pas besoin de redéployer l’API lorsque vous mettez à jour les paramètres de l’étape, les journaux ou variables de l’étape.
Configurer la journalisation des CloudWatch API à l'aide de AWS CloudFormation
Utilisez l'exemple de AWS CloudFormation modèle suivant pour créer un groupe de CloudWatch journaux Amazon Logs et configurer la journalisation de l'exécution et des accès pour une étape. Pour activer CloudWatch les journaux, vous devez autoriser API Gateway à lire et à écrire les journaux CloudWatch de votre compte. Pour en savoir plus, consultez Associer le compte au rôle IAM dans le Guide de l’utilisateur AWS CloudFormation .
TestStage:
Type: AWS::ApiGateway::Stage
Properties:
StageName: test
RestApiId: !Ref MyAPI
DeploymentId: !Ref Deployment
Description: "test stage description"
MethodSettings:
- ResourcePath: "/*"
HttpMethod: "*"
LoggingLevel: INFO
AccessLogSetting:
DestinationArn: !GetAtt MyLogGroup.Arn
Format: $context.extendedRequestId $context.identity.sourceIp $context.identity.caller $context.identity.user [$context.requestTime] "$context.httpMethod $context.resourcePath $context.protocol" $context.status $context.responseLength $context.requestId
MyLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Join
- '-'
- - !Ref MyAPI
- access-logs