我尝试使用IAM策略将所有AWS资源的访问权限限制为公共IP或VPC。文档表明这应该工作,它似乎适用于IP案例。但是,只要我为VPC添加条件,它就会中断。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddressIfExists": {
"aws:SourceIp": "a.b.c.d/32"
},
"StringNotEqualsIfExists": {
"aws:sourceVpc": "vpc-1234wxyz"
}
}
}
}
答案 0 :(得分:0)
在" Deny"声明,如果满足任何条件,请求将被拒绝。
对于来自您外部VPC的请求," aws:SourceIp"存在和" aws:sourceVpc"不存在,所以它只评估你的" aws:SourceIp"条件。
对于来自您的VPC内部的请求," aws:SourceIp"存在和" aws:sourceVpc"存在,所以它评估两者。由于您在VPC内部且条件允许访问,但由于您的源IP是您的AWS实例的IP,该条件拒绝访问。
基本上,问题是你依赖" IfExists"假设只有一个或另一个存在,但你的VPC内部都存在。只有当请求来自special case(例如S3)时,才会有Endpoint:
注意强>
如果请求来自使用Amazon VPC端点的主机, 那么aws:SourceIp键不可用。你应该改为使用 特定于VPC的密钥。有关更多信息,请参阅VPC端点 - 在Amazon VPC用户指南中控制端点的使用。
只有在这种特殊情况下,亚马逊才会删除" aws:SourceIp"这将使你的" IsExists"工作