gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:29:22 26 4
gpt4 key购买 nike

我要实现的目标:

  • 我有一个 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 代理:{region: 'us-west-2', access_key_id: 'key', secret_access_key: 'secret', http_proxy: 'http://localhost:7890'}
  • 使用我能想到的任何东西创建了一个 toxiproxy 定义:
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: :网络错误)

我想不出连接所有东西所需的魔法参数。

所以问题:

  • 我正在尝试使用 toxiproxy 来完成工作吗?
  • 如果没有,推荐什么?

最佳答案

我想通了。看起来 toxiproxy 本身不足以拦截和转发连接——我还需要使用 tinyproxy。

这是我做的:

  1. 在端口 8888 上将 tinyproxy 设置为 http 代理
  2. 在端口 7890 上设置 toxiproxy 以转发到端口 8888
  3. 将 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

关于ruby-on-rails - 如何使用 toxiproxy 模拟与 AWS S3 的不良连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75011950/

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