drg*_*rgn 5 amazon-web-services aws-api-gateway
首先,我对AWS非常陌生。这是我想要实现的目标:
公共子网运行良好,我可以访问SSH和HTTP。专用子网给我带来了一些麻烦。为了调试,我在其中启动了一个EC2实例。从一个“公共实例”中,我可以ping通“私有实例”的私有IP(显然没有公共IP)
根据文档,我在我的专用子网中创建了一个VPC端点,该端点创建了一个网络接口,在该接口中,我附加了一个安全组,该安全组允许整个VPC CIDR中的HTTP(S)(80和443)。端点类型为接口
所以,现在我有了一个带有允许HTTP(S)流量的端点的专用子网。该终结点具有一些(私有)DNS NAME,并且(可能)还有一个私有IP(找不到)
现在,我想添加一个API网关来添加一些AWS lambda。我创建了所说的API并作为端点类型->私有
遵循以下步骤:官方文档 将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>"
}
]
Run Code Online (Sandbox Code Playgroud)
}
为了完整起见,这里是我的lambda(python3.6):
from __future__ import division
def lambda_handler(event, context):
return {
"statusCode":200,
"headers": {"Content-Type": "application/json" },
"body" : "It work!"
}
Run Code Online (Sandbox Code Playgroud)
最后的问题:
调用此REST Api的URL是什么!API网关(在lamdba控制台中)告诉我:
https://<API GATEWAY ID>.<REGION>.amazonaws.com/<MY STAGE>/<MY RESOURCE>
Run Code Online (Sandbox Code Playgroud)
好!让我们调用该URL:APIURL我在公共子网中SSH到EC2实例并运行以下命令:
curl https://$APIURL
Run Code Online (Sandbox Code Playgroud)
工作正常:输出:“工作正常!” 但是该APIURL似乎不是来自VPC端点,因此我尝试了以下操作(仍然来自公共子网EC2):
curl https://vpce-XXXXXXX-XXXX.execute-api.REGION.vpce.amazonaws.com/<MY STAGE>/<MY RESOURCE>
Run Code Online (Sandbox Code Playgroud)
我得到:{“ 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>"
}
]
Run Code Online (Sandbox Code Playgroud)
}
一切都没有改变。APIURL仍然有效,VPCE Url仍然禁止我访问。
我究竟做错了什么?对于长期的帖子,我深表歉意。
在将 api 部署到阶段之前,策略角色更新不会生效。
如果在创建 API 后更新资源策略,则需要在附加更新后的策略后部署 API 以传播更改。
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |