

# Control del acceso a una API de REST con políticas de recursos de API Gateway
<a name="apigateway-resource-policies"></a>

Las *políticas de recursos* de Amazon API Gateway son documentos de política JSON que se asocian a una API para controlar si una entidad principal especificada (por lo general, un rol o un grupo de IAM) puede invocar la API. Puede utilizar las políticas de recursos de API Gateway para permitir la invocación segura de la API por parte de:
+ Los usuarios de una cuenta de AWS especificada.
+ Los intervalos de direcciones IP o bloques de CIDR especificados.
+ Las nubes privadas virtuales (VPC) o los puntos de conexión de VPC (de cualquier cuenta) especificados.

Puede asociar una política de recursos para cualquier tipo de punto de conexión de la API en API Gateway mediante la Consola de administración de AWS, la CLI de AWS o los AWS SDK. Para [API privadas](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html), puede utilizar las políticas de recursos junto con las políticas de punto de conexión de VPC para controlar qué entidades principales tienen acceso a qué recursos y acciones. Para obtener más información, consulte [Uso de políticas de punto de conexión de VPC para API privadas en API Gateway](apigateway-vpc-endpoint-policies.md).

 Las políticas de recursos de API Gateway son diferentes de las políticas basadas en entidades de IAM. Las políticas basadas en identidades de IAM se asocian a usuarios, grupos o roles de IAM y definen qué acciones pueden realizar esas identidades y en qué recursos. Las políticas de recursos de API Gateway están asociadas a recursos. Puede utilizar las políticas de recursos de API Gateway junto con las políticas de IAM. Para obtener más información, consulte [Políticas basadas en identidad y políticas basadas en recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html).

**Topics**
+ [Información general del lenguaje de políticas de acceso para Amazon API Gateway](apigateway-control-access-policy-language-overview.md)
+ [Cómo afectan las políticas de recursos de API Gateway al flujo de trabajo de autorización](apigateway-authorization-flow.md)
+ [Ejemplos de políticas de recursos de API Gateway](apigateway-resource-policies-examples.md)
+ [Creación y asociación de una política de recursos de API Gateway a una API](apigateway-resource-policies-create-attach.md)
+ [AWSClaves de condición de que se pueden utilizar en las políticas de recursos de API Gateway](apigateway-resource-policies-aws-condition-keys.md)

# Información general del lenguaje de políticas de acceso para Amazon API Gateway
<a name="apigateway-control-access-policy-language-overview"></a>

Esta página describe los elementos básicos utilizados en las políticas de recursos de Amazon API Gateway.

Las políticas de recursos se especifican utilizando la misma sintaxis que para las políticas de IAM. Para obtener información completa acerca del lenguaje de políticas, consulte [Información general de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) y [Referencia de políticas de AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) en la *Guía del usuario de IAM*.

Para obtener información sobre cómo decide un servicio de AWS si se permite o se deniega una solicitud determinada, consulte [Determinar si se permite o deniega una solicitud](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow).

## Elementos comunes en una política de acceso
<a name="apigateway-common-elements-in-an-access-policy"></a>

Una política de recursos contiene los siguientes elementos básicos:
+ **Recursos**: las API son los recursos de Amazon API Gateway para los que puede conceder o denegar permisos. En una política, se usa el nombre de recurso de Amazon (ARN) para identificar el recurso. También puede utilizar sintaxis abreviada, que API Gateway expande automáticamente al ARN completo al guardar una política de recursos. Para obtener más información, consulte [Ejemplos de políticas de recursos de API Gateway](apigateway-resource-policies-examples.md).

  Para conocer el formato del elemento `Resource` completo, consulte [Formato de Resource de permisos para ejecutar la API en API Gateway](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-iam-policy-resource-format-for-executing-api).
