Istio技术与实践6:Istio如何为服务提供安全防护能力

凡是产生连接关系,就必定带来安全问题,人类社会如此,服务网格世界,亦是如此。

今天,我们就来谈谈Istio第二主打功能---保护服务。

那么,便引出3个问题:

Istio凭什么保护服务?

Istio具体如何保护服务?

如何告诉Istio发挥保护能力?

1      Istio凭什么保护服务?

将单体应用程序分解为一个个服务,为大型软件系统的开发和维护带来了诸多好处,比如更好的灵活性、可伸缩性和可复用性。但这也带来了一些安全问题:

l  为了抵御中间人攻击,需要对流量进行加密

l  为了提供灵活的服务访问控制,需要 mTLS(双向的安全传输层协议)和细粒度的访问策略

l  要审计谁在什么时候做了什么,需要审计工具

Istio 尝试提供全面的安全解决方案来解决这3个问题。

 

Istio技术与实践6:Istio如何为服务提供安全防护能力

如上图所示,

Istio 安全的三大目标是:

l  默认安全(Security by default):应用程序代码和基础结构,无需更改。

l  深度防御(Defense in depth):与现有安全系统集成,提供多层防御。

l  零信任网络(Zero-trust network):在不受信任的网络上,构建安全解决方案。

为了实现这3个目标,Istio 安全功能提供了4大守护系统:

l  强大的身份(Identity)系统

l  健壮的策略(Policy)系统

l  认证,授权和审计(AAA:Authentication,Authorization,Accounting)系统,用于保护服务和数据

l  透明的 TLS 加密(Encryption)系统。

就保护对象而言,Istio 安全系统可以抵御来自内部或外部的威胁,这些威胁主要针对服务网格内的端点(Endpoints),通信(Communication),平台(Platform)和数据(Data)。

2      Istio具体如何保护服务?

在安全方面,Istio具备3个远大的目标,配备了4大守护系统,那么它到底是通过怎样的架构实现这个目标的呢,又通过什么样的安全基础设施,和kubernetes配合呢?

2.1      Istio安全架构

 

Istio技术与实践6:Istio如何为服务提供安全防护能力

如上图,与Istio的4大守护系统相对应,Istio 中涉及安全的组件有:

Pilot :将授权策略和安全命名信息分发给代理

Proxy :实现客户端和服务端之间的安全通信

Citadel :用于密钥和证书管理

Mixer :管理授权和审计

由此可见,Pilot不仅负责流量规则和策略的分发,还负责安全相关策略的下发,有点像皇上的贴身太监,负责宣读圣旨;Proxy有点像各州属的州官,负责奉天承运;Citadel有点像玉玺和虎符,负责鉴真去假;Mixer有点像三省六部,负责授权审计。

2.2      两个安全基本概念 2.2.1        Identity

身份(Identity)是几乎所有安全基础架构的基本概念。在服务和服务的通信开始前,双方必须用其身份信息交换凭证,以达到相互认证的目的。在客户端,根据安全命名(secure naming)信息,检查服务端的标识,以查看它是否是该服务的授权运行程序;在服务端,服务端可以根据授权策略(authorization policies)信息,确定客户端可以访问哪些数据,审计其在什么时间访问了什么,拒绝未授权客户端的访问。

在 Istio 身份模型中,Istio 使用一流的服务标识来确定服务的身份。这为表示人类用户,单个服务或一组服务提供了极大的灵活性和粒度。在没有此类身份的平台上,Istio 可以使用可以对服务实例进行分组的其他身份,例如服务名称。

不同平台上的 Istio 服务标识:

l  Kubernetes: Kubernetes 服务帐户

l  GKE/GCE: 可以使用 GCP 服务帐户

l  AWS: AWS IAM 用户/角色 帐户

l  On-premises (non-Kubernetes): 用户帐户,自定义服务帐户,服务名称,istio 服务帐户或 GCP 服务帐户。

做个类比,京东和天猫都有自己的一套非常成熟的服务账户系统,淘宝只需要复用天猫的账户系统即可,无需重新开发一套,这样我们就可以用天猫的账号,直接登录淘宝。而Istio也更倾向于复用业界一流的服务账户系统,如Kubernetes和AWS的,但也可以自定义服务账户,并按需复用Kubernetes的账户系统。

2.2.2  PKI 

Istio PKI(Public Key Infrastructure)建立在 Istio Citadel 之上,可为每个工作负载提供安全且强大的工作负载标识。Istio 使用 X.509 证书来携带 SPIFFE 格式的身份信息。PKI 还可以大规模自动化地进行密钥和证书轮换。

Istio 支持在 Kubernetes pod 和本地计算机上运行的服务。目前,Istio为每个方案使用不同的证书密钥配置机制,下面试举例Kubernetes方案的配置过程:

Citadel 监视 Kubernetes apiserver,为每个现有和新的服务帐户创建 SPIFFE 证书和密钥对。 Citadel 将证书和密钥对存储为 Kubernetes secrets。

创建 pod 时,Kubernetes 会根据其服务帐户通过 Kubernetes secret volume 将证书和密钥对挂载到 pod。

Citadel 监视每个证书的生命周期,并通过重写 Kubernetes secret 自动轮换证书。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjxgz.html