gpt4 book ai didi

amazon-web-services - 无法设置到私有(private) AWS API 网关 API 的 SSH 隧道

转载 作者:行者123 更新时间:2023-12-04 02:41:02 27 4
gpt4 key购买 nike

我有一个私有(private) AWS API Gateway REST API,这意味着它只能在我的 VPC 中访问。
我有一个在 VPC 中运行的堡垒 SSH 实例,这意味着我可以执行以下操作:

ssh -J ec2-user@<bastion> ec2-user@<ip of EC2 instance within my VPC>

从那个实例我可以 curl我的 API 使用 https://<api-id>.execute-api.eu-west-1.amazonaws.com/dev/<my endpoint>网址。

现在,对于本地测试,我想将此实例隧道传输到本地端口,所以我尝试
ssh -J ec2-user@<bastion> -L 8888:<api-id>.execute-api.eu-west-1.amazonaws.com:443 ec2-user@<ip of EC2 instance within my VPC>

此命令返回正常,但是当我尝试执行 curl localhost:8888/dev/<my endpoint> ,我首先得到一个证书错误,这是很自然的,但是当我尝试使用 curl -k localhost:8888/dev/<my endpoint> 时要忽略证书,我只需从 AWS 收到 403 Forbidden 响应。对于这些请求,我的 REST API 访问日志中没有任何内容。

403 是否与我忽略 TLS 证书或其他原因有关?
有可能建立这样的隧道吗?
不幸的是,似乎不可能对 API 网关 REST API:s 使用纯 HTTP,否则我会更喜欢这种类型的东西。

最佳答案

API Gateway 要求主机 header 与 API 端点 URL 匹配。将主机名添加到您的 /etc/hosts

<api-id>.execute-api.eu-west-1.amazonaws.com 127.0.0.1

并正常调用 curl https://<api-id>.execute-api.eu-west-1.amazonaws.com:8888/dev/<my endpoint>
或使用 curl 的 --resolve 旗帜
curl \
--resolve <api-id>.execute-api.eu-west-1.amazonaws.com:443:localhost:8888 \
localhost:8888/dev/<my endpoint>

或者,如果您的堡垒配置为允许,您可以使用 ssh作为 SOCKS5 代理并通过堡垒代理您的请求。

在一个 shell session 中启动代理
ssh -D 8888 ec2-user@<bastion>

然后在另一个shell中,使用它
export HTTPS_PROXY=socks5://localhost:8888
curl https://<api-id>.execute-api.eu-west-1.amazonaws.com/dev/<my endpoint>

关于amazon-web-services - 无法设置到私有(private) AWS API 网关 API 的 SSH 隧道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59412032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com