AWS匿名无权执行:execute-api:调用资源。私有API网关

问题描述 投票:1回答:2

我有一个REST API Lambda函数部署到私有子网,其中API网关类型是私有的。在this之后,我已经设置了一个vpc端点到私有api网关到同一个vpc的两个公共子网,就像lambda函数私有子网一样。 vpce的相应安全组允许所有流量。

如果我尝试从公有子网中的EC2实例查询api端点,我会收到以下错误:

 anonymous is not authorized to perform: execute-api:Invoke on resource.

我找不到问题,因为私有api网关的资源策略如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:eu-central-1:xxxxxxx:xxxxxx/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "vpce-xxxxxxxx"
                }
            }
        }
    ]
}

我错过了什么?

amazon-web-services aws-api-gateway aws-vpc aws-vpc-link
2个回答
0
投票

我已经查看了您提供文档的文档以及您编写的内容。我相信我找到了您的访问问题的原因。

正如您所提到的那样,您在公有子网中创建了一个EC2实例。默认情况下,子网将具有可用的Internet网关,因此实际上您的VPC端点将不会用于访问私有API网关。在文档中他们也说以下内容;

为了强调此API的“私有性”,请在传统的网络意义上,从仅存在于您的VPC内并且没有直接网络访问权限的资源中对其进行测试。

假设您的策略正确,您的资源块中使用了正确的区域,并且您的vpc端点ID是正确的,您只需要在私有子网内启动另一个ec2实例。那么下面的过程应该有效;

  1. ssh到公共子网中的实例
  2. 从公共实例ssh到私有子网中的实例
  3. 从私有子网中的EC2实例执行调用操作

0
投票

你能检查api网关端点上的安全组吗?你需要使用

Ingress:你的vpc的https来源CIDR。

Outgress:所有流量,0.0.0.0 / 0

我发现如果你在sg(Ingress)中使用sg-,它将无效。在我改为CIDR后,它现在有效。我可以从basion机器上调用这个api。

© www.soinside.com 2019 - 2024. All rights reserved.