+ **Acciones**: para cada recurso, Amazon API Gateway admite un conjunto de operaciones. Con las palabras clave de acción puede identificar las operaciones del recurso que desea permitir o denegar.

  Por ejemplo, el permiso `execute-api:Invoke` autorizará al usuario a invocar una API previa solicitud del cliente.

  Para conocer el formato del elemento `Action`, consulte [Formato de Action de permisos para ejecutar la API en API Gateway](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-iam-policy-action-format-for-executing-api).
+ **Efecto**: el efecto que se obtendrá cuando el usuario solicite la acción específica. Puede ser `Allow` o `Deny`. También puede denegar de forma explícita el acceso a un recurso para asegurarse de que un usuario no obtenga acceso a él, aunque otra política se lo conceda. 
**nota**  
"Denegar de forma implícita" es lo mismo que "denegar de forma predeterminada".  
Una "negación implícita" es diferente de una "negación explícita". Para obtener más información, consulte [Diferencia entre denegar de forma predeterminada y la denegación explícita](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplay).
+ **Principal** (Entidad principal): la cuenta o el usuario con permiso de acceso a las acciones y los recursos en la instrucción. En una política de recursos, la entidad principal es el usuario o la cuenta que recibe este permiso.

La política de recursos del ejemplo siguiente muestra los elementos comunes de política anteriores. La política concede acceso a la API bajo el *account-id* especificado en la *región* especificada a cualquier usuario cuya dirección IP de origen está en el bloque de direcciones *123.4.5.6/24*. La política deniega todo el acceso a la API si la IP de origen del usuario no está dentro del rango.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:*"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "123.4.5.6/24"
                }
            }
        }
    ]
}
```

------

# Cómo afectan las políticas de recursos de API Gateway al flujo de trabajo de autorización
<a name="apigateway-authorization-flow"></a>

Cuando API Gateway evalúa la política de recursos asociada a la API, el resultado depende del tipo de autenticación que se haya definido para la API, tal y como se muestra en los diagramas de flujo de las siguientes secciones.

**Topics**
+ [Solo política de recursos de API Gateway](#apigateway-authorization-flow-resource-policy-only)
+ [Autorizador de Lambda y política de recursos](#apigateway-authorization-flow-lambda)
+ [Autenticación de IAM y política de recursos](#apigateway-authorization-flow-iam)
+ [Política de recursos y autenticación de Amazon Cognito](#apigateway-authorization-flow-cognito)
+ [Tablas de resultados de evaluación de políticas](#apigateway-resource-policies-iam-policies-interaction)

## Solo política de recursos de API Gateway
<a name="apigateway-authorization-flow-resource-policy-only"></a>

En este flujo de trabajo, una política de recursos de API Gateway está asociada a la API, pero no se ha definido ningún tipo de autenticación para la API. Para evaluar la política ay que buscar un permiso explícito en función de los criterios de entrada del intermediario. Una denegación implícita o cualquier denegación explícita provoca la denegación del intermediario.

![\[Solo flujo de autorización de una política de recursos.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/apigateway-auth-resource-policy-only.png)


El siguiente ejemplo muestra dicha política.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:api-id/",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

## Autorizador de Lambda y política de recursos
<a name="apigateway-authorization-flow-lambda"></a>

En este flujo de trabajo, un autorizador de Lambda está configurado para la API, además de una política de recursos. La política de recursos se evalúan en dos fases. Antes de llamar al autorizador de Lambda, API Gateway primero evalúa la política y comprueba si hay denegaciones explícitas. Si se encuentran, se deniega inmediatamente el acceso al intermediario. De lo contrario, se llamada al autorizador de Lambda, que devuelve un [documento de política](api-gateway-lambda-authorizer-output.md), que se evalúa junto con la política de recursos. Si el autorizador utiliza el almacenamiento en caché, es posible que API Gateway devuelva el documento de política almacenado en caché. El resultado se determina en función de la [Tabla A](#apigateway-resource-policies-iam-policies-interaction).

La siguiente política de recursos de ejemplo solo permite llamadas desde el punto de enlace de la VPC cuyo ID de punto de enlace de la VPC sea `vpce-1a2b3c4d`. Durante la evaluación "previa a la autenticación"·, solo se permiten las llamadas procedentes del punto de enlace de la VPC que se indican l el ejemplo para seguir adelante y evaluar el autorizador de Lambda. Todas las llamadas restantes se bloquean. Este flujo de trabajo de autorización es el mismo si utiliza un nombre de dominio personalizado para una API privada.

![\[Flujo de autorización para una política de recursos y un autorizador de Lambda.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/apigateway-auth-lambda-resource-policy.png)


------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

## Autenticación de IAM y política de recursos
<a name="apigateway-authorization-flow-iam"></a>

En este flujo de trabajo, puede configurar la autenticación de IAM para la API, además de una política de recursos. Después de autenticar al usuario con el servicio de IAM, la API evalúa las políticas asociadas al usuario y a la política de recursos. El resultado varía en función de si el intermediario se encuentra en la misma Cuenta de AWS o una Cuenta de AWS diferente, del propietario de la API. 

Si el intermediario y el propietario de la API proceden de cuentas distintas, las políticas de IAM y la política de recursos permiten explícitamente al intermediario continuar. Para obtener más información, consulte la [Tabla B](#apigateway-resource-policies-iam-policies-interaction). 

Sin embargo, si el intermediario y el propietario de la API se encuentran en la misma Cuenta de AWS, las políticas del usuario de IAM o la política de recursos deben permitir explícitamente al intermediario continuar. Para obtener más información, consulte la [Tabla A](#apigateway-resource-policies-iam-policies-interaction).

![\[Flujo de autorización para una política de recursos y una autenticación de IAM.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/apigateway-auth-iam-resource-policy.png)


El siguiente ejemplo muestra una política de recursos entre cuentas. Si presuponemos que la política de IAM contiene un efecto Allow (Permitir), esta política de recursos solo permite llamadas desde la VPC cuyo ID de VPC sea `vpc-2f09a348`. Para obtener más información, consulte la [Tabla B](#apigateway-resource-policies-iam-policies-interaction).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/"
            ],
            "Condition" : {
                "StringEquals": {
                    "aws:SourceVpc": "vpc-2f09a348"
                    }
            }
        }
    ]
}
```

