

# Configuración del registro de API HTTP en API Gateway
<a name="http-api-logging"></a>

Puede activar el registro para escribir registros en CloudWatch Logs. Puede utilizar [variables de registro](http-api-logging-variables.md) para personalizar el contenido de los registros.

Para aumentar la seguridad, le recomendamos que escriba los registros en Registros de CloudWatch para todas las etapas de la API HTTP. Es probable que deba hacerlo para asegurar el cumplimiento de diversos marcos normativos. Para obtener más información, consulte [Controles de Amazon API Gateway](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) en la *Guía del usuario de AWS Security Hub*.

Para activar el registro para una API HTTP, tendrá que hacer lo siguiente.

1. Asegúrese de que el usuario tenga los permisos necesarios para activar el registro.

1. Cree un grupo de registros de Registros de CloudWatch.

1. Proporcione el ARN del grupo de registros de Registros de CloudWatch para una etapa de la API.

## Permisos para activar el registro
<a name="http-api-logging.permissions"></a>

Para activar el registro para una API, el usuario debe tener los siguientes permisos.

**Example**    
****  

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

## Crear un grupo de registro y activar el registro para las API HTTP
<a name="http-api-enable-logging"></a>

Puede crear un grupo de registro y activar el registro de acceso mediante Consola de administración de AWS o AWS CLI.

------
#### [ Consola de administración de AWS ]

1.  Cree un grupo de registros. 

   Para obtener información acerca de cómo crear un grupo de registro mediante la consola, consulte [Crear un grupo de registro en la Guía del usuario de Registros de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html).

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

1. Elija una API HTTP.

1. En la pestaña **Monitor** (Monitorear), en el panel de navegación principal, elija **Logging** (Registro).

1. Seleccione una etapa para activar el registro y elija **Select** (Seleccionar). 

1. Elija **Edit** (Editar) para activar el registro de acceso. 

1. Active el **Access logging** (Registro de acceso), ingrese un registro de CloudWatch y seleccione un formato de registro.

1. Seleccione **Save**.

------
#### [ AWS CLI ]

El siguiente comando [create-log-group](https://docs.aws.amazon.com/cli/latest/reference/logs/create-log-group.html) permite crear un grupo de registro:

```
aws logs create-log-group --log-group-name {{my-log-group}}
```

Necesita el nombre de recurso de Amazon (ARN) del grupo de registro para activar el registro. El formato del ARN es arn:aws:logs:{{región}}:{{id de cuenta}}:grupo de registro:{{nombre del grupo de registro}}.

El siguiente comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html) activa el registro para la etapa `$default` de una 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"}'
```

------

## Ejemplo de formatos de registro
<a name="http-api-enable-logging.examples"></a>

La consola de API Gateway incluye algunos ejemplos de los formatos de registro de acceso habituales, los cuales se detallan a continuación.
+ `CLF` ([Common Log Format](https://httpd.apache.org/docs/current/logs.html#common)):

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

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