首页 > 解决方案 > 为什么 AWS API Gateway 资源策略中的条件元素不触发?

问题描述

我试图了解 AWS API-Gateway 的资源策略中的条件元素如何触发。

我尝试使用 SourceIP 通过只允许 128.0.0.0/1 和 0.0.0.0/1 来阻止所有流量,但我两次都能从同一个 IP 访问我的 API。我还尝试使用 CurrentTime 阻止我的 API。但是我添加到我的条件似乎没有阻止我调用我的 API 的能力。我有什么误解?

我目前阻止我的 API 进行所有调用的尝试是这样的:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AccountID>:root"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:<AccountID>:<API>/*/*",
            "Condition": {
                "DateGreaterThan": {
                    "aws:CurrentTime": "2019-12-15T12:00:00Z"
                }
            }
        }
    ]
}

据我了解,通过将“DateGreaterThan”“CurrentTime”声明为 2019 年 12 月,此时当前为 2019 年 9 月,此 API 应在另外三个月内无法调用。

有人可以告诉我我要去哪里偏离轨道吗?

先感谢您!

PS:我在正文中使用 AWS PublicKey/SecretKey 获得了正确的授权。我只是想用目前的情况阻止我的通话。

PPS:我忘了提及我已确认我的 API 部署正在使用此资源策略,因为我的 API 在我添加 AWS PublicKey/SecreyKey 之前拒绝调用。(我启用了 AWS_IAM 授权)

正如 Joey Kilpatrick 所要求的,这是我更新的(仍然无效的)资源政策。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AccountID>:user/Service_Account"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:<AccountID>:<API>/*/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "0.0.0.0/1"
                }
            }
        }
    ]
}

在这种情况下,我使用 147.xxx IP 访问 API,因此我希望此 API 返回 403。我还使用前面所述的“CurrentTime”条件进行了测试。

标签: jsonamazon-web-servicesaws-api-gateway

解决方案


我想首先指出,将 SourceIP 限制为 128.0.0.0/1 和 0.0.0.0/1 不会拒绝任何 IP 地址,因为每个 IP 都在这两个 CIDR 块之一中。

但这不是您最大的问题:您不能限制root用户的任何权限。这是设计使然。看看为什么在这里root使用user是个坏主意。


推荐阅读