security - 如何在 AWS EKS 中使用 istio 网格启用自动 mTLS?
问题描述
我最近开始在 AWS EKS 集群中学习和实施 istio。为了为入口网关配置 TLS,我遵循了本指南,它只是要求您将 AWS ACM ARN id 作为注释添加到 istio-ingressgateway。所以,我既不需要使用证书来创建secret
也不需要使用 envoyproxy 的 SDS。
此设置在网关处终止 TLS,但我还想在网格中启用 mTLS 以保护服务-服务通信。通过遵循他们的文档,我创建了这个策略来在命名空间中强制执行 mTLS:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: xyz-mtls-policy
namespace: xyz-dev
spec:
mtls:
mode: STRICT
但即使在应用了这个之后,我看到一个服务能够使用http
.
所以我的问题是:如何使用 ACM 证书在我的命名空间中实现 mTLS?
解决方案
Istio 中的双向 TLS
Istio 提供双向 TLS 作为服务到服务身份验证的解决方案。
Istio 使用 sidecar 模式,这意味着每个应用程序容器都有一个 sidecar Envoy 代理容器在其旁边运行在同一个 pod 中。
当服务接收或发送网络流量时,流量总是首先通过 Envoy 代理。
当在两个服务之间启用 mTLS 时,客户端和服务器端 Envoy 代理在发送请求之前会验证彼此的身份。
如果验证成功,则客户端代理对流量进行加密,并将其发送到服务器端代理。
服务器端代理解密流量并将其在本地转发到实际的目标服务。
我在 istio 1.6.8 上,认为它默认启用 mTLS。
是的,从 istio 1.5 版本开始默认启用。有关于此的相关文档。
现在默认启用自动双向 TLS。Sidecar 之间的流量自动配置为双向 TLS。如果您担心加密开销,您可以通过在安装期间添加选项 -- set values.global.mtls.auto=false 来明确禁用此功能。有关更多详细信息,请参阅自动双向 TLS。
是否有任何明确的流程可以证明它确实在使用 mTLS?
我会说有3种方法
- 使用 pod 进行测试
您可以将其从严格更改为许可并从网格外部调用它,它应该可以工作。然后将其更改为严格并再次调用它,它应该不起作用。在这两种方式中,您都应该能够从网格内的 pod 调用它。
- 基亚利
如果您想在启用 mtls 时以视觉方式看到 kiali 应该有类似挂锁的东西,那么github 上就有关于它的问题。
- 普罗米修斯
banzaicloud中已经提到过,您在评论中提到,您可以检查连接安全策略指标标签。如果请求实际上已被加密,Istio 会将此标签设置为mutual_tls。
让我知道是否还有其他问题。
推荐阅读
- ssl - 对等证书无法验证或对等证书无效自签名 SSL
- influxdb - 由于数据库名称中的点,无法恢复数据
- facebook - 是否可以将一个 QR 码链接到多个 Messenger BOT
- tomcat - 在 Grails 应用程序中调用“/”时出现 Tomcat 403 错误
- swift - 从推送通知中获取值
- python - 烧瓶在容器内工作,但当我将其转发时却没有
- python - python和nodejs之间使用protobuf的序列化问题
- vba - 公式返回#Name?虽然它在 Excel VBA 中是正确的
- ios - UserDefaults 混淆了数据
- tensorflow - 速度是用 cpu 训练 tensorflow 模型的唯一问题吗