【问题标题】:AWS CLI via 2 proxies通过 2 个代理的 AWS CLI
【发布时间】:2018-05-10 16:10:16
【问题描述】:

我有一个场景,我需要通过 2 个代理对 AWS cloudwatch 执行 AWS CLI 命令。

服务器 A(AWS CLI)-----> 服务器 B(Apache 代理 Web 服务器)-----> 公司代理 IP (X.X.X.X) -----> 互联网

我的挑战是 AWS CLI 命令没有上下文 (/something) 可以应用重写规则(将写入服务器 B)来将请求从服务器 A 转发到公司代理 IP 和最后到互联网(AWS)。 来自企业代理 IP 的连接已经存在到 Internet。

我的主要动机是通过 2 个代理在服务器 A 上获取 cloudwatch 指标。根据我的说法,这是无法实现的,但如果可以实现,则需要输入,如果是,那么重写规则是什么 应该写在服务器 B 上,以将 AWS CLI 命令代理到企业代理。

AWS CLI 命令 例如。如下:

aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-xxx --statistics Average --start-time date -u '+%FT%TZ' -d '10 mins ago' --end-时间date -u '+%FT%TZ' --period 60

我知道我们可以使用 HTTP_PROXY 通过代理转发请求,但这只会将我的请求从服务器 A 转发到服务器 B(Apache 代理 Web 服务器)。

提前致谢并感谢您的快速回复。

【问题讨论】:

    标签: apache amazon-web-services proxy command-line-interface


    【解决方案1】:

    好的,所以我最近构建了一个反向代理服务器 (nginx),专门用于转发 AWS CLI 请求以帮助企业防火墙。遗憾的是,我无法发布用于实现该功能的代码,但可以让您深入了解设置这样的系统时遇到的问题。

    1. 这是最明显的。您需要有一个重定向规则来理解通过它推送的请求,并将其重写为上游 AWS 服务器可以理解的语法。在默认 AWS 命令​​中,该上下文是 URL 的一部分(例如 https://ec2.us-west-2.amazonaws.com)。如果您通过上游反向代理,则需要以某种方式向上传递该上下文。您可以使用星型 DNS 记录来捕获对代理的所有请求,就像亚马逊一样(例如\*.\*.{proxy-address} => {proxy-ip} 然后aws ec2 --endpoint-url https://ec2.us-west-2.proxy describe-instances),或者您可以手动将信息注入路径(例如aws ec2 --endpoint-url https://proxy/ec2/us-west-2 describe-instances)。然后,在您的代理服务器上,您解析信息并根据它设置您的上游。我的最终解决方案是将完整的默认 AWS 端点 URL 放入我的代理 https://proxy/ec2.us-west-2.amazonaws.com 的路径中,然后在上游使用正则表达式解析端点 URL,以防亚马逊放置的路径中有信息,然后将上游服务器设置为由正则表达式解析的端点 URL。
    2. 完成#1 后,您将遇到第二期生成的签名。如果您在 CLI 中使用 --endpoint-url 标志,它将使用设置为代理服务器 URL 的 Host 标头对请求进行签名。现在,当它在上游重写时,Host 标头将不再与签名匹配。因此,您需要重新签署通过代理的任何请求。有几个偷偷摸摸的方法。我最终做的是创建一个 AWS CLI 包装器,它重载了签名机制来签署请求,就好像它正在将其发送到默认的 AWS 端点一样,然后覆盖 Host 标头以指向我的反向代理。以这种方式重新签名是有利的,因为它消除了由于不必转换请求而导致的代理延迟,但很难以动态摄取 AWS 可能发布的任何新签名方法的方式实施。

    还值得注意的是,如果您深入研究 botocore 源代码,您会发现一些内置的反向代理支持,但似乎已失效/未使用(它未向客户端公开) .希望他们能在不久的将来清除该功能,这将不再是问题。

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2020-01-26
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2022-06-27
      • 2020-08-08
      • 1970-01-01
      • 2020-04-14
      相关资源
      最近更新 更多