

# Controlar el acceso para invocar una API
<a name="api-gateway-control-access-using-iam-policies-to-invoke-api"></a>

En esta sección, obtendrá información sobre el modelo de permisos para controlar el acceso a su API mediante permisos de IAM. Cuando la autorización de IAM está habilitada, los clientes deben utilizar Signature Version 4a (SigV4a) y Signature Version 4 (SigV4) para firmar las solicitudes con credenciales de AWS. Para obtener más información, consulte [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html).

En esta sección, mostramos una plantilla de declaración de política de IAM y la referencia de la declaración de política. La referencia de la declaración de política incluye los formatos de los campos `Action` y `Resource` relacionados con el servicio de ejecución de la API. Utilice estas referencias para crear su declaración de política de IAM. Cuando cree la declaración de política de IAM, es posible que deba tener en cuenta la forma en que las políticas de recursos de API Gateway afectan al flujo de trabajo de autorización. Para obtener más información, consulte [Cómo afectan las políticas de recursos de API Gateway al flujo de trabajo de autorización](apigateway-authorization-flow.md).

Para API privadas, debe utilizar una combinación de una política de recursos de API Gateway y una política de punto de enlace de la VPC. Para obtener más información, consulte los siguientes temas:
+ [Control del acceso a una API de REST con políticas de recursos de API Gateway](apigateway-resource-policies.md)
+ [Uso de políticas de punto de conexión de VPC para API privadas en API Gateway](apigateway-vpc-endpoint-policies.md)

## Controlar quién puede llamar a una API de API Gateway con políticas de IAM
<a name="api-gateway-who-can-invoke-an-api-method-using-iam-policies"></a>

 Para controlar quién puede o no puede llamar a una API implementada con permisos de IAM, cree un documento de política de IAM con los permisos necesarios. A continuación, se muestra una plantilla para un documento de política como este. 

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Permission",
      "Action": [
        "execute-api:Execution-operation"           
      ],
      "Resource": [
        "arn:aws:execute-api:region:123456789012:api-id/stage/METHOD_HTTP_VERB/Resource-path"
      ]
    }
  ]
}
```

------

 Aquí, `Permission` se sustituirá por `Allow` o `Deny` dependiendo de si desea conceder o revocar los permisos incluidos. `Execution-operation` se sustituirá por las operaciones compatibles con el servicio de ejecución de la API. `METHOD_HTTP_VERB` hace referencia a un verbo HTTP compatible con los recursos especificados. `Resource-path` es el marcador de posición de la ruta URL de una instancia de `[Resource](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)` de la API implementada que admite el `METHOD_HTTP_VERB` mencionado. Para obtener más información, consulte [Referencia de instrucciones de políticas de IAM para ejecutar la API en API Gateway](#api-gateway-calling-api-permissions). 

**nota**  
Para que las políticas de IAM sean eficaces, debe haber habilitado la autenticación de IAM en los métodos de API configurando `AWS_IAM` para la propiedad `[authorizationType](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizationType)` de los métodos. En caso contrario, estos métodos de API serán accesibles públicamente.

 Por ejemplo, para conceder a un usuario permiso para ver una lista de mascotas expuesta por una API determinada, pero denegarle permiso para agregar una mascota a la lista, se podría incluir la siguiente instrucción en la política de IAM: 

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:111111111111:api-id/*/GET/pets"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:111111111111:api-id/*/POST/pets"
      ]
    }
  ]
}
```

------

Para conceder a un usuario permiso para ver una mascota específica expuesta por una API que se configura como `GET /pets/{petId}`, podría incluir la siguiente declaración en la política de IAM:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:111122223333:api-id/*/GET/pets/a1b2"
            ]
        }
    ]
}
```

------

## Referencia de instrucciones de políticas de IAM para ejecutar la API en API Gateway
<a name="api-gateway-calling-api-permissions"></a>

La siguiente información describe el formato de Action y Resource de las instrucciones de política de IAM de permisos de acceso para ejecutar una API.

### Formato de Action de permisos para ejecutar la API en API Gateway
<a name="api-gateway-iam-policy-action-format-for-executing-api"></a>

La expresión `Action` de ejecución de API tiene el siguiente formato general:

```
execute-api:action
```

donde *action* es una acción de ejecución de API disponible:
+ **\$1**, que representa todas las acciones siguientes.
+ **Invoke**, que se utiliza para invocar una API previa solicitud del cliente.
+ **InvalidateCache**, que se utiliza para invalidar la caché de API previa solicitud del cliente.

### Formato de Resource de permisos para ejecutar la API en API Gateway
<a name="api-gateway-iam-policy-resource-format-for-executing-api"></a>

La expresión `Resource` de ejecución de API tiene el siguiente formato general:

```
arn:aws:execute-api:region:account-id:api-id/stage-name/HTTP-VERB/resource-path-specifier
```

donde:
+ *region* es la región de AWS (como **us-east-1** o **\$1** para todas las regiones de AWS) que se corresponde con la API implementada para el método.
+ *account-id* es el ID de cuenta de 12 dígitos de AWS del propietario de la API de REST. 
+ *api-id* es el identificador que API Gateway asignó a la API para el método.
+ *stage-name* es el nombre de la etapa asociada al método.
+ *HTTP-VERB* es el verbo HTTP del método. Puede ser uno de las siguientes: GET, POST, PUT, DELETE, PATCH.
+ *resource-path-specifier* es la ruta al método deseado.

**nota**  
Si especifica un comodín (`*`), la expresión `Resource` aplica el comodín al resto de la expresión.

Algunos ejemplos de expresiones de recursos incluyen:
+ **arn:aws:execute-api:\$1:\$1:\$1** para cualquier ruta de recurso en cualquier etapa, para cualquier API de cualquier región de AWS.
+ **arn:aws:execute-api:us-east-1:\$1:\$1** para cualquier ruta de recurso en cualquier etapa, para cualquier API en la región de AWS `us-east-1`.
+ **arn:aws:execute-api:us-east-1:\$1:*api-id*/\$1** para cualquier ruta de recurso en cualquier etapa, para la API con el identificador *api-id* de la región de AWS us-east-1.
+ **arn:aws:execute-api:us-east-1:\$1:*api-id*/`test`/\$1** para cualquier ruta de recurso en la etapa de `test`, para la API con el identificador de *api-id* de la región de AWS us-east-1.

Para obtener más información, consulte [Referencia del nombre de recurso de Amazon (ARN) de API Gateway](arn-format-reference.md).