我创建了一个AWS API Gateway终端节点,该终端节点指向我创建的API。我想使该IP可以无需任何身份验证(可以通过Internet访问它们)
来访问某些IP。这是我所附的政策
{
"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,可以从那里访问端点。但是我的访问被拒绝了。
对此有一个similar question,但它使用了我不想要的IAM身份验证。
我想念什么?
答案 0 :(得分:1)
您见过this吗?
看起来允许也包含在默认模板中。我进行了复制,发现资源策略控制台“ 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}}" } ] }
您可以通过将条件“ IpAddress”更改为您在非工作模板中使用的相同“ NotIpAddress”条件,将其从黑名单更改为白名单。
这对我来说很好,所以如果不是,我将在您的API GW API上启用Access Logging并验证在您发出请求时AWS看到的源IP(请确保还要记录请求ID)。
为确保您在查看正确的访问日志,发出请求时,应使用curl示例捕获响应标头“ x-amzn-requestid”,
x-amzn-requestid:85e403e8-210a-49e4-909e-b3fb66d6467e
FTR,我在按钮在默认策略中创建的占位符中输入了*,AWS控制台将其转换为适当的值,因此控制台转换后最终看起来像这样。我所指的转换是我下面的占位符(REGION,ACCID,APIID):
{ "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/*/*/*" } ] }