以下AWS API-Gateway资源策略在从VPC内部和外部调用时生成此响应
{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:ap-south-1:********2818:d5cbeh0e78/default/GET/autoimageresize-staging with an explicit deny"}
资源政策:将VPC列入白名单
{
"Version": "2012-10-17",<
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-south-1:********2818:d5cbeh0e78/*/*/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-south-1:********2818:d5cbeh0e78/*/*/*",
"Condition": {
"StringNotEquals": {
"aws:SourceVpc": "vpc-********"
}
}
}
]
}
将具有相关IP的资源列入白名单与以下资源政策配合得很好
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-south-1:********2818:d5cbeh0e78/*/*/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-south-1:********2818:d5cbeh0e78/*/*/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "xx.xxx.xxx.xx"
}
}
}
]
}
任何人都可以建议我可能会出问题的地方,以及如何验证aws:SourceVpc值(如果不是我所期望的)。还有另一件事,在某些地方,我在AWS文档中将SourceVpc作为关键,而在另一些地方将其作为SourceVpc。
预先感谢
答案 0 :(得分:1)
我发现您需要两件事来创建私有REST API。首先,您需要一个允许从VPC访问的资源策略。然后,您需要在试图访问私有REST API的VPC中创建一个VPC端点。
对资源策略进行故障排除/修订时,必须按顺序执行以下步骤。
不等待更改传播将导致结果混乱。
在对这些类型的问题进行故障排除时,我还没有发现API Gateway日志那么有用。通常只有一个条目,上面写着“客户端无权执行此操作”,类似于HTTP 403(禁止)。
答案 1 :(得分:0)
除非您为api网关创建私有VPC端点,否则API网关API是公共的。
这是因为流量来自内部网络
创建私有VPC端点后,只能通过其自定义域访问同一帐户中的所有现有公共api。
还要确保重新部署api以反映资源策略更改。