

# 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. 