

# Protección de sus API de HTTP en API Gateway
<a name="http-api-protect"></a>

API Gateway proporciona una serie de formas de proteger su API de ciertas amenazas, como usuarios malintencionados o picos de tráfico. Puede proteger su API mediante estrategias como establecer objetivos de limitación y habilitar TLS mutuo. En esta sección puede aprender cómo habilitar estas capacidades mediante API Gateway.

**Topics**
+ [Limitación de las solicitudes a sus API HTTP para mejorar el rendimiento en API Gateway](http-api-throttling.md)
+ [Cómo habilitar la autenticación TLS mutua para sus API de HTTP en API Gateway](http-api-mutual-tls.md)

# Limitación de las solicitudes a sus API HTTP para mejorar el rendimiento en API Gateway
<a name="http-api-throttling"></a>

Puede configurar la limitación de las API para evitar que se vean desbordadas por un número excesivo de solicitudes. La limitación se aplica como medida compensatoria y se debe considerar como un valor objetivo, más que como un límite de solicitudes garantizado.

API Gateway limita las solicitudes a la API utilizando el algoritmo de bucket de tokens, donde un token cuenta por una solicitud. En concreto, API Gateway examina el ratio de solicitudes y una ráfaga de envíos de solicitudes para todas las API de su cuenta, por región. En el algoritmo de bucket de tokens, una ráfaga puede permitir que se sobrepasen los límites predefinidos, pero también hay otros factores que pueden hacer que se sobrepasen los límites en algunos casos.

Cuando los envíos de solicitudes superan los límites de ratio de solicitudes en estado estable y de ráfaga, API Gateway comienza a limitar las solicitudes. Los clientes pueden recibir respuestas de error `429 Too Many Requests` en este momento. Tras capturar estas excepciones, el cliente puede reenviar las solicitudes que han producido un error de forma que limite el ratio.

Como desarrollador de la API, puede configurar los límites objetivos para las etapas o rutas individuales de la API con el fin de mejorar el rendimiento general de todas las API de su cuenta.

## Limitación de nivel de cuenta por región
<a name="http-api-protect-throttling-account"></a>

De forma predeterminada, API Gateway limita las solicitudes de estado constante por segundo (RPS) en todas las API de una cuenta de AWS, por región. También limita la ráfaga (es decir, el tamaño máximo del bucket) en todas las API dentro de una cuenta de AWS, por región. En API Gateway, el límite de ráfaga representa el número máximo de envíos de solicitudes simultáneas que API Gateway; abordará antes de devolver respuestas de error `429 Too Many Requests`. Para obtener más información sobre las cuotas de limitación, consulte [Cuotas de Amazon API Gateway](limits.md).

Los límites por cuenta se aplican a todas las API de una cuenta en una región determinada. El límite de ratio de nivel de cuenta se puede aumentar previa solicitud. Los límites más altos son posibles con API que tienen tiempos de espera más cortos y cargas útiles más pequeñas. Para solicitar un aumento de los límites de limitación de nivel de cuenta por región, contacte con el [Centro de soporte de AWS](https://console.aws.amazon.com/support/home#/). Para obtener más información, consulte [Cuotas de Amazon API Gateway](limits.md). Tenga en cuenta que estos límites no pueden ser superiores a los límites de limitación de AWS.

## Limitación de nivel de ruta
<a name="http-api-protect-throttling-route"></a>

Puede definir la limitación de nivel de ruta para invalidar los límites de limitación de las solicitudes de nivel de cuenta de una determinada etapa o de las rutas individuales de la API. Los límites de limitación de rutas predeterminados no pueden superar los límites de ratio a nivel de cuenta.

Puede configurar la limitación de nivel de ruta mediante la AWS CLI. El siguiente comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html) permite configurar la limitación de nivel de ruta para la etapa y la ruta especificadas de una API.

```
aws apigatewayv2 update-stage \
    --api-id a1b2c3d4 \
    --stage-name dev \
    --route-settings '{"GET /pets":{"ThrottlingBurstLimit":100,"ThrottlingRateLimit":2000}}'
```

# Cómo habilitar la autenticación TLS mutua para sus API de HTTP en API Gateway
<a name="http-api-mutual-tls"></a>

La autenticación TLS mutua requiere la autenticación bidireccional entre el cliente y el servidor. Con la TLS mutua, los clientes deben presentar certificados X.509 para verificar su identidad y acceder a su API. La TLS mutua es un requisito frecuente para el Internet de las cosas (IoT) y las aplicaciones entre empresas. 

