Istio_03_Istio安全

Security

Security: 透明的分布式安全层

  1. 认证方式: mTLS对等身份认证、JWT令牌请求认证
  2. 零信任的安全体系(所有流量请求都必须基于认证和最小访问权)

如: Istio的安全架构

image

  1. Citadel: CA管理密钥和证书
  2. Envoy: 代理安全通信和安全策略执行
  3. Pilot: 统一管理服务网格内各安全相关配置

PeerAuthentication

PeerAuthentication(对等身份认证): 基于证书的透明双向认证

  1. 本质: 由数据面代理完成的双向TLS的服务身份认证
  2. 通过认证的身份才可进行授权策略的条件匹配
  3. 服务未配置SA时, 使用NS默认的SA

如: Istio的身份认证流量

image

  1. Istio控制面实现SPIFFE规范
    • SPIFFE ID格式(服务标识): spiffe://<trust_domain>/ns/<namespace>/sa/<service_account>
    • <trust_domain>可通过控制面的环境变量配置
  2. Istio数据面使用X.509证书提供身份信息
    • 将每个数据面代理的SPIFFE ID注入X.509证书的subjectAltName扩展
    • 数据面代理生成私钥, 并通过CSR将其和SA发送到控制面进行签名

PA常用配置清单:

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: <String>
  namespace: <String>
spec:
  selector: <Object>                  # Label匹配管理的服务
  mtls: <Object>                      # 双向认证模式(UNSET、DISABLE、PERMISSIVE、STRICT)
    mode: <String>
  portLevelMtls: <Map[Integer]Object> # 定义每个端口的双向认证模式
  1. 若省略spec.selector, 则作用于PA所在NS/全局下的所有服务
  2. spec.mtls.mode设置为UNSET时, 会继承上一级范围内的配置
  3. 定义多个全局PA时, 则仅最早定义PA生效

RequestAuthentication

RequestAuthentication(请求身份认证): 基于JWT的透明请求认证

  1. 本质: 由数据面代理管理JWT令牌和请求身份认证
  2. JWT令牌可从指定请求头或请求参数中获取

如: JWT请求流程

image

  1. 数据面代理从控制面配置的认证策略中获取验证JWT令牌的公钥
    • 数据面代理拦截到流量时, 使用公钥验证JWT令牌决定是否转发

RA常用配置清单:

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: <String>
  namespace: <String>
spec:
  selector: <Object>         # Label匹配管理的服务
  jwtRules: <[]Object>       # JWT认证规则
  - issuer: <String>         # 校验JWT令牌的发行者
    audiences: <[]String>    # 校验JWT令牌需包含的aud信息
    jwksUri: <String>        # JWT公钥获取的URL地址
    jwks: <String>           # JWT公钥, 与jwksUri互斥
    fromHeaders: <[]Object>  # 从指定请求头中获取JWT令牌
    - name: <String>         # 请求头中的名称
      prefix: <String>       # 数据前缀匹配
    fromParams: <[]String> # 从指定请求参数中获取JWT令牌

AuthorizationPolicy

AuthorizationPolicy(授权策略): 基于认证身份配置授权策略

  1. 主要应用于L7, 依赖于对等身份认证/请求身份认证提供的身份标识
  2. 具有什么特征的主题在访问什么属性的对象时, 在满足什么条件时能做什么动作
  3. 服务可配置多个授权策略共同作用, 以细粒度的授权策略实现最小访问权限

如: Istio的授权优先级

image

  1. 授权动作优先级: CUSTOM > DENY > ALLOW
    • 只要有显式Deny, 则会直接结束并拒绝请求
  2. 当未设置授权策略时, 默认会允许所有服务都可访问

RA常用配置清单:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: <String>
  namespace: <String>
spec:
  selector: <Object> # Label匹配管理的服务
  rules: <[]Object>  # 匹配请求条件, 条件单独之间匹配
  - form: <[]Object> # 请求来源
    to: <[]Object>   # 请求目标
    when: <[]Object> # 请求条件
  action: <String>   # 满足匹配的动作(ALLOW、DENY、AUDIT、CUSTOM)
  provider: <Object> # 指定额外的授权配置, 仅能搭配CUSTOM动作
  1. spec.rules中省略的配置, 则代表匹配所有相关条件
  2. spec.actionAUDIT时, 需对应的插件支持才可完成审计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值