Istio安全性

作者:iyacontrol
出处:
Istio Security提供了全面的安全解决方案 。
Istio安全性文章插图
Istio安全功能提供强大的身份 , 强大的策略 , 透明的TLS加密以及身份验证 , 授权和审核(AAA)工具 , 以保护您的服务和数据 。Istio安全性的目标是:

  • 默认情况下的安全性:无需更改应用程序代码和基础结构
  • 深度防御:与现有安全系统集成以提供多层防御
  • 零信任网络:在不受信任的网络上构建安全解决方案
架构Istio中的安全涉及多个组件:
  • 证书颁发机构(CA) , 用于密钥和证书管理
  • 配置API服务器分发给代理:
    • 认证策略
    • 授权策略
    • 安全命名信息
  • Sidecar和边界代理充当策略执行点(PEP) , 以保护客户端和服务器之间的通信 。
  • 一组Envoy代理扩展 , 用于管理遥测和审计
控制平面处理来自API服务器的配置 , 并在数据平面中配置PEP 。PEP是使用Envoy实现的 。 下图显示了体系结构 。
Istio安全性文章插图
身份身份是任何安全基础结构的基本概念 。 在工作负载到工作负载的通信开始时 , 双方必须交换凭据与其身份信息以进行相互认证 。 在客户端 , 将根据安全命名信息检查服务器的身份 , 以查看其是否是工作负载的授权运行者 。 在服务器端 , 服务器可以根据授权策略确定客户端可以访问哪些信息 , 审核谁在什么时间访问了哪些信息 , 根据他们使用的工作负载向客户端收费 , 并拒绝任何未能支付账单的客户端访问工作量 。
Istio身份模型使用一等的 service identity 来确定请求来源的身份 。 该模型为服务标识提供了极大的灵活性和粒度 , 以代表用户 , 单个工作负荷或一组工作负荷 。 在没有服务身份的平台上 , Istio可以使用其他可以对工作负载实例进行分组的身份 , 例如服务名称 。
以下列表显示了可以在不同平台上使用的服务身份的示例:
  • Kubernetes:Kubernetes服务帐户
  • GKE / GCE:GCP服务帐户
  • GCP:GCP服务帐户
  • AWS:AWS IAM用户/角色帐户
  • 本地(非Kubernetes)用户帐户 , 自定义服务帐户 , 服务名称 , Istio服务帐户或GCP服务帐户 。 自定义服务帐户是指现有服务帐户 , 就像客户的身份目录管理的身份一样 。
证书管理Istio使用X.509证书为每个工作负载安全地设置强身份 。 与每个Envoy代理一起运行的Istio-agent与istiod一起工作 , 以自动实现密钥和证书的大规模轮换 。 下图显示了身份提供流程 。
Istio安全性文章插图
Istio使用以下流程通过 secret discovery service (SDS) 设置身份:
  1. Istiod提供了一个gRPC服务来接受证书签名请求(CSR) 。
  2. Envoy通过Envoy SDS API发送证书和密钥请求 。
  3. 收到SDS请求后 , Istio agent会先创建私钥和CSR , 然后再将CSR及其凭据发送给isidod进行签名 。
  4. CA验证CSR中携带的凭据 , 并对CSR签名以生成证书 。
  5. Istio agent通过Envoy SDS API将来自istiod的证书和私钥发送给Envoy 。
  6. 对于证书和密钥轮换 , 上述CSR过程会定期执行 。
认证Istio提供了两种认证类型:
  • 对等身份验证 : 用于服务到服务的身份验证 , 以验证建立连接的客户端 。Istio提供双向TLS作为用于传输身份验证的完整堆栈解决方案 , 无需更改服务代码即可启用它 。该解决方案为:
    • 为每个服务提供一个强大的标识 , 以表示其角色 , 以实现跨集群和云的互操作性 。
    • 使服务到服务的通信安全 。
    • 提供密钥管理系统以自动执行密钥和证书的生成 , 分发和轮换 。
  • 请求认证 : 用于最终用户身份验证 , 以验证附加到请求的凭据 。Istio使用JSON Web令牌(JWT)验证启用请求级身份验证 , 可以使用自定义身份验证程序或任何OpenID Connect实现程序 ,例如:
    • ORY Hydra
    • Keycloak
    • Auth0
    • Firebase Auth
    • Google Auth
在所有情况下 , Istio都会通过自定义的Kubernetes API将身份验证策略存储在 Istio config store 中 。Istiod会为每个代理保持最新状态 , 并在适当的地方提供密钥 。 此外 , Istio支持许可模式下的身份验证 , 以帮助您了解策略更改在实施之前如何影响您的安全状况 。
mTLS认证Istio通过客户端和服务器端PEP(Envoy代理实现)建立服务到服务的通信通道 。 当工作负载使用双向TLS身份验证将请求发送到另一个工作负载时 , 该请求的处理方式如下: