Istio 中的出口流量安全控制,第 2 部分

使用 Istio 出口流量控制来防止涉及出口流量的攻击。

2019 年 7 月 10 日 | 作者:Vadim Eisenberg - IBM

欢迎来到我们关于 Istio 中出口流量安全控制的新系列的第 2 部分。在本系列的第一部分中,我介绍了涉及出口流量的攻击以及我们为出口流量安全控制系统收集的需求。在本期中,我将描述 Istio 安全控制出口流量的方式,并展示 Istio 如何帮助您防止攻击。

Istio 中的出口流量安全控制

要在 Istio 中实现出口流量的安全控制,您必须通过出口网关将 TLS 流量定向到外部服务。或者,您可以通过出口网关定向 HTTP 流量,并让出口网关执行 TLS 来源

两种方案都有各自的优缺点,您应根据自己的情况在它们之间进行选择。选择主要取决于您的应用程序是否可以发送未加密的 HTTP 请求以及您组织的安全策略是否允许发送未加密的 HTTP 请求。例如,如果您的应用程序使用某些加密流量而无法取消加密的客户端库,则无法使用发送未加密 HTTP 流量的选项。如果您的组织的安全策略不允许在 Pod 内(在 Pod 外部,流量由 Istio 加密)发送未加密的 HTTP 请求,则情况也是如此。

如果应用程序发送 HTTP 请求并且出口网关执行 TLS 来源,您可以监控 HTTP 信息,例如 HTTP 方法、标头和 URL 路径。您还可以根据上述 HTTP 信息定义策略。如果应用程序执行 TLS 来源,您可以监控 SNI 和源 Pod 的 TLS 流量的服务帐户,并根据 SNI 和服务帐户定义策略。

您必须确保来自您集群到外部的流量不能绕过出口网关。Istio 无法为您执行此操作,因此您必须应用一些其他安全机制,例如Kubernetes 网络策略或 L3 防火墙。查看Kubernetes 网络策略配置的示例。根据纵深防御的概念,您为同一目标应用的安全机制越多,效果越好。

您还必须确保 Istio 控制平面和出口网关不会被破坏。虽然您的集群中可能拥有数百或数千个应用程序 Pod,但只有十几個 Istio 控制平面 Pod 和网关。您可以并且应该专注于保护控制平面 Pod 和网关,因为这样做很简单(只需要保护少量 Pod)并且对集群的安全至关重要。如果攻击者破坏了控制平面或出口网关,他们可能会违反任何策略。

您可能拥有多种工具来保护控制平面 Pod,具体取决于您的环境。合理的安全措施是

将出口流量定向到出口网关并应用其他安全机制后,您可以安全地监控和强制执行流量的安全策略。

下图显示了 Istio 的安全架构,并添加了 L3 防火墙,它是其他安全机制的一部分,应该在 Istio 之外提供。

Istio Security Architecture with Egress Gateway and L3 Firewall
带有出口网关和 L3 防火墙的 Istio 安全架构

您可以轻松地配置 L3 防火墙,只允许通过 Istio 入口网关传入流量,只允许通过 Istio 出口网关传出流量。网关的 Istio 代理会像网格中的所有其他代理一样强制执行策略并报告遥测数据。

现在,让我们检查一下可能的攻击,让我向您展示 Istio 中的出口流量安全控制如何防止它们。

防止可能的攻击

考虑以下出口流量的安全策略

假设攻击者具有以下目标

现在假设攻击者设法入侵了应用程序A的某个 Pod,并尝试使用被破坏的 Pod 执行禁止的访问。攻击者可能会尝试他们的运气并以直接的方式访问外部服务。您将按照以下步骤应对直接尝试

在无法以直接方式实现其目标后,恶意行为者可能会诉诸高级攻击

据我们所知,所有禁止的访问都将被阻止,或者至少将被监控并可以在以后被阻止。如果您看到其他涉及出口流量的攻击或当前设计中的安全漏洞,我们很乐意听取您的意见.

总结

希望我能说服您 Istio 是防止涉及出口流量的攻击的有效工具。在本系列的下一部分中,我将比较 Istio 中的出口流量安全控制与其他解决方案,例如Kubernetes 网络策略和传统的出口代理/防火墙。

分享此帖子