跳转至

Istio安全特性

参考文档

https://istio.io/latest/zh/docs/concepts/security/

Istio安全目标

默认安全:应用程序代码和基础设施无需更改

深度防御:与现有安全系统集成以提供多层防御

零信任网络:在不受信任的网络上构建安全解决方案

架构

总揽

Istio 中的安全性涉及多个组件: - 用于密钥和证书管理的证书颁发机构(CA) - 配置 API 服务器分发给代理: - 认证策略 - 授权策略 - 安全命名信息 - Sidecar 和边缘代理作为 Policy Enforcement Points(PEPs) 以保护客户端和服务器之间的通信安全 - 一组 Envoy 代理扩展,用于管理遥测和审计

公钥基础设施(PKI)

Istio PKI 使用 X.509 证书为每个工作负载都提供强大的身份标识。伴随着每个 Envoy 代理的 istio-agent 和 istiod 一起协作来大规模进行自动化密钥和证书轮换。下图显示了这个机制的运行流程

通过 secret discovery service(SDS)来实现的,具体流程如下:

  1. istiod 提供 gRPC 服务以接受证书签名请求(CSRs)。
  2. 当工作负载启动时,Envoy 通过秘密发现服务(SDS)API 向同容器内的 istio-agent 发送证书和密钥请求。
  3. 在收到 SDS 请求后,istio-agent 创建私钥和 CSR,然后将 CSR 及其凭据发送到 istiod CA 进行签名。
  4. istiod CA 验证 CSR 中携带的凭据,成功验证后签署 CSR 以生成证书。
  5. Istio-agent 通过 Envoy SDS API 将私钥和从 Istio CA 收到的证书发送给 Envoy。
  6. Istio-agent 会监工作负载证书的有效期。上述 CSR 过程会周期性地重复,以处理证书和密钥轮换。

特性

认证

Istio 提供两种类型的认证: - Peer authentication:用于服务到服务的认证,以验证进行连接的客户端。Istio 提供双向 TLS 作为传输认证的全栈解决方案,无需更改服务代码就可以启用它。这个解决方案: - 为每个服务提供强大的身份,表示其角色,以实现跨群集和云的互操作性。 - 保护服务到服务的通信。 - 提供密钥管理系统,以自动进行密钥和证书的生成,分发和轮换。

  • Request authentication:用于最终用户认证,以验证附加到请求的凭据。 Istio 使用 JSON Web Token(JWT)验证启用请求级认证,并使用自定义认证实现或任何 OpenID Connect 的认证实现(例如下面列举的)来简化的开发人员体验。
    • ORY Hydra
    • Keycloak
    • Auth0
    • Firebase Auth
    • Google Auth

双向TLS认证流程

  1. Istio 将出站流量从客户端重新路由到客户端的本地 sidecar Envoy。
  2. 客户端 Envoy 与服务器端 Envoy 开始双向 TLS 握手。在握手期间,客户端 Envoy 还做了安全命名检查,以验证服务器证书中显示的服务帐户是否被授权运行目标服务。
  3. 客户端 Envoy 和服务器端 Envoy 建立了一个双向的 TLS 连接,Istio 将流量从客户端 Envoy 转发到服务器端 Envoy。
  4. 授权后,服务器端 Envoy 通过本地 TCP 连接将流量转发到服务器服务。

宽容模式

启用宽容模式后,服务可以同时接受纯文本和双向 TLS 流量。这个模式为入门提供了极大的灵活性。服务中安装的 Istio sidecar 立即接受双向 TLS 流量而不会打断现有的纯文本流量。因此,运维人员可以逐步安装和配置客户端 Istio sidecar 发送双向 TLS 流量。一旦客户端配置完成,运维人员便可以将服务端配置为仅 TLS 模式

认证示例

在foo命名空间中与带有 app:reviews 标签的工作负载的传输层认证,必须使用双向 TLS:

apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "example-peer-policy"
  namespace: "foo"
spec:
  selector:
    matchLabels:
      app: reviews
  mtls:
    mode: STRICT

鉴权

架构

鉴权流程

对于未应用授权策略的工作负载,Istio允许所有请求。

授权策略支持允许、拒绝和自定义操作。可以根据需要应用多个策略,每个策略具有不同的操作,以确保对工作负载的访问。 Istio按以下顺序检查层中的匹配策略:自定义、拒绝,然后允许。对于每种类型的操作,Istio首先检查是否存在应用了操作的策略,然后检查请求是否与策略的规范匹配。如果请求与其中一层中的策略不匹配,则检查将继续到下一层。

鉴权示例

应用该策略的目标是:foo命名空间下的匹配标签app: httpbinversion: v1的工作负载

策略拒绝所有不是来源于foo命名空间的请求

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: httpbin-deny
 namespace: foo
spec:
 selector:
   matchLabels:
     app: httpbin
     version: v1
 action: DENY
 rules:
 - from:
   - source:
       notNamespaces: ["foo"]