Configuration de la journalisation pour une API HTTP - Amazon API Gateway

Configuration de la journalisation pour une API HTTP

Vous pouvez activer la journalisation pour écrire des journaux dans CloudWatch Logs. Vous pouvez utiliser des variables de journalisation pour personnaliser le contenu de vos journaux.

Pour activer la journalisation pour une API HTTP, vous devez effectuer les opérations suivantes.

  1. Vérifiez que votre utilisateur dispose des autorisations nécessaires pour activer la journalisation.

  2. Créez un groupe de journaux CloudWatch Logs.

  3. Fournissez l'ARN du groupe de journaux CloudWatch Logs pour une étape de votre API.

Autorisations pour activer la journalisation

Pour activer la journalisation pour une API, votre utilisateur doit disposer des autorisations suivantes.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:us-east-2:123456789012:log-group:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:CreateLogGroup", "logs:DescribeResourcePolicies", "logs:GetLogDelivery", "logs:ListLogDeliveries" ], "Resource": "*" } ] }

Création d'un groupe de journaux et activation de la journalisation pour les API HTTP

Vous pouvez créer un groupe de journaux et activer la journalisation des accès à l'aide de la AWS Management Console ou de l'AWS CLI.

AWS Management Console
  1. Créez un groupe de journaux .

    Pour savoir comment créer un groupe de journaux à l'aide de la console, consultez Création de groupes de journaux dans le Guide l'utilisateur Amazon CloudWatch Logs.

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

  3. Choisissez une API HTTP.

  4. Sous l'onglet Monitor (Surveiller) du panneau de navigation principal, choisissez Logging (Journalisation).

  5. Sélectionnez une étape pour activer la journalisation, puis choisissez Select (Sélectionner).

  6. Choisissez Edit (Modifier) pour activer la journalisation des accès.

  7. Activez Access logging (Journalisation des accès), saisissez CloudWatch Logs, puis sélectionnez un format de journal.

  8. Choisissez Enregistrer.

AWS CLI

La commande AWS CLI suivante permet de créer un groupe de journaux.

aws logs create-log-group --log-group-name my-log-group

Vous avez besoin de l'Amazon Resource Name (ARN) de votre groupe de journaux pour activer la journalisation. Le format de l'ARN est arn:aws:logs:région: ID_compte:log-group:nom_groupe_journaux.

La commande AWS CLI suivante active la journalisation pour l'étape $default d'une API HTTP.

aws apigatewayv2 update-stage --api-id abcdef \ --stage-name '$default' \ --access-log-settings '{"DestinationArn": "arn:aws:logs:region:account-id:log-group:log-group-name", "Format": "$context.identity.sourceIp - - [$context.requestTime] \"$context.httpMethod $context.routeKey $context.protocol\" $context.status $context.responseLength $context.requestId"}'

Exemples de format de journal

Des exemples de format de journal utilisé couramment sont disponibles dans la console API Gateway et répertoriés ci-dessous.

  • CLF (Format de journal commun):

    $context.identity.sourceIp - - [$context.requestTime] "$context.httpMethod $context.routeKey $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  • JSON:

    { "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength", "extendedRequestId": "$context.extendedRequestId" }
  • XML:

    <request id="$context.requestId"> <ip>$context.identity.sourceIp</ip> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <routeKey>$context.routeKey</routeKey> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
  • CSV (valeurs séparées par des virgules) :

    $context.identity.sourceIp,$context.requestTime,$context.httpMethod,$context.routeKey,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId