Api Gateway上的AWS资源策略:无权授权匿名显式拒绝对资源执行调用

时间:2019-12-11 06:48:32

标签: security networking aws-api-gateway devops amazon-vpc

以下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。

预先感谢

2 个答案:

答案 0 :(得分:1)

我发现您需要两件事来创建私有REST API。首先,您需要一个允许从VPC访问的资源策略。然后,您需要在试图访问私有REST API的VPC中创建一个VPC端点。

对资源策略进行故障排除/修订时,必须按顺序执行以下步骤。

  1. 保存资源策略。
  2. 重新部署API(资源-操作|部署API)
  3. 等待10到15秒。

不等待更改传播将导致结果混乱。

在对这些类型的问题进行故障排除时,我还没有发现API Gateway日志那么有用。通常只有一个条目,上面写着“客户端无权执行此操作”,类似于HTTP 403(禁止)。

答案 1 :(得分:0)

除非您为api网关创建私有VPC端点,否则API网关API是公共的。

仅当存在专用VPC端点时:

  • 您可以SourceVPC检查
  • 私有IP地址的SourceIp条件

这是因为流量来自内部网络

如果您具有API网关VPC端点:

创建私有VPC端点后,只能通过其自定义域访问同一帐户中的所有现有公共api。

还要确保重新部署api以反映资源策略更改。

参考: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies-aws-condition-keys.html