Amazon web services API网关白名单特定IP
我已经创建了一个AWS API网关端点,它将导致我创建的API。我想让某些IP无需任何身份验证就可以访问此API(通过Internet访问) 这是我附加的政策Amazon web services API网关白名单特定IP,amazon-web-services,aws-lambda,aws-api-gateway,Amazon Web Services,Aws Lambda,Aws Api Gateway,我已经创建了一个AWS API网关端点,它将导致我创建的API。我想让某些IP无需任何身份验证就可以访问此API(通过Internet访问) 这是我附加的政策 { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke",
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:us-west-2:123412341234:abcdabcdab/*/*/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "141.223.201.10/32"
}
}
}
]
}
源IP是我的IP,端点应该可以从这里访问。但我的访问被拒绝了
对此有一个解决方案,但它使用IAM身份验证,这是我不想要的
我错过了什么?你看到了吗
看起来默认模板中也包含了allow。我去复制它,看到资源策略控制台中有一个按钮“IP范围黑名单”。如果单击它,它将创建如下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}",
"Condition" : {
"IpAddress": {
"aws:SourceIp": [ "{{sourceIpOrCIDRBlock}}", "{{sourceIpOrCIDRBlock}}" ]
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}"
}
]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“拒绝”,
“委托人”:“*”,
“操作”:“执行api:Invoke”,
“资源”:“执行api:/{{stageNameRowildCard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}”,
“条件”:{
“IP地址”:{
“aws:SourceIp:“{{SourceIPorcidBlock}},{{{SourceIPorcidBlock}}”]
}
}
},
{
“效果”:“允许”,
“委托人”:“*”,
“操作”:“执行api:Invoke”,
“资源”:“执行api:/{{StageNameRowildCard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}”
}
]
}
通过将条件“IpAddress”更改为非工作模板中使用的相同“NotIpAddress”条件,可以将其从黑名单更改为白名单
这对我来说效果很好,所以如果不是这样,我会在您的API GW API上启用,并在您发出请求时验证AWS看到的源IP(确保您也记录了请求id)
为了确保查看的是正确的访问日志,在发出请求时,应捕获响应头“x-amzn-requestid”,响应头使用curl示例:
x-amzn-requestid:85e403e8-210a-49e4-909e-b3fb66d6467e
FTR,我在按钮在默认策略中创建的占位符中输入了*,AWS控制台将它们转换为适当的值,因此在控制台转换后,它最终看起来是这样的。我所指的转换是下面的占位符(REGION、ACCID、apid):
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“拒绝”,
“委托人”:“*”,
“操作”:“执行api:Invoke”,
“资源”:“arn:aws:execute api:REGION:ACCID:APID/*/*/*”,
“条件”:{
“NotIpAddress”:{
“aws:SourceIp:“34.213.29.81/32”
}
}
},
{
“效果”:“允许”,
“委托人”:“*”,
“操作”:“执行api:Invoke”,
“资源”:“arn:aws:execute api:REGION:ACCID:APID/*/*/*”
}
]
}
您可能需要显式指定allow,与我尝试过的类似,但它也不起作用。因此可能会出现很多问题,例如1-您的IP不正确,2-您在策略中的资源引用不正确(从外观上看这是非常合理的)1。我通过查找我的IP进行检查,然后将该IP列入白名单。2.你能说哪一部分可能错了吗。我不熟悉API网关策略。如果您将“资源”设置为
arn:aws:execute API::::*/*/*/*
是否有效?如果是这样,那么您就知道它是您的策略定义中的资源……然后您就可以知道了。是的,我用完全相同的方法尝试了它,但我在顶部添加了Allow*
,但这不起作用。但当我把它添加到底部时,它开始工作了。此外,在API网关UI中更改策略的次数上似乎存在一些问题。起初,它可以工作,但后来它停止应用新策略。另外,有没有办法添加范围而不是单个IP?RE:range of IP的是,它使用CIDR表示法,因此“aws:SourceIp:“34.213.29.81/32”中的/32表示单个IP,但您可以使用子网计算器计算/16或/24或您需要的任何IP范围。我用这个:RE:把它加到底部我不知道这是怎么回事,它对我都有用!对于应用策略的UI,您是否在每次策略更改后部署它?您必须部署API才能使策略更改生效,之后可能需要几分钟时间才能在整个API网关后端填充策略更改
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:REGION:ACCID:APIID/*/*/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "34.213.29.81/32"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:REGION:ACCID:APIID/*/*/*"
}
]
}