通过 awscli 和 boto3 在 EC2 中 Secrets Manager 极其缓慢

Secrets manager extremely slow in EC2s via awscli and boto3

我正在 pycharm 中写一个烧瓶 API。当我在本地 运行 我的代码时,使用 boto3 从机密管理器获取机密的请求不到一秒钟。但是,当我将我的代码放在 EC2 上时,大约需要 3 分钟(在 t2.micro 和 m5.large 中都尝试过)。

起初我认为这可能是一个 Python 问题,所以我 运行 通过 awscli 在我的 EC2 中使用:

aws secretsmanager get-secret-value --secret-id secretname

仍然用了大约 3 分钟。为什么会这样?这在理论上不应该在 EC2 中比在我的本地机器中更快吗?

编辑:只有当 EC2 位于与默认 VPC 不同的 VPC 内时才会发生这种情况。

我 运行 从我自己的计算机和 ap-southeast-2 区域中的 Amazon EC2 t2.nano 实例执行以下命令:

aws secretsmanager create-secret --name foo --secret-string 'bar' --region ap-southeast-2
aws secretsmanager get-secret-value --secret-id foo --region ap-southeast-2
aws secretsmanager delete-secret --secret-id foo --region ap-southeast-2

在这两种情况下,每个命令都在一秒钟内返回。

补充:

为了测试你的情况,我做了以下(在悉尼地区):

  • 使用 VPC 向导创建了一个 新 VPC(只是一个 public 子网)
  • 在新 VPC 中启动了一个 新 Amazon EC2 实例,具有访问 Secrets Manager
  • 的角色 g运行ting 权限
  • 在实例上升级了 AWS CLI(安装的版本不知道 secretsmanager
  • 运行以上命令

他们都立即返回

因此,问题出在您的实例或您的VPC 上。

在我们本地机器上为同样的问题奋斗了将近两个月之后,我们今天终于有了一些进展。

原来是IPv6的问题

如果您使用的是 IPv6,则机密管理器域将解析为 IPv6 地址。由于某种原因,cli 无法使用 IPv6 建立安全连接。超时后,cli回退到IPv4,然后成功。

要验证您是否正在解析 IPv6 地址,只需 ping secretsmanager.us-east-1.amazonaws.com。不要担心 ping 响应,您只想查看域解析到的 IP 地址。

要解决此问题,您现在有 3 个选择:

  1. 找出您的网络问题。这可能是您的机器或路由器上的东西。如果在 AWS VPC 中,请检查您的路由表和安全组。确保允许出站 IPv6 流量 (::/0)。
  2. 减少 cli 连接超时,使 IPv6 调用失败更快。这将使 IPv4 回退更快发生。你可能想给一个更好的超时值,但一般的想法是添加这样的东西:--cli-connect-timeout 1
  3. 禁用 IPv6。您可以在您的 machine/router 上完全禁用 IPv6,或者您可以调整您的机器以针对此特定地址优先使用 IPv4(参见:https://superuser.com/questions/436574/ipv4-vs-ipv6-priority-in-windows-7)。

最终,选项 1 是 真正的 解决方案,但由于它是如此广泛,其他选项可能更容易。

希望这可以帮助其他人在遇到此问题时保持理智。

我在家通过 Cisco AnyConnect VPN 客户端工作时遇到了这个问题。显然它会阻止任何 IPv6。

我的解决方案是在笔记本电脑上完全禁用 IPv6。

为 macOS 这样做:

networksetup -setv6off Wi-Fi  # wireless
networksetup -setv6off Ethernet  # wired

重新启用:

networksetup -setv6automatic Wi-Fi  # wireless
networksetup -setv6automatic Ethernet  # wired