

# Registros de acceso para las API de REST
<a name="set-up-access-logging"></a>

En los registros de acceso, se registra quién ha accedido a la API y cómo el intermediario ha accedido a la API. Puede crear su propio grupo de registro o elegir un grupo de registro existente. Para especificar los detalles de acceso, se seleccionan variables [`$context`](api-gateway-variables-for-access-logging.md), un formato de registro y un destino de grupo de registro.

## Formatos de los registro de acceso
<a name="apigateway-cloudwatch-log-formats"></a>

El formato del registro de acceso debe incluir al menos `$context.requestId` o `$context.extendedRequestId`. Como práctica recomendada, incluya ambos en el formato de registro.

**`$context.requestId`**  
Esto registra el valor en el encabezado `x-amzn-RequestId`. Los clientes pueden invalidar el valor del encabezado `x-amzn-RequestId` con un valor en formato de identificador único universal (UUID). API Gateway devuelve este ID de solicitud en el encabezado de respuesta `x-amzn-RequestId`. API Gateway sustituye los ID de solicitud invalidados que no tienen el formato de un UUID por `{{UUID}}_REPLACED_INVALID_REQUEST_ID` en los registros de acceso.

**`$context.extendedRequestId`**  
ExtendedRequestID es un ID único que API Gateway genera. API Gateway devuelve este ID de solicitud en el encabezado de respuesta `x-amz-apigw-id`. Una persona que llama a la API no puede proporcionar ni anular este ID de solicitud. Es posible que tenga que proporcionar este valor a AWS Support para que le ayude a solucionar los problemas de la API. Para obtener más información, consulte [Variables para el registro de acceso para API Gateway](api-gateway-variables-for-access-logging.md).

Elija un formato de registro que también se utilice en el backend de análisis; por ejemplo, [Common Log Format](https://httpd.apache.org/docs/current/logs.html#common) (CLF), JSON, XML o CSV. Después, puede incluir datos en los registros de acceso para que tengan las métricas calculadas y procesadas. Para definir el formato del registro, establezca el ARN del grupo de registros en la propiedad [accessLogSettings/destinationArn](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#destinationArn) de [stage](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html). Puede obtener el ARN de un grupo de registro en la consola de CloudWatch. Para definir el formato del registro de acceso, establezca el formato elegido en la propiedad [accessLogSetting/format](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#format) de [stage](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html).

Algunos ejemplos de los formatos de registro de acceso que se utilizan habitualmente se muestran en la consola de API Gateway y se detallan a continuación.
+ `CLF` ([Common Log Format](https://httpd.apache.org/docs/current/logs.html#common)):

  ```
  $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` (valores separados por comas):

  ```
  $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
  ```

## Configuración del registro de acceso mediante la consola de API Gateway
<a name="set-up-access-logging-using-console"></a>

Antes de configurar el registro de acceso, implemente la API en una etapa y configure [un ARN de rol de Registros de CloudWatch adecuado](set-up-logging.md#set-up-access-logging-permissions) para la cuenta.

1. Inicie sesión en la consola de API Gateway, en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. En el panel de navegación principal, elija **API** y, a continuación, realice una de las siguientes acciones:

   1. Elija una API existente y después una etapa.

   1. Cree una API e impleméntela como etapa.

1. En el panel de navegación principal, elija **Etapas**.

1. En la sección **Registros y rastreo**, elija **Editar**.

1. Active **Registros de acceso personalizado**.

1. En **ARN del destino de registro de acceso**, ingrese el ARN de un grupo de registro. El formato del ARN es `arn:aws:logs:{{{region}}}:{{{account-id}}}:log-group:{{log-group-name}}`.

1. En **Formato de registro**, ingrese un formato de registro. Puede elegir **CLF**, **JSON**, **XML** o **CSV**. Para obtener más información sobre ejemplos de formatos de registro, consulte [Formatos de los registro de acceso](#apigateway-cloudwatch-log-formats).

1. Seleccione **Save changes (Guardar cambios)**.

API Gateway ya está listo para registrar solicitudes en la API. Si actualiza la configuración de la etapa, los registros o las variables de la etapa, no necesita volver a implementar la API.

## Configuración del registro de acceso mediante CloudFormation
<a name="set-up-access-logging-using-cloudformation"></a>

Utilice la siguiente plantilla de CloudFormation de ejemplo para crear un grupo de registro de Registros de Amazon CloudWatch y configurar el registro de acceso para una etapa. Para habilitar CloudWatch Logs, debe conceder permiso a API Gateway para leer y escribir registros en CloudWatch para su cuenta. Para obtener más información, consulte [Asociar una cuenta a un rol de IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html#aws-resource-apigateway-account--examples) en la *Guía del usuario de AWS CloudFormation*.

```
  TestStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      StageName: test
      RestApiId: !Ref MyAPI
      DeploymentId: !Ref Deployment
      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
```