从 VPC 内将“禁止”异常发布到 API Gateway Websocket API
Posted
技术标签:
【中文标题】从 VPC 内将“禁止”异常发布到 API Gateway Websocket API【英文标题】:Getting a "Forbidden" exception posting to a API Gateway Websocket API from within a VPC 【发布时间】:2020-06-06 01:19:46 【问题描述】:我在连接到 Websocket API 网关端点的 VPC 中运行了一个 lambda。当客户端连接并发送 websocket 命令时,它被调用得很好,并且也能够访问我的 VPC 内的资源 (RDS),但是当我通过 AWS.ApiGatewayManagementApi postToConnection 发送响应时,我得到一个“禁止访问” " 错误。
Lambda 的角色具有“execute-api:Invoke”权限,并且 lambda 本身正在运行具有 NAT 网关的 VPC 私有子网和链接到“execute-api”服务的接口端点(在此之前添加了调用到 postToConnection 会超时)所以我很困惑我可能仍然缺少什么权限。
我是否需要调用与“.execute-api..amazonaws.com/”不同的端点?同样的代码在 VPC 之外运行时也能正常工作。
【问题讨论】:
【参考方案1】:您面临的问题是由于从配置了 VPC 终端节点的 VPC 连接到公共 API。故障排除步骤请参考以下文档:https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-vpc-connections/
上面的文档提到:
如果您在从 Amazon VPC 连接到 API Gateway 公共 API 时收到此错误,请检查是否存在与该 VPC 关联的 API Gateway 接口 VPC 终端节点,并启用了私有 DNS。当为与 VPC 关联的接口 VPC 终端节点启用私有 DNS 时,从 VPC 到 API Gateway API 的所有请求都会解析到该 VPC 终端节点,您无法使用 VPC 终端节点连接到公共 API。
为了简单的修复,您可以禁用 VPC 终端节点的私有 DNS 并确保 Lambda function has internet access。
【讨论】:
谢谢!禁用私有 DNS 允许一切正常工作。我已经阅读了您链接的文档大约一百万次,但在这一点上它的措辞确实令人困惑,我认为它是说您必须启用私有 dns...以上是关于从 VPC 内将“禁止”异常发布到 API Gateway Websocket API的主要内容,如果未能解决你的问题,请参考以下文章
远程重新索引 API AWS ElasticSearch 空指针异常
如何从 iOS 应用程序内将 GCDWebServer 请求重定向到外部主机