gpt4 book ai didi

amazon-web-services - AWS 安全组连接跟踪在 ECS + Fargate 中运行的 ASP.NET Core 应用程序中的主体响应失败

转载 作者:行者123 更新时间:2023-12-03 23:47:35 29 4
gpt4 key购买 nike

在我的应用程序中:

  • 带有 Kestrel 的 ASP.NET Core 3.1
  • 在 AWS ECS + Fargate 中运行
  • 服务在 VPC 的公共(public)子网中运行
  • 任务仅监听端口 80
  • 带有 SSL 终止的公共(public)网络负载均衡器

  • 我想将安全组设置为允许从任何地方(0.0.0.0/0)到端口 80 的入站连接,并禁止来自任务内部的任何出站连接(当然,响应允许的请求除外)。

    Security Groups are stateful , connection tracking应该允许对请求的响应的导出。

    就我而言,此连接跟踪仅适用于没有正文(仅标题)的响应。当响应有正文(在我的情况下,>1MB 文件)时,它们会失败。如果我允许来自端口 80 的出站 TCP 连接,它们也会失败。但是,如果我允许所有端口(0-65535)的出站 TCP 连接,它就可以正常工作。

    我猜这是因为当 ASP.NET Core + Kestrel 写入响应正文时,它会启动一个新的连接,安全组连接跟踪无法识别该连接。

    有什么方法可以只允许响应请求,而不允许应用程序发起的其他类型的出站连接?

    最佳答案

    所以我们在谈论类似的事情?

    Client 11.11.11.11 ----> AWS NLB/ELB public 22.22.22.22 ----> AWS ECS network router or whatever (kubernetes) --------> ECS server instance running a server application 10.3.3.3:8080 (kubernetes pod)

    您是在 AWS NLB 上还是在 AWS ECS 上配置安全组? (我猜两者都有?)

    如果您允许 0.0.0.0/0,安全组应该允许传入流量端口 80 .

    它们确实是有状态的。它们将允许连接在建立后双向进行(意味着应用程序可以发送响应)。

    然而,防火墙状态通常不会保持超过 60 秒(不确定 AWS 使用的是什么技术),因此如果服务器需要超过 1 分钟的时间来回复,连接可能会“丢失”。 HTTP 服务器是否需要一段时间才能生成响应?如果它是 websocket 或 TCP 服务器,它是否有时会花费整整几分钟而不发送或接收任何流量?

    我的看法。我们有两个状态防火墙。第一个与 NLB。第二个是 ECS。

    ECS 相当于 kubernetes,它必须使用大量的 iptables 来分配流量和跟踪连接。 (作为引用,常规的 kubernetes 与 iptables 一起工作,而 iptables 有一堆 - 非常重要 - 设置,如连接持续时间和超时)。

    好消息是。如果在您打开 inbound 0.0.0.0:80 时它会中断, 但打开 inbound 0.0.0.0:80 时有效+ outbound 0.0.0.0:* .由于防火墙断开连接,这绝对是一个问题,很可能是由于丢失状态。 (或者它首先不是有状态的,但我很确定安全组是有状态的)。

    下降可能发生在两个防火墙中的任何一个上。我从来没有遇到过单个裸 NLB/ELB 的问题,所以我的猜测是问题出在 ECS 或两者的交互中。

    不幸的是,我们无法调试它,而且我们对它的内部工作方式知之甚少。您唯一的选择是与 AWS 支持部门合作进行调查。

    关于amazon-web-services - AWS 安全组连接跟踪在 ECS + Fargate 中运行的 ASP.NET Core 应用程序中的主体响应失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61646204/

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