代码之家  ›  专栏  ›  技术社区  ›  Peterhack

AWS anonymous无权对资源执行:execute api:Invoke。专用API网关

  •  1
  • Peterhack  · 技术社区  · 7 年前

    我有一个REST API Lambda函数部署到私有子网,其中API网关类型是私有的。下列的 this 我已经设置了一个vpc端点到专用API网关,与lambda functions专用子网连接到同一vpc的两个公用子网。vpce的相应安全组允许所有通信。

    如果尝试从公共子网中的EC2实例查询API端点,则会出现以下错误:

     anonymous is not authorized to perform: execute-api:Invoke on the 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"
                    }
                }
            }
        ]
    }
    

    我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   flymg    7 年前

    事实上,@peterhack说的对我来说也是答案。 使用提供的模板“VPC白名单”和所有占位符是一个问题:

    ...xxx:/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}
    

    替换为 ...xxx:*/* 修好了

        2
  •  0
  •   marcincuber    7 年前

    我已经审阅了您提供给我的文档以及您所写的内容。我想我找到了你访问问题的原因。

    正如您提到的,您在公共子网中创建了一个EC2实例。默认情况下,该子网将有一个可用的internet网关,因此事实上,您的VPC端点不会用于访问专用API网关。在文件中,他们还说:;

    为了强调这个API的私密性,可以从一个资源中测试它,这个资源只存在于您的专有网络中,在传统的网络意义上没有直接的网络访问。

    假设您的策略正确,资源块中使用了正确的区域,并且vpc端点id正确,则只需在专用子网内启动另一个ec2实例。那么接下来的过程应该是可行的;

    1. ssh到公共子网中的实例
    2. 从公共实例ssh到私有子网中的实例
    3. 从专用子网中的EC2实例执行调用操作
        3
  •  0
  •   Yang Young    7 年前

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

    进入: 您的专有网络的https源CIDR。

    结果: 所有流量,0.0.0.0/0

    我发现,如果在sg(入口)中使用sg,它将无法工作。在我换成苹果酒后,它现在可以用了。我可以在basion机器上调用这个api。

    推荐文章