Amazon web services API网关白名单特定IP

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",

我已经创建了一个AWS API网关端点,它将导致我创建的API。我想让某些IP无需任何身份验证就可以访问此API(通过Internet访问)

这是我附加的政策

{
    "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/*/*/*" } ] }