【发布时间】:2019-08-19 17:11:27
【问题描述】:
首先,我对 AWS 非常陌生。 这是我想要实现的目标:
- 1 个 VPC
- 2 子网
- 1 个包含一些 EC2 实例的公共
- 1 个私有的,包含一个只能由 EC2 实例访问的 API 网关
- 2 子网
公共子网运行良好,我可以访问 SSH 和 HTTP。 私有子网给我带来了一些麻烦。出于调试目的,我在其中启动了一个 EC2 实例。从“公共实例”之一我可以 ping 通“私有实例”私有 IP(显然没有公共 IP)
按照文档,我在我的私有子网中创建了一个 VPC 端点,该端点创建了一个网络接口,我在其中附加了一个安全组,该安全组允许来自整个 VPC CIDR 的 HTTP(S)(80 和 443)。端点类型为接口
所以,现在我有一个带有端点的私有子网,它允许 HTTP(S) 流量。该端点有一些(私有)DNS NAME 和(可能)还有一个私有 IP(找不到它)
现在我想在一些 AWS lambda 前面添加一个 API 网关。 我创建了上述 API 并作为端点类型 -> 私有
关注这个:Official Documentation 将 API 网关“链接”到 VPC 端点的“唯一”方法是添加资源策略。所以我输入以下内容
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:<REGION>:<MY ID>:<API GATEWAY ID>/*/*/<MY RESOURCE>",
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "<VPC ENDPOINT ID>"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:<REGION>:<MY ID>:<API GATEWAY ID>/*/*/<MY RESOURCE>"
}
]
}
为了完整起见,这里是我的 lambda (python3.6):
from __future__ import division
def lambda_handler(event, context):
return {
"statusCode":200,
"headers": {"Content-Type": "application/json" },
"body" : "It work!"
}
终于有问题了:
调用此 REST Api 的 URL 是什么! API 网关(在 lamdba 控制台中)告诉我这个:
https://<API GATEWAY ID>.<REGION>.amazonaws.com/<MY STAGE>/<MY RESOURCE>
好的!让我们调用那个 url:APIURL 我 ssh 到公共子网中的 EC2 实例并运行以下命令:
curl https://$APIURL
它起作用了:它输出:“它起作用了!”但该 APIURL 似乎并非来自 VPC 端点,因此我尝试以下操作(仍来自公共子网 EC2):
curl https://vpce-XXXXXXX-XXXX.execute-api.REGION.vpce.amazonaws.com/<MY STAGE>/<MY RESOURCE>
我得到:{"message":"Forbidden"}
这似乎不对。在我测试时,我更改了以下 API 网关资源策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:<REGION>:<MY ID>:<API ID>/*/*/<MY RESOURCE>"
}
]
}
什么都没有改变。 APIURL 仍然有效,VPCE Url 仍然给我禁止。
我做错了什么?对于这篇长篇文章,我深表歉意。
【问题讨论】:
-
如果你更新了资源策略,你需要重新部署你的api。否则,更改将无效。
-
尽管为遇到类似问题的人提供了有用的信息,但没有提供任何答案真正回答它。我认为问题在于“重新部署”它,以便采用新配置。您能否根据您的评论提供答案,以便我接受?
-
绝对——添加了答案。
标签: amazon-web-services aws-api-gateway