设置本地 https 网络以在 docker 中模拟 amazonaws.com

Setting up local https network to mock amazonaws.com in docker

我有一个要求,我需要在我的本地 docker 组合网络中设置一个 spoof/mock AWS 服务器...要求是能够测试一组微服务而不让微服务知道端点实际上不是 AWS。

例如,如果使用 AWS-SDK 的微服务尝试进行服务调用以创建队列,它会调用 https://eu-west-1.queue.amazonaws.com. I have a local dns server installed which resolves the same to a reverse proxy server(Traefik),后者又将其解析为模拟服务器。

进行服务调用时,服务调用在反向代理级别失败并显示以下错误

traefik_1     | time="2018-10-11T15:11:28Z" level=debug msg="http: TLS handshake error from 10.5.0.7:59058: remote error: tls: unknown certificate authority"

任何人都可以帮助我以成功调用的方式设置系统....

您将无法对 https api 请求和 return 不同的响应进行 MITM。您可以给 SDK 一个不同的 url 来命中(没有 https,或使用自签名证书),然后设置代理以在您希望将它们发送到亚马逊时将请求代理到亚马逊,并当你想嘲笑他们时你的其他服务。

关于如何在 javascript SDK 中更改 api 请求 url 的一些随机信息:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/specifying-endpoints.html(作为示例)

您将 struggle/compromise 拦截 AWS API 调用而不绕过证书链的验证。

我建议您在 NodeJS 代码中向 AWS SDK 客户端提供 Custom Endpoint 以指向 LocalStack 端点。该值可以在您的测试环境中使用环境变量传递。

var sqsClient = new AWS.SQS(
           {endpoint: process.env.SQSCLIENT}
);

然后将 LocalStack URL 传递到测试环境的容器中:

docker run mymicroservice -e SQSCLIENT='http://localstack:4576'

tls: unknown certificate authority

根据此错误消息,您需要更新您环境中受信任的 CA 列表。这需要在将连接到您的模拟服务的每个图像(或生成的容器)中完成。该过程根据您 select 的基本图像而有所不同,并且 this question on unix.se 涵盖了许多方法。

Debian 进程:

apt-get install ca-certificates
cp cacert.pem /usr/share/ca-certificates
dpkg-reconfigure ca-certificates

CentOS进程:

cp cacert.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract

Alpine 进程:

apk add --no-cache ca-certificates
mkdir /usr/local/share/ca-certificates
cp cacert.pem /usr/local/share/ca-certificates/
update-ca-certificates