------

## Política de recursos y autenticación de Amazon Cognito
<a name="apigateway-authorization-flow-cognito"></a>

En este flujo de trabajo, se configura un [grupo de usuarios de Amazon Cognito](apigateway-integrate-with-cognito.md) para la API, además de una política de recursos. API Gateway intenta primero autenticar a la persona que llama a través de Amazon Cognito. Esto se realiza normalmente a través de un [token JWT](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html) proporcionado por la persona que llama. Si la autenticación se realiza correctamente, la política de recursos se evalúa de forma independiente, y se requiere un permiso explícito. Una denegación o "ni permitir ni denegar" da como resultado una denegación. El siguiente ejemplo muestra una política de recursos que podrían utilizarse junto con grupos de usuarios de Amazon Cognito.

![\[Flujo de autorización para una política de recursos y un autorizador de Amazon Cognito.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/apigateway-auth-cognito-resource-policy.png)


El siguiente ejemplo muestra una política de recursos que solo permite llamadas desde direcciones IP de origen específicas, suponiendo que el token de autenticación de Amazon Cognito contiene un permiso. Para obtener más información, consulte la [Tabla B](#apigateway-resource-policies-iam-policies-interaction).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:api-id/",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

## Tablas de resultados de evaluación de políticas
<a name="apigateway-resource-policies-iam-policies-interaction"></a>

La tabla A muestra el comportamiento resultante cuando el acceso a una API de API Gateway está controlado por una política de IAM o un autorizador de Lambda y una política de recursos de API Gateway, que se encuentran en la misma Cuenta de AWS.


| **Política de IAM (o autorizador de Lambda)** | **Política de recursos de API Gateway** | **Comportamiento resultante** | 
| --- | --- | --- | 
| Allow | Allow | Allow | 
| Allow | Ni permitir ni denegar | Allow | 
| Allow | Denegar | Denegación explícita | 
| Ni permitir ni denegar | Allow | Allow | 
| Ni permitir ni denegar | Ni permitir ni denegar | Denegar de forma implícita | 
| Ni permitir ni denegar | Denegar | Denegación explícita | 
| Denegar | Allow | Denegación explícita | 
| Denegar | Ni permitir ni denegar | Denegación explícita | 
| Denegar | Denegar | Denegación explícita | 

La tabla B muestra el comportamiento resultante cuando el acceso a una API de API Gateway está controlado por una política de IAM o un autorizador de grupos de usuarios de Amazon Cognito y una política de recursos de API Gateway, que se encuentran en diferentes Cuentas de AWS. Si no existe un permiso ni una denegación, el acceso entre cuentas se deniega. Esto se debe a que el acceso entre cuentas requiere que la política de recursos y la política de IAM o el autorizador de grupos de usuarios de Amazon Cognito concedan acceso de forma explícita.


| **Política de IAM (o autorizador de grupos de usuarios de Amazon Cognito)** | **Política de recursos de API Gateway** | **Comportamiento resultante** | 
| --- | --- | --- | 
| Allow | Allow | Allow | 
| Allow | Ni permitir ni denegar | Denegar de forma implícita | 
| Allow | Denegar | Denegación explícita | 
| Ni permitir ni denegar | Allow | Denegar de forma implícita | 
| Ni permitir ni denegar | Ni permitir ni denegar | Denegar de forma implícita | 
| Ni permitir ni denegar | Denegar | Denegación explícita | 
| Denegar | Allow | Denegación explícita | 
| Denegar | Ni permitir ni denegar | Denegación explícita | 
| Denegar | Denegar | Denegación explícita | 

# Ejemplos de políticas de recursos de API Gateway
<a name="apigateway-resource-policies-examples"></a>

En esta página se presentan algunos ejemplos de casos de uso típicos de políticas de recursos de API Gateway.

Las políticas de ejemplo siguientes utilizan una sintaxis simplificada para especificar el recurso de API. Esta sintaxis simplificada es una forma abreviada de hacer referencia a un recurso de API, en lugar de especificar el nombre de recursos de Amazon (ARN) completo. API Gateway convierte la sintaxis abreviada en el ARN completo al guardar la política. Por ejemplo, puede especificar el recurso `execute-api:/stage-name/GET/pets` en una política de recursos. API Gateway convierte el recurso en `arn:aws:execute-api:us-east-2:123456789012:aabbccddee/stage-name/GET/pets` cuando se guarda la política de recursos. API Gateway crea el ARN completo utilizando la región actual, el ID de su cuenta de AWS y el ID de la API REST con la que está asociada la política de recursos. Puede utilizar `execute-api:/*` para representar todas las etapas, métodos y rutas de la API actual. Para obtener información acerca del lenguaje de la política de acceso, consulte [Información general del lenguaje de políticas de acceso para Amazon API Gateway](apigateway-control-access-policy-language-overview.md).

**Topics**
+ [Ejemplo: permitir que los roles de otra cuenta de AWS utilicen una API](#apigateway-resource-policies-cross-account-example)
+ [Ejemplo: Cómo denegar el tráfico a una API para una dirección o un rango de direcciones IP de origen](#apigateway-resource-policies-source-ip-address-example)
+ [Ejemplo: Denegar el tráfico de API basado en la dirección IP de origen o rango cuando se utiliza una API privada](#apigateway-resource-policies-source-ip-address-vpc-example)
+ [Ejemplo: Permitir el tráfico de una API privada en función del punto de conexión de VPC o la VPC de origen](#apigateway-resource-policies-source-vpc-example)

## Ejemplo: permitir que los roles de otra cuenta de AWS utilicen una API
<a name="apigateway-resource-policies-cross-account-example"></a>

En la siguiente política de recursos de ejemplo, se otorga acceso a la API de una cuenta de AWS a dos roles de una cuenta de AWS diferente a través de los protocolos [Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html) (SigV4) o [Signature Version 4a](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html#how-sigv4a-works) (SigV4a). En concreto, se concede al rol de desarrollador y administrador de la cuenta de AWS identificados por `account-id-2` la acción `execute-api:Invoke` para ejecutar la acción `GET` en el recurso `pets` (API) en la cuenta de AWS.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/developer",
                    "arn:aws:iam::111122223333:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

## Ejemplo: Cómo denegar el tráfico a una API para una dirección o un rango de direcciones IP de origen
<a name="apigateway-resource-policies-source-ip-address-example"></a>

El siguiente ejemplo de política de recursos deniega (bloquea) el tráfico entrante a una API privada procedente de dos bloques de direcciones IP de origen especificadas.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "execute-api:/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

Si utiliza políticas de usuario de IAM o políticas de recursos de API Gateway para controlar el acceso a API Gateway o a cualquier API de API Gateway, confirme que las políticas estén actualizadas para incluir los rangos de direcciones IPv6. Las políticas que no se actualizan para gestionar las direcciones IPv6 pueden afectar al acceso del cliente a API Gateway cuando comiencen a utilizar el punto de conexión de pila doble. Para obtener más información, consulte [Uso de direcciones IPv6 en políticas de IAM](api-ref.md#api-reference-service-endpoints-dualstack-iam).

## Ejemplo: Denegar el tráfico de API basado en la dirección IP de origen o rango cuando se utiliza una API privada
<a name="apigateway-resource-policies-source-ip-address-vpc-example"></a>

El siguiente ejemplo de política de recursos deniega (bloquea) el tráfico entrante a una API privada procedente de dos bloques de direcciones IP de origen especificadas. Cuando se utilizan API privadas, el punto de conexión final de VPC para `execute-api` vuelve a escribir la dirección IP de origen original. La condición `aws:VpcSourceIp` filtra la solicitud contra la dirección IP del solicitante original.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "execute-api:/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:VpcSourceIp": ["192.0.2.0/24", "198.51.100.0/24"]
                }
            }
        }
    ]
}
```

------

## Ejemplo: Permitir el tráfico de una API privada en función del punto de conexión de VPC o la VPC de origen
<a name="apigateway-resource-policies-source-vpc-example"></a>

En el ejemplo siguiente, las políticas de recursos permiten el tráfico entrante en una API privada solo desde una nube virtual privada (VPC) o un punto de conexión de VPC especificados.

Esta política de recursos de ejemplo especifica una VPC de origen:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                   "aws:SourceVpc": "vpc-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

Esta política de recursos de ejemplo especifica un punto de conexión de VPC de origen:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

# Creación y asociación de una política de recursos de API Gateway a una API
<a name="apigateway-resource-policies-create-attach"></a>

Para permitir a un usuario acceder a la API llamando al servicio de ejecución de la API, debe crear una política de recursos de API Gateway y asociar la política a la API. Al asociar una política a la API, se aplican los permisos de la política a los métodos de la API. Si actualiza la política de recursos, tendrá que implementar la API.

**Topics**
+ [Requisitos previos](#apigateway-resource-policies-prerequisites)
+ [Asociación de una política de recursos a una API de API Gateway](#apigateway-resource-policies-create-attach-procedure)
+ [Solución de problemas de política de recursos](#apigateway-resource-policies-troubleshoot)

## Requisitos previos
<a name="apigateway-resource-policies-prerequisites"></a>

 Para actualizar una política de recursos de API Gateway, necesitará el permiso `apigateway:UpdateRestApiPolicy` y el permiso `apigateway:PATCH`.

Para una API regional u optimizada para sistemas perimetrales, puede adjuntar la política de recursos a la API a medida que la crea o después de implementarla. Para una API privada, no puede implementar la API sin una política de recursos. Para obtener más información, consulte [API de REST privadas en API Gateway](apigateway-private-apis.md).

## Asociación de una política de recursos a una API de API Gateway
<a name="apigateway-resource-policies-create-attach-procedure"></a>

El siguiente procedimiento muestra cómo asociar una política de recursos a una API de API Gateway.

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

**Para asociar una política de recursos a una API de API Gateway**

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 de REST.

1. En el panel de navegación principal, elija **Política de recursos**.

1. Elija **Crear política**.

1. (Opcional) Elija **Seleccionar una plantilla** para generar una política de ejemplo.

   En las políticas de ejemplo, los marcadores de posición se indican mediante llaves (`"{{placeholder}}"`). Sustituya cada uno de los marcadores de posición, incluidas las llaves, por la información necesaria.

1. Si no utiliza uno de los ejemplos de plantilla, ingrese la política de recursos.

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

Si la API se ha implementado anteriormente en la consola de API Gateway, tendrá que volver a implementarla para que la política de recursos surta efecto.

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

Para usar la AWS CLI para crear una nueva API y asociarla a una política de recursos, use el siguiente comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html):

```
aws apigateway create-rest-api \
    --name "api-name" \
    --policy "{\"jsonEscapedPolicyDocument\"}"
```

Para usar la AWS CLI para asociar una política de recursos a una API existente, use el siguiente comando [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html): 

```
aws apigateway update-rest-api \
    --rest-api-id api-id \
    --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
```

También puede adjuntar la política de recursos como archivo `policy.json` independiente e incluirla en el comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html). El siguiente comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) crea una nueva API con una política de recursos:

```
aws apigateway create-rest-api \
    --name "api-name" \
    --policy file://policy.json
```

El archivo `policy.json` es una política de recursos de API Gateway, como [Ejemplo: Cómo denegar el tráfico a una API para una dirección o un rango de direcciones IP de origen](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example).

------
#### [ AWS CloudFormation ]

Puede utilizar CloudFormation para crear una API con una política de recursos. En el siguiente ejemplo, se crea una API de REST con la política de recursos de ejemplo, [Ejemplo: Cómo denegar el tráfico a una API para una dirección o un rango de direcciones IP de origen](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example). 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: testapi
      Policy:
        Statement:
          - Action: 'execute-api:Invoke'
            Effect: Allow
            Principal: '*'
            Resource: 'execute-api:/*'
          - Action: 'execute-api:Invoke'
            Effect: Deny
            Principal: '*'
            Resource: 'execute-api:/*'
            Condition:
              IpAddress: 
                'aws:SourceIp': ["192.0.2.0/24", "198.51.100.0/24" ]
        Version: 2012-10-17		 	 	 
  Resource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'helloworld'
  MethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref Resource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      Integration:
        Type: MOCK
        RequestTemplates:
          application/json: '{"statusCode": 200}'
        IntegrationResponses:
          - StatusCode: 200
            ResponseTemplates:
              application/json: '{}'
      MethodResponses:
        - StatusCode: 200
          ResponseModels:
            application/json: 'Empty'
  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - MethodGet
    Properties:
      RestApiId: !Ref Api
      StageName: test
```

------

## Solución de problemas de política de recursos
<a name="apigateway-resource-policies-troubleshoot"></a>

La siguiente guía de solución de problemas puede ayudar a resolver los problemas relacionados con la política de recursos.

### Mi API devuelve \$1"Mensaje": El usuario: anónimo no está autorizado a realizar: execute-api:Invoke en resource: arn:aws:execute-api:us-east-1:\$1\$1\$1\$1\$1\$1\$1\$1/\$1\$1\$1\$1/\$1\$1\$1\$1/"\$1
<a name="apigateway-resource-policies-troubleshoot-auth"></a>

En la política de recursos, si establece la entidad principal en una entidad principal de AWS, por ejemplo:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:role/developer",
                    "arn:aws:iam::111111111111:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

Debe usar la autorización de `AWS_IAM` para todos los métodos de la API o, de lo contrario, la API devolverá el mensaje de error anterior. Para obtener más instrucciones sobre cómo activar la autorización de `AWS_IAM` para un método, consulte [Métodos de API de REST en API Gateway](how-to-method-settings.md).

### Mi política de recursos no se actualiza
<a name="apigateway-resource-policies-troubleshoot-deploy"></a>

 Si actualiza la política de recursos después de crear la API, tendrá que implementar la API para propagar los cambios después de asociar la política actualizada. Si únicamente se actualiza o se guarda la política, no se modifica el comportamiento en tiempo de ejecución de la API. Para obtener más información acerca cómo implementar una API, consulte [Implementación de las API de REST en API Gateway](how-to-deploy-api.md). 

### Mi política de recursos devuelve el siguiente error: Documento de política no válido. Compruebe la sintaxis de la política y asegúrese de que las entidades principales sean válidas.
<a name="apigateway-resource-policies-troubleshoot-invalid-principal"></a>

Para solucionar este error, primero le recomendamos que compruebe la sintaxis de la política. Para obtener más información, consulte [Información general del lenguaje de políticas de acceso para Amazon API Gateway](apigateway-control-access-policy-language-overview.md). También le recomendamos que compruebe que todas las entidades principales especificadas sean válidas y que no se hayan eliminado.

Además, si la API se encuentra en una [región de suscripción](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#optinregion), compruebe que todas las cuentas de la política de recursos tengan la región habilitada. 

# AWSClaves de condición de que se pueden utilizar en las políticas de recursos de API Gateway
<a name="apigateway-resource-policies-aws-condition-keys"></a>

La siguiente tabla contiene las claves de condición de AWS que se pueden utilizar en las políticas de recursos de las API de API Gateway con cada tipo de autorización.

Para obtener más información acerca de las claves de condición de AWS, consulte [Claves de contexto de condición global de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html).


| **Claves de condición** | **Criterios** | **Necesita `AuthN`?** | **Tipo de autorización** | 
| --- | --- | --- | --- | 
| aws:CurrentTime | Ninguno | No | Todos | 
| aws:EpochTime | Ninguno | No | Todos | 
| aws:TokenIssueTime | La clave solo está en las solicitudes que se firman con credenciales de seguridad temporales. | Sí | IAM | 
| aws:MultiFactorAuthPresent | La clave solo está en las solicitudes que se firman con credenciales de seguridad temporales. | Sí | IAM | 
| aws:MultiFactorAuthAge | La clave solo está si se utiliza la MFA en las solicitudes. | Sí | IAM | 
| aws:PrincipalAccount | Ninguno | Sí | IAM | 
| aws:PrincipalArn | Ninguno | Sí | IAM | 
| aws:PrincipalOrgID | Esta clave solamente se incluye en el contexto de la solicitud si la entidad principal es miembro de una organización. | Sí | IAM | 
| aws:PrincipalOrgPaths | Esta clave solamente se incluye en el contexto de la solicitud si la entidad principal es miembro de una organización. | Sí | IAM | 
| aws:PrincipalTag | Esta clave solamente se incluye en el contexto de la solicitud si la entidad principal está usando un usuario de IAM con etiquetas asociadas. Se incluye para una entidad principal que utiliza un rol de IAM con etiquetas o etiquetas de sesión asociadas. | Sí | IAM | 
| aws:PrincipalType | Ninguno | Sí | IAM | 
| aws:Referer | La clave solo está si el valor lo proporciona el intermediario en el encabezado HTTP. | No | Todos | 
| aws:SecureTransport | Ninguno | No | Todos | 
| aws:SourceArn | Ninguno | No | Todos | 
| aws:SourceIp | Ninguno | No | Todos | 
| aws:SourceVpc | Esta clave solo se puede utilizar con las API privadas. | No | Todos | 
| aws:SourceVpce | Esta clave solo se puede utilizar con las API privadas. | No | Todos | 
| aws:VpcSourceIp | Esta clave solo se puede utilizar con las API privadas. | No | Todos | 
| aws:UserAgent | La clave solo está si el valor lo proporciona el intermediario en el encabezado HTTP. | No | Todos | 
| aws:userid | Ninguno | Sí | IAM | 
| aws:username | Ninguno | Sí | IAM | 