Puede utilizar TLS mutua junto con otras [operaciones de autorización y autenticación](apigateway-control-access-to-api.md) compatibles con API Gateway. API Gateway reenvía los certificados que los clientes proporcionan a los autorizadores de Lambda y a las integraciones del backend.

**importante**  
De forma predeterminada, los clientes pueden invocar su API mediante el punto de conexión `execute-api` que API Gateway genera para su API. Para asegurarse de que los clientes solo puedan acceder a su API mediante un nombre de dominio personalizado con la TLS mutua, deshabilite el punto de conexión `execute-api` predeterminado. Para obtener más información, consulte [Deshabilitación del punto de conexión predeterminado para las API HTTP](http-api-disable-default-endpoint.md). 

## Requisitos previos de la TLS mutua
<a name="http-api-mutual-tls-prerequisites"></a>

Para configurar la TLS mutua necesita lo siguiente:
+ Un nombre de dominio personalizado
+ Al menos un certificado configurado en AWS Certificate Manager para el nombre de dominio personalizado
+ Un almacén de confianza configurado y cargado en Amazon S3

### Nombres de dominio personalizados
<a name="http-api-mutual-tls-custom-domain-name"></a>

 Para habilitar la TLS mutua para una API HTTP, debe configurar un nombre de dominio personalizado para la API. Puede habilitar la TLS mutua para un nombre de dominio personalizado y, a continuación, proporcionar el nombre de dominio personalizado a los clientes. Para acceder a una API mediante un nombre de dominio personalizado que tenga habilitada la TLS mutua, los clientes deben presentar certificados en los que confíe en las solicitudes de API. Dispone de más información en [Nombres de dominio personalizados para las API de HTTP en API Gateway](http-api-custom-domain-names.md).

### Uso de certificados emitidos por AWS Certificate Manager
<a name="http-api-mutual-tls-using-acm-issued-certs"></a>

