微服务带来灵活性、可伸缩性和复用性的同时,还需要考虑以下安全问题:
- 使用流量加密组织中间人攻击
- 提供灵活的访问控制,比如双向TLS加密和细粒度的访问策略
- 使用审计工具检索谁在什么时间做了什么操作
Istio可以处理内外部的威胁,给数据、端点、通信和平台提供安全性。
Istio提供了强身份认证、权限策略、传输TLS加密以及认证、授权和审计(AAA)工具。
上层架构
Istio的安全性涉及多个部分:
- 用于密钥和证书管理的证书颁发机构(CA)
- 配置API服务器分发给代理
- 认证策略
- 鉴权策略
- 安全命名信息
- 作为策略执行点的僚机和参数代理,用于客户端和服务端之间的安全通信
- 一组用于管理遥测和审计的代理扩展
Istio中的身份
在两个工作负载通信前必须先交换包含身份信息的凭证用于双向认证。客户端要验证服务器的安全命名信息,判断对方是否有工作负载授权运行。在服务端,服务器必须验证客户端有没有权限访问,以及根据审计策略,记录谁在什么时间访问,根据客户端使用的工作负载向其收费,并拒绝任何未能支付帐单的客户端访问工作负载。
Istio身份模型使用第一类服务身份判断请求的原始身份。可以更灵活,细粒度地表示用户、工作负载或一组负载。
身份和凭证管理
Istio使用X.509提供强身份识别。Istio代理,和Envoy一起运行,配合Istiod一起完成自动化大规模的密钥和证书轮换。
- istiod 提供一个gRPC服务接受凭证注册请求/certificate signing requests (CSRs)。
- 最开始,istio代理生成私钥,把私钥和CSR一起发送给istiod,请求注册。
- istiod中的CA验证CSR中携带的凭证,成功后,注册CSR,生成凭证。
- 工作服在启动后,Envoy通过密钥发现服务(SDS)接口请求同一个容器中的Istio代理,获取凭证和密钥。
- istio代理把从istiod收到的私钥和凭证通过Envoy SDS API发给Envoy。
- istio代理监控工作负载凭证的过期时间,定期重复上述过程。
认证
istio有两种认证类型:
- peer authentication:同行认证用于服务见通信时认证发起连接的客户端。使用双向TLS加密作为全栈解决方案。
- request authentication:校验请求中携带的凭证认证终端用户。Istio支持JWT认证,以及一些OIDC供应商的定制话认证。
在所有情况下,Istio都通过自定义Kubernetes API将身份验证策略存储在Istio配置存储中。Istiod为每个代理保留最新的密钥。此外,Istio支持在许可模式下进行身份验证,以帮助您在强制执行之