Istio 安全认证

Istio 安全认证架构

关联的组件

  • Citadel 用于密钥和证书管理
  • Sidecar周边代理实现客户端和服务器之间的安全通信
  • Pilot将授权策略和安全命名信息分发给代理
  • Mixer管理授权和审计

认证

Istio身份标识

不同平台身份标识

  • Kubernetes: Kubernetes 服务帐户
  • GKE/GCE: 可以使用 GCP 服务帐户
  • GCP: GCP 服务帐户
  • AWS: AWS IAM 用户/角色帐户
  • 本地(非 Kubernetes): 用户帐户、自定义服务帐户、服务名称、Istio 服务帐户或 GCP 服务帐户

可能需要关注的是 k8s serviceaccount,本地账户

Public Key Infrastructure (PKI)

Istio 使用 X.509 证书来携带 SPIFFE 格式的身份。PKI用于大规模自动化密钥和证书轮换。

流程如下:

  1. Citadel 创建一个 gRPC 服务来接受 CSR 请求。

  2. Envoy 通过 Envoy secret 发现服务(SDS)API 发送证书和密钥请求。

  3. 收到 SDS 请求后,节点代理会创建私钥和 CSR,并将 CSR 及其凭据发送给 Citadel 进行签名。

  4. Citadel 验证 CSR 中携带的凭证,并签署 CSR 以生成证书。

  5. 节点代理通过 Envoy SDS API 将从 Citadel 接收的证书和私钥发送给 Envoy。

  6. 上述 CSR 过程会定期重复进行证书和密钥轮换。

认证

Istio 提供两种类型的身份验证:

  • 传输身份验证,也称为服务间身份验证:验证建立连接的直接客户端。 Istio 提供双向 TLS 作为传输身份验证的完整堆栈解决方案。 您可以轻松打开此功能,而无需更改服务代码。这个解决方案:

    • 为每个服务提供强大的身份,表示其角色,以实现跨群集和云的互操作性。
    • 保护服务到服务通信和最终用户到服务的通信。
    • 提供密钥管理系统,以自动执行密钥和证书生成,分发和轮换。
  • 来源身份认证,也称为最终用户身份验证:验证作为最终用户或设备发出请求的原始客户端。Istio 通过 JSON Web Token(JWT)验证和 ORY Hydra、Keycloak、Auth0、Firebase Auth、Google Auth 和自定义身份验证来简化开发人员体验,并且轻松实现请求级别的身份验证。

双向TLS认证

Istio 隧道通过客户端和服务器端进行服务间(service-to-service)通信 Envoy 代理。为了使客户端通过双向 TLS 调用服务端,请遵循以下步骤:

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

4.授权后,服务器端 Envoy 通过本地 TCP 连接将流量转发到服务器服务。

宽容模式

允许 service 同时接受纯文本流量和双向 TLS 流量

安全命名

安全命名能够防止 HTTPS 流量受到一般性网络劫持,除了 DNS 欺骗外,它还可以保护 TCP 流量免受一般网络劫持。

认证策略

  • 策略存储范围
  • 目标选择器
  • 传输认证
  • 来源身份认证
  • 主认证绑定
  • 更新认证策略

授权

Istio 的授权功能为 Istio 网格中的工作负载提供网格级别、命名空间级别和工作负载级别的访问控制。它提供了:

  • 工作负载间和最终用户到工作负载的授权。
  • 一个简单的 API,它包括一个单独的并且很容易使用和维护的 AuthorizationPolicy CRD。
  • 灵活的语义,运维人员可以在 Istio 属性上自定义条件。
  • 高性能,因为 Istio 授权是在 Envoy 本地强制执行的。
  • 高兼容性,原生支持 HTTP、HTTPS 和 HTTP2,以及任意普通 TCP 协议。

隐式启用

无需显式启用 Istio 的授权功能,只需在工作负载上应用 AuthorizationPolicy 即可实现访问控制。如果没有对工作负载应用 AuthorizationPolicy,则不会执行访问控制,也就是说,将允许所有请求。

授权策略

  • 策略目标 策略范围(目标)由 metadata/namespace 和可选的 selector 确定
  • 值匹配 部分字段都支持完全匹配、前缀匹配、后缀匹配和存在匹配,但有一些例外情况(例如,when 部分下的key 字段,source 部分下的 ipBlocks 和 to 部分下的 ports 字段仅支持完全匹配)
  • 全部允许和全部拒绝
  • 自定义条件
  • 认证与未认证身份

TCP 协议上使用 Istio 授权

与 http 配置类似

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章