【问题标题】:AWS API gateway giving 403 error while accessing from EC2 in Private SubnetAWS API 网关在从私有子网中的 EC2 访问时出现 403 错误
【发布时间】:2020-10-19 19:27:20
【问题描述】:

我有 EC2 实例在私有子网中运行,并且想要访问 API 网关。

我做的步骤:-

  1. 在 API 网关中创建和部署阶段
  2. 通过测试 URL 和邮递员测试 - 工作正常
  3. 使用 execute-api 接口创建 VPC 端点
  4. 更新 API-Gateway 资源策略如下并保存
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:eu-west-1:{{MY_ACCOUNT}}:{{MYAPI}}/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpc": "vpce-{{ID}}"
                }
            }
        }
    ]
}
  1. 尝试使用 curl 和 wget 从 EC2 访问得到 403
[ec2-user@ip-xx-xx-xx-xx ~]$ wget https://{{MYAPI}}.execute-api.eu-west-1.amazonaws.com/DEV/CustomerInfo/?customerId={{CUST_ID}}
--2020-06-29 14:43:29--  https://{{MYAPI}}.execute-api.eu-west-1.amazonaws.com/DEV/CustomerInfo/?customerId={{CUST_ID}}
Resolving {{MYAPI}}.execute-api.eu-west-1.amazonaws.com ({{MYAPI}}.execute-api.eu-west-1.amazonaws.com)... xx.xx.xx.xx, xx.xx.xx.xxx
Connecting to {{MYAPI}}.execute-api.eu-west-1.amazonaws.com ({{MYAPI}}.execute-api.eu-west-1.amazonaws.com)|xx.xx.xx.xx|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2020-06-29 14:43:29 ERROR 403: Forbidden.

甚至在 VPC 端点中尝试过这个

【问题讨论】:

    标签: amazon-web-services amazon-ec2 api-gateway


    【解决方案1】:

    你的情况:

    "Condition": {
                    "StringNotEquals": {
                        "aws:sourceVpc": "vpce-{{ID}}"
                    }
                }
    

    似乎不对。 StringNotEquals 表示您允许 execute-api:Invoke,只要 aws:sourceVpc"vpce-{{ID}}不同

    我认为应该改为StringEquals

    【讨论】:

    • 是的,我希望 vpce-{{ID}} 被列入白名单以访问 api。我尝试了“StringEquals”,但没有帮助。我还应该寻找什么?
    • @ANUJAGARWAL 如果您暂时完全删除条件,它是否有效或仍然无效?
    【解决方案2】:

    我能够排除故障并解决问题。

    我做的步骤

    1. 将 API 资源策略条件更新为以下内容
    "Condition": {
                    "StringEquals": {
                        "aws:sourceVpce": "vpce-{{ID}}"
                    }
                }
    
    1. 在我的 VPC 端点安全组中更新了入站规则以接受端口 443 上的 HTTPS 请求

    2. 保存和重新部署的 API

    关键要点是每当您更改 API 中的任何内容时都重新部署 API。

    成功了:)

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 2015-01-15
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2016-10-02
      • 2019-06-01
      相关资源
      最近更新 更多