我有一个场景,我需要通过2个代理对AWS云监视器执行AWS CLI命令。
服务器A(AWS CLI)----->服务器B(Apache代理Web服务器)----->公司代理IP(X.X.X.X)----->网络
我的挑战是AWS CLI命令没有上下文(/某事物),根据该上下文可以应用重写规则(将在服务器B上编写)将请求从服务器A转发到公司代理IP和最后到互联网(AWS)。 公司代理IP的连接已经存在于互联网上。
我的主要动机是通过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'
- 结束时间date -u '+%FT%TZ'
- 期间60
我知道我们可以使用HTTP_PROXY通过代理转发请求,但这只会将我的请求从服务器A转发到服务器B(Apache代理Web服务器)。
提前致谢&感谢快速反应。
答案 0 :(得分:0)
好的,所以我实际上最近构建了一个反向代理服务器(nginx),专门用于转发AWS CLI请求以帮助企业防火墙。不幸的是,我无法发布用于实现这项工作的代码,但可以为您提供有关设置此类系统的问题的一些见解。
\*.\*.{proxy-address} => {proxy-ip}
然后aws ec2 --endpoint-url https://ec2.us-west-2.proxy describe-instances
),或者您可以手动将信息注入路径(例如{{1 }})。然后,在代理服务器上,您解析信息并根据它设置上游。我的最终解决方案是将完整的默认AWS端点url放入我的代理aws ec2 --endpoint-url https://proxy/ec2/us-west-2 describe-instances
的路径中,然后让regex上游解析端点URL,以防amazon放置路径中的信息,然后设置上游服务器到正则表达式解析的端点URL。https://proxy/ec2.us-west-2.amazonaws.com
标志,则会在--endpoint-url
标头设置为代理服务器URL的情况下对请求进行签名。现在,当在上游重写时,Host
标头将不再与签名匹配。因此,您需要重新签署通过代理的任何请求。这有几个偷偷摸摸的方式。我最终做的是创建一个AWS CLI包装器,它重载了签名机制以对请求进行签名,就好像它将其发送到默认的AWS端点,然后覆盖Host
标头指向我的反向代理。以这种方式重新签名是有利的,因为它可以消除由于不必转换请求而导致的代理延迟,但是很难以动态提取AWS可能发布的任何新签名方法的方式实现。值得注意的是,如果你深入挖掘僵尸源代码,你会发现一些内置的反向代理支持,但似乎已经不存在/未被使用(它没有暴露给客户)。希望他们在不久的将来能够清除这些功能,这将不再是一个问题。