Puede solicitar un certificado de confianza pública directamente desde ACM o importar certificados públicos o autofirmados. Para configurar un certificado en ACM, vaya a [ACM](https://console.aws.amazon.com/acm/). Si desea importar un certificado, siga leyendo en la siguiente sección.

### Uso de un certificado importado o de AWS Private Certificate Authority
<a name="http-api-mutual-tls-non-acm-certs"></a>

Para utilizar un certificado importado en ACM o un certificado de AWS Private Certificate Authority con TLS mutua, API Gateway necesita un `ownershipVerificationCertificate` emitido por ACM. Este certificado de propiedad solo se utiliza para comprobar que dispone de permisos para utilizar el nombre de dominio. No se utiliza en el protocolo de enlace TLS. Si todavía no tiene un `ownershipVerificationCertificate`, vaya a [https://console.aws.amazon.com/acm/](https://console.aws.amazon.com/acm/) para configurarlo.

Este certificado deberá mantener su validez durante toda la vida útil del nombre de dominio. Si un certificado caduca y falla la renovación automática, se bloquearán todas las actualizaciones del nombre de dominio. Tendrá que actualizar el `ownershipVerificationCertificateArn` con un `ownershipVerificationCertificate` válido para poder realizar otros cambios. El `ownershipVerificationCertificate` no se puede utilizar como certificado de servidor para otro dominio de TLS mutua en API Gateway. Si un certificado se vuelve a importar directamente en ACM, el emisor debe ser el mismo.

### Configuración del almacén de confianza
<a name="http-api-mutual-tls-create-trust-store"></a>

Los almacenes de confianza son archivos de texto cuya extensión es `.pem`. Son una lista de certificados de confianza procedentes de entidades de certificación. Para utilizar la TLS mutua, cree un almacén de confianza de certificados X.509 en los que confíe para acceder a su API.

En el almacén de confianza debe incluir la cadena de confianza completa, desde el certificado de entidad de certificación emisora hasta el certificado de entidad de certificación raíz. API Gateway acepta certificados de cliente emitidos por cualquier entidad de certificación presente en la cadena de confianza. Los certificados pueden ser de autoridades de certificación públicas o privadas. Los certificados pueden tener una longitud máxima de cadena de cuatro. También puede proporcionar certificados autofirmados. Se admiten los siguientes algoritmos hash en el almacén de confianza:
+ SHA-256 o más seguro
+ RSA-2048 o más seguro
+ ECDSA-256 o más seguro

API Gateway valida una serie de propiedades de certificado. Puede utilizar autorizadores de Lambda para realizar comprobaciones adicionales cuando un cliente invoque una API, tales como verificar si se ha revocado un certificado. API Gateway valida las siguientes propiedades:


| Validación | Descripción | 
| --- | --- | 
|  Sintaxis X.509  |  El certificado debe cumplir los requisitos de sintaxis X.509.  | 
|  Integridad  |  El contenido del certificado no debe haberse alterado con respecto al firmado por la entidad de certificación del almacén de confianza.  | 
|  Validez  |  El período de validez del certificado debe ser actual.  | 
|  Encadenamiento de nombres/encadenamiento de claves  |  Los nombres y asuntos de los certificados deben formar una cadena ininterrumpida. Los certificados pueden tener una longitud máxima de cadena de cuatro.  | 

### Carga del almacén de confianza a un bucket de Amazon S3 en un solo archivo
<a name="w2aac19c17b9b9c13"></a>

**Example certificates.pem**  

```
-----BEGIN CERTIFICATE-----
<Certificate contents>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Certificate contents>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Certificate contents>
-----END CERTIFICATE-----
...
```

El siguiente comando [cp](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html) de la AWS CLI permite cargar `certificates.pem` en el bucket de Amazon S3.

```
aws s3 cp certificates.pem s3://bucket-name
```

## Configuración de la TLS mutua para un nombre de dominio personalizado
<a name="http-api-mutual-tls-configure"></a>

Para configurar la TLS mutua para una API HTTP, debe utilizar un nombre de dominio personalizado regional para la API, y la versión mínima de TLS debe ser la 1.2. Para obtener más información sobre cómo crear y configurar un nombre de dominio personalizado, consulte [Configuración de un nombre de dominio personalizado regional en API Gateway](apigateway-regional-api-custom-domain-create.md).

**nota**  
La TLS mutua no es compatible con las API privadas.

Después de cargar su almacén de confianza en Amazon S3, puede configurar su nombre de dominio personalizado para que utilice TLS mutua. El siguiente comando [create-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-domain-name.html) permite crear un nombre de dominio personalizado con TLS mutua:

```
aws apigatewayv2 create-domain-name \
    --domain-name api.example.com \
    --domain-name-configurations CertificateArn=arn:aws:acm:us-west-2:123456789012:certificate/123456789012-1234-1234-1234-12345678 \
    --mutual-tls-authentication TruststoreUri=s3://bucket-name/key-name
```

Después de crear el nombre de dominio, debe configurar los registros DNS y los mapeos de ruta base para las operaciones de la API. Para obtener más información, consulte [Configuración de un nombre de dominio personalizado regional en API Gateway](apigateway-regional-api-custom-domain-create.md).

## Invocar una API mediante un nombre de dominio personalizado que requiere la TLS mutua
<a name="http-api-mutual-tls-invoke"></a>

Para invocar una API con la TLS mutua habilitada, los clientes deben presentar un certificado de confianza en la solicitud de la API. Cuando un cliente intenta invocar la API, API Gateway busca el emisor del certificado del cliente en el almacén de confianza. Para que API Gateway atienda la solicitud, en el almacén de confianza deben constar el emisor del certificado y la cadena de confianza completa hasta el certificado de entidad de certificación raíz.

El siguiente ejemplo de comando `curl` envía una solicitud a `api.example.com,` que incluye `my-cert.pem` en la solicitud. `my-key.key` es la clave privada del certificado.

```
curl -v --key ./my-key.key --cert ./my-cert.pem api.example.com
```

Su API solo se invoca si su almacén de confianza confía en el certificado. Las siguientes condiciones provocarán que API Gateway no pueda completar el protocolo de enlace TLS y deniegue la solicitud con un código de estado `403`. Si el certificado:
+ no es de confianza
+ ha caducado
+ no utiliza un algoritmo compatible

**nota**  
API Gateway no comprueba si se ha revocado un certificado.

## Actualización de su almacén de confianza
<a name="http-api-mutual-tls-update-truststore"></a>

Para actualizar los certificados del almacén de confianza, cargue un nuevo paquete de certificados en Amazon S3. Después, puede actualizar el nombre de dominio personalizado para que utilice el certificado actualizado.

Utilice el [control de versiones de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) para mantener varias versiones de su almacén de confianza. Cuando actualiza el nombre de dominio personalizado para utilizar una nueva versión del almacén de confianza, API Gateway devuelve advertencias si los certificados no son válidos.

API Gateway produce advertencias de certificado solo cuando actualiza el nombre de dominio. API Gateway no le notifica si caduca un certificado cargado anteriormente.

El siguiente comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) permite actualizar un nombre de dominio personalizado para utilizar una nueva versión del almacén de confianza.

```
aws apigatewayv2 update-domain-name \
    --domain-name api.example.com \
    --domain-name-configurations CertificateArn=arn:aws:acm:us-west-2:123456789012:certificate/123456789012-1234-1234-1234-12345678 \
    --mutual-tls-authentication TruststoreVersion='abcdef123'
```

## Deshabilitar la TLS mutua
<a name="http-api-mutual-tls-disable"></a>

Para deshabilitar la TLS mutua para un nombre de dominio personalizado, elimine el almacén de confianza del nombre de dominio personalizado, como se muestra en el siguiente comando.

El siguiente comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) permite actualizar un nombre de dominio personalizado para eliminar de él el almacén de confianza:

