卓:我可以在VPC内为Lambda函数提供对公共Websockets API网关的访问权限吗?

时间:2019-10-09 14:08:59

标签: amazon-web-services aws-lambda aws-api-gateway amazon-vpc

我在使用Websockets协议的API网关中有一个公共API。我正在将其连接ID存储在VPC内的数据存储中,并尝试编写Lambda来读取这些连接ID,然后使用await apigwManagementApi.postToConnection({ ConnectionId: connectionId, Data: postData }).promise();将数据发送给每个连接。超时-Lambda无法将消息发送到API网关。因此,我尝试将网关添加到execute-apiaws ec2 create-vpc-endpoint --vpc-id vpc-xyz --vpc-endpoint-type Interface --service-name com.amazonaws.eu-west-1.execute-api --subnet-ids subnet-xyz --security-group-id sg-xyz。现在,我对apigwManagementApi的调用引发了ForbiddenException: Forbidden

我尝试查看execute-api网关的文档,但是接口https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html的文档指向https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html并导致创建私有API-我不想要这个,我需要我的API公开。

我认为我通常可以使用资源策略https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies-examples.html,但这是一个websocket API,因此这些说明由于没有资源策略选项而无法使用。

2 个答案:

答案 0 :(得分:0)

我在AWS Slack上询问了此问题,无法使用资源策略,这会增加很多网络复杂性:https://awsdevelopers.slack.com/archives/C6LDW0BC3/p1570618074008500

从该线程中的AWS开发人员那里:

  

嘿,当Lambda启用VPC时,它受制于VPC和子网的所有路由规则。

     

要访问任何公共资源,您将需要NAT GW,路由规则和SG设置以允许通信。

     

资源政策将无法正常工作。

答案 1 :(得分:0)

我遇到了同样的问题-本文档说明了原因(https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-vpc-connections/)。

要修复此问题,您需要添加一个经过边缘优化的自定义域名,其中包含以下内容:

  • 将证书添加到AWS ACM(您需要证书,私钥 和提供商根证书)导入 us-east-1 ACM经理(您必须 将其添加到us-east-1即可在经过边缘优化的证书列表中查看它。)

  • 在API网关控制台中,转到“自定义域名”并创建一个新域名。

  • 设置您的域名,将类型保留为边缘优化,然后应用您刚创建的证书

  • 域设置完成(大约需要40分钟),您可以添加基本路径映射以将流量发送到您的api /阶段。