Configurazione della registrazione dei log per le API HTTP in Gateway API - Amazon API Gateway

Configurazione della registrazione dei log per le API HTTP in Gateway API

È possibile attivare la registrazione per scrivere i log in CloudWatch Logs. È possibile utilizzare variabili di registrazione per personalizzare il contenuto dei log.

Per migliorare il livello di sicurezza, è consigliabile registrare i log su CloudWatch Logs per tutte le fasi dell’API HTTP. Potrebbe essere necessario eseguire questa operazione per rispettare vari framework di conformità. Per ulteriori informazioni, consultare Amazon API Gateway controls nella Guida per l’utente di AWS Security Hub.

Per attivare la registrazione per un'API HTTP, è necessario effettuare le seguenti operazioni.

  1. Assicurarsi che l'utente disponga delle autorizzazioni necessarie per attivare la registrazione.

  2. Creare un gruppo di log di CloudWatch Logs.

  3. Fornire l'ARN del gruppo di log di CloudWatch Logs per una fase dell'API.

Autorizzazioni per attivare la registrazione

Per attivare la registrazione per un'API, l'utente deve disporre delle seguenti autorizzazioni.

JSON
{ "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": "*" } ] }

Creare un gruppo di log e attivare la registrazione per le API HTTP

È possibile creare un gruppo di log e attivare la registrazione degli accessi mediante la AWS Management Console o la AWS CLI.

AWS Management Console
  1. Creazione di un gruppo di log.

    Per informazioni su come creare un gruppo di log utilizzando la console, consulta Creazione di un gruppo di log nella Guida per l'utente di File di log Amazon CloudWatch.

  2. Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.

  3. Scegliere un'API HTTP.

  4. Nella scheda Monitor (Monitoraggio) nel riquadro di navigazione principale, scegliere Logging (Registrazione).

  5. Seleziona una fase per attivare la registrazione e scegliere Select (Seleziona).

  6. Scegliere Edit (Modifica) per attivare la registrazione degli accessi.

  7. Attivare Access logging (Registrazione accessi), immettere un log CloudWatch Logs e selezionare un formato di log.

  8. Selezionare Salva.

AWS CLI

Il comando create-log-group seguente crea un gruppo di log:

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

Per attivare la registrazione, è necessario il nome della risorsa Amazon (ARN) del gruppo di log. Il formato ARN è arn:aws:logs:region:account-id:log-group:log-group-name.

Il comando update-stage seguente attiva la registrazione dei log per la fase $default di un’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"}'

Formati di log di esempio

Esempi di formati di log di accesso comuni utilizzati con maggiore frequenza sono disponibili nella console API Gateway ed elencati come segue.

  • CLF (Common Log Format):

    $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 (valori separati da virgola):

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