```
aws apigatewayv2 update-domain-name \
    --domain-name api.example.com \
    --domain-name-configurations CertificateArn=arn:aws:acm:us-west-2:123456789012:certificate/123456789012-1234-1234-1234-12345678 \
    --mutual-tls-authentication TruststoreUri=''
```

## Solución de problemas de TLS mutuo para su API de HTTP
<a name="http-api-mutual-tls-troubleshooting"></a>

A continuación se proporcionan consejos para solucionar errores y problemas que puedan surgir al activar TLS mutuo.

### Solución de problemas de advertencias de certificados
<a name="http-api-mutual-tls-troubleshooting-certificate"></a>

 Cuando se crea un nombre de dominio personalizado con TLS mutua, API Gateway devuelve advertencias si los certificados del almacén de confianza no son válidos. Esto también puede ocurrir cuando se actualiza un nombre de dominio personalizado para que utilice un nuevo almacén de confianza. Las advertencias indican el problema con el certificado y el asunto del certificado que produjo la advertencia. La TLS mutua aún está habilitada en la API, pero es posible que algunos clientes no puedan acceder a su API.

Debe descodificar los certificados del almacén de confianza para identificar cuál de ellos ha producido la advertencia. Puede utilizar herramientas como `openssl` para descodificar los certificados e identificar sus asuntos.

El siguiente comando muestra el contenido de un certificado, incluido su asunto:

```
openssl x509 -in certificate.crt -text -noout
```

Actualice o elimine los certificados que produjeron advertencias y, a continuación, cargue un nuevo almacén de confianza en Amazon S3. Después de cargar el nuevo almacén de confianza, actualice el nombre de dominio personalizado para que utilice ese nuevo almacén de confianza.

### Solución de problemas por conflictos de nombres de dominio
<a name="w2aac19c17b9c19b7"></a>

El error `"The certificate subject <certSubject> conflicts with an existing certificate from a different issuer."` significa que varias entidades de certificación han emitido un certificado para este dominio. Para cada asunto del certificado, solo puede haber un emisor en API Gateway para dominios de TLS mutua. Tendrá que obtener todos los certificados para ese asunto a través de un solo emisor. Si el problema se debe a un certificado que no está bajo su control pero puede demostrar la propiedad del nombre de dominio, [contacte con Soporte](https://console.aws.amazon.com/support/cases#/create) para abrir un ticket.

### Solución de problemas por mensajes de estado de nombres de dominio
<a name="w2aac19c17b9c19b9"></a>

`PENDING_CERTIFICATE_REIMPORT`: esto significa que ha vuelto a importar un certificado en ACM y ha fallado la validación porque el nuevo certificado tiene un SAN (nombre alternativo de sujeto) que no está cubierto por el `ownershipVerificationCertificate`, o bien porque el asunto o los SAN del certificado no cubren el nombre de dominio. Es posible que haya algo que esté configurado incorrectamente o que se haya importado un certificado no válido. Debe volver a importar un certificado válido en ACM. Para obtener más información sobre la validación, consulte [Validación de la propiedad de dominios](https://docs.aws.amazon.com/acm/latest/userguide/domain-ownership-validation.html).

`PENDING_OWNERSHIP_VERIFICATION`: esto significa que el certificado verificado previamente ha caducado y ACM no lo ha podido renovar automáticamente. Tendrá que renovar el certificado o solicitar otro nuevo. Dispone de más información sobre la renovación de certificados en la guía [Solución de problemas de renovación de certificados administrados de ACM](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-renewal.html).