ruby-on-rails 如何使用toxiproxy模拟与AWS S3的不良连接?

wtzytmuj  于 2023-01-06  发布在  Ruby
关注(0)|答案(1)|浏览(175)

我想达到的目标是:

  • 我有一个ruby on rails应用程序,它使用fog-aws适配器通过载波来存储数据
  • 我正在尝试模拟与AWS S3的不良通信

我所做的:
我有一个示例ruby脚本,它尝试连接到AWS并枚举对象:

require 'aws-sdk-s3'
params = {region: 'us-west-2', access_key_id: 'key', secret_access_key: 'secret'}
s3 = Aws::S3::Client.new(params)
puts s3.list_objects({bucket: 'bucketname', prefix: '', max_keys: 1})

这很有效-所以凭据是正确的。
现在我想用toxiproxy(一个随机断开连接的混沌工程工具,等等)来毒化它。

  • 已将http代理添加到参数:第一个月
  • 用我能想到的任何东西创建了一个毒素代理定义:
toxiproxy-cli create --listen localhost:7890  -u bucketname.s3.amazonaws.com:443 test-aws
toxiproxy-cli create --listen localhost:7890  -u s3-r-w.us-west-2.amazonaws.com:443 test-aws

然后我执行上述脚本,我看到的是:lib/ruby/2.6.0/net/protocol.rb:225:in 'rbuf_fill': end of file reached (Seahorse::Client::NetworkingError)
我搞不懂连接所有东西所需的神奇参数。
所以问题是:

  • 我想做的事能用托克斯普罗克实现吗?
  • 如果没有,建议采取什么措施?
rxztt3cl

rxztt3cl1#

我想通了。看起来ToxicProxy本身不足以拦截和转发连接--我还需要使用Tinyproxy。
我是这么做的:
1.将tinyproxy设置为端口8888上的http代理
1.在端口7890上设置toxiproxy以转发到端口8888
1.将AWS客户端配置为连接到端口7890上的http_proxy--这允许toxiproxy扰乱连接,但将允许tinyproxy使用HTTP CONNECT和到AWS的隧道。
示例代码:

require 'aws-sdk-s3'
s3 = Aws::S3::Client.new(region: 'us-west-2', access_key_id: 'key', secret_access_key: 'secret', http_proxy: 'http://localhost:7890')
puts s3.list_objects({bucket: 'bucketname', prefix: '', max_keys: 1})

tinyproxy配置示例:

Port 8888
Listen 127.0.0.1
Timeout 600
Allow 127.0.0.1

toxiproxy配置示例:

toxiproxy-cli create --listen 127.0.0.1:7890 -u 127.0.0.1:8888 test-aws
toxiproxy-cli toxic add --type reset_peer -a timeout=25 test-aws

相关问题