AWS 网关 API,将 lambda 设置为代理

AWS Gateway API, setup a lambda as a proxy

在 AWS 中,我在 VPC 中有一个带有私有 IP 的 EC2,无法在线访问。
我按照此处的说明将私有 VPC 端点连接到网关 API:How to create a VPC endpoint for API Gateway

现在,我可以向 Lambda 发送请求了:
curl -i "https://xxxxx-vpce-xxxxxx.execute-api.us-east-1.amazonaws.com/Test/"

目前,我的 lambda 只是 returns 一条消息,无论请求是什么:

def lambda_handler(event, context):
    print(event, context)
 
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    } 

我想让 lambda 充当出站代理,这样当我 运行:
curl -i --proxy "https://xxxxx-vpce-xxxxxx.execute-api.us-east-1.amazonaws.com/Test/" https://google.com
我得到了 https://google.com

的内容

我的计划是 运行 最后一个 curl 命令,打印 event/content 并弄清楚可以做什么。
但是当我 运行 它时,我收到 403 禁止错误,网关 API 日志中没有条目。

我什至不确定我正在尝试做的事情是否可行。但这就是我要确定的。如果可能的话我该怎么做?

您正在尝试使用 API 网关作为 HTTP 代理,这就是您收到“403 禁止错误”的原因。

您可以使用 curl 中的 --trace-ascii 选项查看发生了什么。

使用这个命令:

curl -i --trace-ascii - --proxy "https://xxxxx-vpce-xxxxxx.execute-api.us-east-1.amazonaws.com/Test/" https://google.com

您将在日志中看到如下内容:

=> Send header, 112 bytes (0x70)
0000: CONNECT google.com:443 HTTP/1.1
0021: Host: xxxxx-vpce-xxxxxx.execute-api.us-east-1.amazonaws.com:443
00XX: User-Agent: curl/7.71.1
00XX: Proxy-Connection: Keep-Alive

基本上,curl 向 api-网关发出 HTTP CONNECT 动词而不是 POST 或 GET 或 PUT 或 DELETE,并且 API-网关阻止 CONNECT 动词因此 403错误。

您尝试做的是使用 API-Gateway 作为 HTTPS 代理,这是设计阻止的。该呼叫甚至不会到达您的 lambda,它将在 API-Gateway 被拒绝。

你可以用你的 lambda + API-Gateway 组合设计一个“高级”代理,但我非常怀疑你能否用 API-Gateway 做一个 HTTPS 代理就像你在尝试一样。