

# Criar e anexar uma política de recursos do API Gateway a uma API
<a name="apigateway-resource-policies-create-attach"></a>

Para permitir que um usuário acesse sua API chamando o serviço de execução de API, você precisa criar uma política de recursos do API Gateway e anexar essa política à API. Ao anexar uma política à API, ela aplica as permissões da política aos métodos na API. Se você atualizar a política de recursos, será necessário implantar a API.

**Topics**
+ [Pré-requisitos](#apigateway-resource-policies-prerequisites)
+ [Anexar uma política de recursos a uma API do API Gateway](#apigateway-resource-policies-create-attach-procedure)
+ [Solução de problemas na política de recursos](#apigateway-resource-policies-troubleshoot)

## Pré-requisitos
<a name="apigateway-resource-policies-prerequisites"></a>

 Para atualizar uma política de recursos do API Gateway, você precisará ter as permissões `apigateway:UpdateRestApiPolicy` e `apigateway:PATCH`.

Para uma API regional ou otimizada para bordas, é possível anexar a política de recursos à API ao criá-la ou depois de implantá-la. Para uma API privada, não é possível implantar a API sem uma política de recursos. Para obter mais informações, consulte [APIs REST privadas no API Gateway](apigateway-private-apis.md).

## Anexar uma política de recursos a uma API do API Gateway
<a name="apigateway-resource-policies-create-attach-procedure"></a>

O procedimento a seguir mostra como anexar uma política de recursos a uma API do API Gateway.

------
#### [ Console de gerenciamento da AWS ]

**Como anexar uma política de recursos a uma API do API Gateway**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha uma API REST.

1. No painel de navegação principal, escolha **Política de recursos**.

1. Selecione **Create policy** (Criar política).

1. (Opcional) Escolha **Selecionar um modelo** para gerar um exemplo de política.

   Nas políticas de exemplo, os espaços reservados são colocados entre chaves duplas (`"{{placeholder}}"`). Substitua cada um dos espaços reservados, incluindo as chaves, pelas informações necessárias.

1. Se você não usar um dos exemplos do modelo, insira a política de recurso.

1. Escolha **Salvar alterações**.

Se a API tiver sido implantada anteriormente no console do API Gateway, será necessário reimplantá-la para que a política de recursos entre em vigor.

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

Para criar uma API por meio da AWS CLI e anexar uma política de recursos a ela, use o comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) indicado abaixo:

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

Para anexar uma política de recursos a uma API existente por meio da AWS CLI, use o comando [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) indicado abaixo: 

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

Você também pode anexar sua política de recursos como um arquivo `policy.json` separado e incluí-la no comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html). O comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) indicado abaixo cria uma API com uma politica de recurso:

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

`policy.json` é uma política de recursos do API Gateway, como [Exemplo: negar tráfego da API com base no intervalo ou endereço IP de origem](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example).

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

Você pode usar CloudFormation para criar uma API com uma política de recursos. O seguinte exemplo cria uma API REST com o exemplo de política de recursos, [Exemplo: negar tráfego da API com base no intervalo ou endereço IP de origem](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
```

------

## Solução de problemas na política de recursos
<a name="apigateway-resource-policies-troubleshoot"></a>

As diretrizes de solução de problemas a seguir podem ajudar a resolver problemas em sua política de recursos.

### Minha API retorna \$1"Message":"Usuário: anônimo não tem autorização para executar: execute-api:Invoke no recurso: 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>

Em sua política de recursos, se você definir a entidade principal como uma entidade principal da AWS, como a seguinte:

------
#### [ 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"
            ]
        }
    ]
}
```

------

Você deverá usar a autorização `AWS_IAM` para todos os métodos em sua API, caso contrário, a API retornará a mensagem de erro anterior. Para obter mais instruções sobre como ativar a autorização `AWS_IAM` para um método, consulte [Métodos para APIs REST no API Gateway](how-to-method-settings.md).

### Não consigo atualizar minha política de recursos
<a name="apigateway-resource-policies-troubleshoot-deploy"></a>

 Se você atualizar a política de recursos depois que a API for criada, será necessário implantar a API para propagar as alterações após a alteração da política. Atualizar ou salvar a política não altera o comportamento do tempo de execução da API. Para mais informações sobre como implantar sua API, consulte [Implantar APIs REST no API Gateway](how-to-deploy-api.md). 

### Minha política de recursos retorna o seguinte erro: Documento de política inválido. Verifique a sintaxe da política e se as entidades principais são válidas.
<a name="apigateway-resource-policies-troubleshoot-invalid-principal"></a>

Para solucionar esse erro, primeiro recomendamos que você verifique a sintaxe da política. Para obter mais informações, consulte [Visão geral da linguagem de políticas de acesso para o Amazon API Gateway](apigateway-control-access-policy-language-overview.md). Também recomendamos que você verifique se todas as entidades principais especificadas são válidas e não foram excluídas.

Além disso, se a API estiver em uma [região opcional](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#optinregion), verifique se todas as contas na política de recursos têm a região habilitada. 