首页 > 解决方案 > 如何拒绝对 AWS API 网关的公开访问?

问题描述

此问题类似,我想拒绝对 AWS API 网关的公开访问,并且仅在通过特定用户帐户调用 API 时才允许访问。我已将以下资源策略应用于网关:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": [
                    "arn:aws:iam::123456789012:root",
                    "arn:aws:iam::123456789012:user/apitestuser"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:123456789012:abcd123456/*"
        }
    ]
}

但是当我跑步时

curl -X GET https://abcd123456.execute-api.us-east-1.amazonaws.com/dev/products

我仍然收到带有数据的成功响应:

[{"id":1,"name":"Product 1"},{"id":2,"name":"Product 2"}]

我希望收到 4XX 响应。

如何更改策略以拒绝对网关的公共访问?或者,不使用 VPC 就不能拒绝公共访问吗?理想情况下,我希望避免使用 VPC,因为在多个区域使用 NAT 网关会很昂贵。我还想避免构建任何身份验证机制,因为身份验证和授权发生在代理到该网关的其他 API 网关中。

标签: amazon-web-servicesaws-api-gatewayamazon-iam

解决方案


根据评论。

问题是在添加/更改策略后没有重新部署阶段。

所以解决的办法就是重新部署stage,让策略生效。


推荐阅读