Configuration de la CloudWatch journalisation pour les API REST dans API Gateway - Amazon API Gateway

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.

Configuration de la CloudWatch journalisation pour les API REST dans API Gateway

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 enregistrées incluent les erreurs ou les traces d'exécution (telles que les valeurs des paramètres de demande ou de réponse ou les charges utiles), les données utilisées par les autorisateurs Lambda (anciennement appelés autorisateurs personnalisés), si les clés d'API sont requises, si les plans d'utilisation sont activés, et d'autres informations. API Gateway supprime les en-têtes d'autorisation, les valeurs des clés d'API et les paramètres de demande sensibles similaires à partir des données enregistrées.

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 sélectionnez $contextdes variables, 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. La meilleure pratique consiste à inclure $context.requestId et $context.extendedRequestId dans le format de votre journal.

$context.requestId

Cela enregistre la valeur dans l'x-amzn-RequestIden-tête. Les clients peuvent écraser la valeur de l'en-tête x-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éponse x-amzn-RequestId. API Gateway remplace les identifiants de demande remplacés qui ne sont pas au format UUID par ceux de vos journaux d'UUID_REPLACED_INVALID_REQUEST_IDaccès.

$context.extendedRequestId

L'ExtendedRequestID est un identifiant 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 plus d’informations, consultez $contextVariables pour les modèles de données, les autorisateurs, les modèles de mappage et la journalisation des CloudWatch accès.

Note

Seules $context les variables sont prises en charge.

Choisissez un format de journal également adopté par votre backend analytique, comme Common Log Format (CLF), JSON, XML ou CSV. Vous pouvez ensuite y renseigner les journaux d'accès directement pour que vos mesures soient calculées et renvoyées. Pour définir le format du journal, définissez l'ARN du groupe de journaux sur la propriété accessLogSettings/DestinationArn de la scène. Vous pouvez obtenir un ARN de groupe de journaux dans la CloudWatch console. Pour définir le format du journal d'accès, définissez le format choisi sur la propriété accessLogSetting/format de la scène.

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. La stratégie gérée AmazonAPIGatewayPushToCloudWatchLogs (avec un ARN arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs) possède toutes les autorisations nécessaires :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "*" } ] }
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.

  1. Connectez-vous à la console API Gateway à l'adresse : https://console.aws.amazon.com/apigateway.

  2. Dans le volet de navigation principal, choisissez Paramètres, puis sous Journalisation, choisissez Modifier.

  3. 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 utilisateur Compte AWS qui crée des API à l'aide d'API Gateway.

  4. Dans le volet de navigation principal, choisissez API, puis effectuez l'une des opérations suivantes :

    1. Choisissez une API existante, puis une étape.

    2. Créez une API et déployez-la dans une étape.

  5. Dans le volet de navigation principal, choisissez Étapes.

  6. Dans la section Journaux et suivi, choisissez Modifier.

  7. Pour activer la journalisation de l'exécution :

    1. 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.

      • Journaux complets des demandes et des réponses : la journalisation détaillée est activée pour tous les événements. Cela peut être utile pour dépanner les API, mais peut entraîner la consignation de données sensibles.

        Note

        Nous vous recommandons de ne pas utiliser les Journaux complets des requêtes et des réponses pour les API de production.

    2. Si vous le souhaitez, 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.

  8. Pour activer la journalisation des accès :

    1. Activez Journalisation des accès personnalisée.

    2. 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.

    3. 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.

  9. 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 leGuide 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