json - 为什么 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”条件进行了测试。
解决方案
我想首先指出,将 SourceIP 限制为 128.0.0.0/1 和 0.0.0.0/1 不会拒绝任何 IP 地址,因为每个 IP 都在这两个 CIDR 块之一中。
但这不是您最大的问题:您不能限制root
用户的任何权限。这是设计使然。看看为什么在这里root
使用user是个坏主意。
推荐阅读
- python - 如何使用 BeautifulSoup 忽略没有值的属性并忽略具有特定类的标签
- c# - 不需要分配结构类型的 out 参数
- angular - Angular TypeScript 关键依赖:依赖的请求是一个表达式
- java - Gradle 运行没有错误,但 java .jar 文件记录错误
- jquery - 为什么我不能使用 jQuery 添加 css 类?
- php - 数组 foreach 中的非法字符串偏移
- wordpress - 如何与“下一篇文章”和“上一篇文章”WP一起显示类别[编辑]
- javascript - 无法在 Firestore 集合中写入批处理文档
- excel - 在一系列单元格中找到许多字符串中的任何一个,其中大多数不在同一位置
- javascript - React Native 将 this.state.input 存储为未定义的工作在 React Native Web 中被罚款