Como posso solucionar erros de acesso negado ao invocar APIs do API Gateway com uma política baseada em recursos?

4 minuto de leitura
0

Estou recebendo um erro de acesso negado ao invocar uma operação de API do Amazon API Gateway com uma política de recursos.

Resolução

Siga estas etapas de solução de problemas para sua operação pública ou privada de APIs do API Gateway.

Operações de API pública

1.    Verifique se a operação da API tem uma política de recursos que permite ou bloqueia a solicitação com base em endereços IP. Se você não tiver o registro de acesso configurado, configure o registro em log de acesso para o API Gateway. Os logs de acesso contêm os endereços IP de origem para suas operações de API. Certifique-se de que o endereço IP não esteja na lista de negação. O endereço IP ou o intervalo CIDR devem permitir explicitamente o acesso na política de recursos.

Exemplo de política de recursos que permite somente três endereços IP:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
        },

        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "52.36.146.106",
                        "34.216.36.206/32",
                        "205.251.233.179/32"
                    ]
                }
            }
        }
    ]
}

Exemplo de política de recursos que bloqueia dois endereços IP:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:SourceIp": ["52.36.146.106", "34.216.36.206/32" ]
                }
            }
        }
    ]
}

2.    O método HTTP (GET, POST) e o recurso do API Gateway (/, /foo, /foo/bar) para a solicitação da API devem permitir o acesso explicitamente. Verifique se o atributo da política de recursos é semelhante ao seguinte:

"Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
            ],

3.    Verifique se a política de recursos usa outros tipos de métodos de autenticação ou autorizadores. A avaliação da política de recursos do API Gateway é afetada pelo seu tipo de autenticação. Exemplos de tipos de autenticação incluem um AWS Lambda Authorizer ou a autenticação do Amazon Cognito. Certifique-se de que a política de recursos esteja configurada corretamente para o tipo de autenticação definido para sua API.

4.    Certifique-se de reimplantar sua solicitação de API para que todas as alterações entrem em vigor. Para reimplantar sua solicitação de API, repita as etapas para implantar uma API REST em um estágio.

5.    Se você estiver usando um exemplo de política de recursos do API Gateway, certifique-se de ter configurado todas as variáveis para seu ambiente.

6.    Se sua política de recursos permitir o acesso somente aos endereços IP da Amazon Virtual Private Cloud (Amazon VPC), faça o seguinte:

Permita o acesso ao endereço IP do roteador e ao endereço IP do gateway NAT (endereço IP público) em sua política de recursos.

-ou-

Altere o endpoint público da API para um endpoint privado da API.

Operações de API privadas

1.    Se a política de recursos tiver um endpoint da Amazon VPC, verifique a chave de condição na política. Se a política de recursos usar a chave de condição aws:SourceVpce, seu valor deverá ser o ID do endpoint da Amazon VPC, não o ID da VPC. Se a política de recursos usar a chave de condição aws:SourceVpc, seu valor deverá ser o ID da Amazon VPC, não o ID do endpoint da VPC.

Para verificar o tipo de endpoint, abra o console da Amazon VPC, escolha Endpoints e escolha seu endpoint.

2.    Certifique-se de reimplantar sua solicitação de API para que todas as alterações entrem em vigor. Para reimplantar sua solicitação de API, repita as etapas para implantar uma API REST em um estágio.

3.    Se você estiver usando um exemplo de política de recursos do API Gateway, certifique-se de configurar todas as variáveis para seu ambiente.

4.    O método HTTP (GET, POST) e o recurso do API Gateway (/, /foo, /foo/bar) para a solicitação da API devem permitir o acesso explicitamente. Verifique se o atributo da política de recursos é semelhante ao seguinte:

"Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
            ],

5.    Verifique se a política de recursos usa outros tipos de métodos de autenticação ou autorizadores. A avaliação da política de recursos do API Gateway é afetada pelo seu tipo de autenticação. Exemplos de tipos de autenticação incluem um AWS Lambda Authorizer ou a autenticação do Amazon Cognito. Certifique-se de que a política de recursos esteja configurada corretamente para o tipo de autenticação definido para sua API.