【发布时间】:2021-04-24 05:33:49
【问题描述】:
我的用例
我有一个调用外部 API 的 AWS lambda 托管函数。就我而言,这是 Trello 的绝妙之处,well-defined API。
简而言之我的问题 - TL;DR 选项:随意跳到下面的陈述
我对 Trello 的外部 API 调用正常工作。现在它不工作了。我怀疑我更改了 AWS 中的网络权限,现在阻止了服务提供商返回的响应。详细信息如下。
我的测试
我已经使用Postman 测试了我对 API 的调用,所以我知道我有一个格式正确的请求和来自服务提供商的有用的返回响应。业务逻辑没问题。作为参考,这是我正在使用的 API 调用。出于显而易见的原因,我混淆了我的密钥和令牌:
https://api.trello.com/1/cards?key=<myKey>&token=<myToken&idList=<a_real_list_here>&name=New+cards+are+cool
这应该会在我的 Trello 板上放置一张新卡,并且在 POSTMAN(在我的本地计算机上运行)中它会成功。事实上,我在最近部署的一个 AWS lambda 函数中使用了这个。这是电话。 (请注意,我使用的是 AWS 推荐的 urllib3 library:
http.request("POST", "https://api.trello.com/1/cards?key=<myKey>&token=<myToken>&idList=<a_real_list_here>&name="+card_name+"&desc="+card_description)
此外,我已经测试了相同请求的 CURL 版本的相同功能。它是这样形成的:
curl --location --request POST 'https://api.trello.com/1/cards?key=338d5b193d43e95712005fd2bcb4cd12&token=d0e3c4cd6281f43e4ec257ae5f05cd902230cbbca7e26b99664cd620f6479f7a&idList=600213811e171376755c7ed5&name=New+cards+are+cool'
我可以这样总结行为
+------------+---------------+----------------------+---------------+
| | Local Machine | Previously on Lambda | Now on Lambda |
+------------+---------------+----------------------+---------------+
| cURL | GOOD | GOOD | N/A |
+------------+---------------+----------------------+---------------+
| HTTP POST | GOOD | GOOD | 443 Error |
+------------+---------------+----------------------+---------------+
代码和错误
我没有得到可调试的响应。我得到一个 443,我认为这是错误代码,但即使这样也不清楚。这是代码sn-p:
#send to trello board
try:
http.request("<post string from above>")
except:
logger.debug("<post string from above>")
代码似乎永远不会到达 logger.debug() 调用。我在 AWS 上得到了这个 日志:
[DEBUG] 2021-01-19T21:56:24.757Z 729be341-d2f7-4dc3-9491-42bc3c5d6ebf
Starting new HTTPS connection (1): api.trello.com:443
我认为“正在启动新的 HTTPS 连接...”日志条目来自 urllib3 库
问题总结
我通过测试知道我对外部服务的实际 API 调用是正确形成的。在某一时刻,它运行良好,但现在却不行。以前,为了让它正常工作,我不得不摆弄 AWS 权限以允许服务提供商返回响应。我做到了,但我并不完全理解我做了什么,我认为我只是幸运。现在它坏了,我想以一种深思熟虑的方式来做。
我正在寻找的是了解如何设置 AWS 权限结构以启用来自服务提供商的返回消息。 AWS 提供了关于如何使用 API Gateway 让其他人访问 AWS 上托管的服务的综合指南,但它更粗略地介绍了如何为其他服务提供商的响应开放权限。
感谢Hava 的人们,我有一张很棒的 AWS 基础设施权限图表: Security Structure红色标注的两个网与本项目无关。第一个绿色检查点指向我的一台 EC2 机器,第二个指向相关安全组。
我希望社区可以帮助我了解关键权限元素(IAM 角色、安全组等)在起作用,以及我需要在相关的 AWS 权限/网络/安全结构中寻找什么。
【问题讨论】:
-
原始错误信息是什么?
-
我没有得到可调试的响应。我得到一个 443,我认为这是错误代码,但即使这样也不清楚。这是代码 sn-p: #send to trello board try: http.request("
-
哇...没有意识到我无法在响应中添加任何文本格式。很抱歉造成混乱。
-
您是否将 lambda 放入您的 VPC 中?
-
是的,但感谢您的检查。我能够在亚马逊网站上和使用 Hava 基础设施图表工具验证这一点。
标签: amazon-web-services rest aws-lambda amazon-iam aws-security-group