istio 认证:对等身份认证+服务请求认证

istio 中有两种不同的身份认证方式:

  1. 基于 mTLS 的对等身份认证 PeerAuthentication
  2. 基于 JWT(JSON Web Token)令牌的服务请求认证 RequestAuthentication

对等身份认证 PeerAuthentication

概念

  • 提供服务到服务的认证
  • 服务网格的主要场景就是服务到服务的认证
  • 基于双向 TLS 实现对等身份认证

证书获取流程

  1. Envoy 向 pilot-agent 发起一个 SDS (Secret Discovery Service) 请求,要求获取自己的证书和私钥
  2. Pilot-agent 生成私钥和 CSR(Certificates Signing Request,证书签名请求),向 Istiod 发送证书签发请求,请求中包含 CSR 和该 pod 中服务的身份信息
  3. Istiod 根据请求中服务的身份信息(Service Account)为其签发证书,将证书返回给 Pilot-agent
  4. Pilot-agent 将证书和私钥通过 SDS 接口返回给 Envoy

配置定义

复制代码
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: test
  namespace: test
spec:
  selector:
    matchLabels:
      app: test
  mtls:
    mode: STRICT
  portLevelMtls:
    3001:
      mode: STRICT
  • selector 选择器

    • istio 通过 selector 选择认证策略作用的负载

    • selector 可以为空,表示该认证策略配置给指定命名空间或服务网格全局

      selector:
      matchLabels:
      app: test

  • mtls 认证配置

    PeerAuthentication 核心配置,定义双向认证的模式,支持以下三种模式:

    • STRICT:典型用法,只接收双向 TLS 的流量

    • PERMISSIVE(istio 默认策略):既可以接收双向 TLS 流量,也可以接收飞加密流量

    • DISABLE:禁用双向 TLS

    • UNSET:继承上一级范围内配置的模式

      mtls:
      mode: STRICT

  • portLevelMtls

    给负载的端口配置认证策略(一个负载有多个端口,可以灵活配置端口粒度的认证策略)

    复制代码
    protLevelMtls:
      3001:
        mode: STRICT

作用范围

istio 中可以定义多种范围的认证策略,分别是全服务网格范围、命名空间范围、工作负载范围 ,默认全服务网格范围和命名空间范围的认证策略只能配置一个,如果多个则以最早定义的策略为准(工作负载同上)

  • 服务网格统一认证策略
    根命名空间:istio-system,selector 为空

    复制代码
    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: mesh_tls
      namespace: istio-system
    spec:
      mtls:
        mode: STRICT
  • 命名空间统一认证策略
    指定命名空间:test,selector

    复制代码
    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: test_tls
      namespace: test
    spec:
      mtls:
        mode: STRICT
  • 负载粒度认证策略

    复制代码
    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: test_tls
      namespace: test
    spec:
      selector:
        matchLabels:
          app: test
      mtls:
        mode: STRICT
  • 多粒度认证策略叠加
    对于一个工作负载同时只有一个认证策略生效 ,如果存在多个生效的策略,则优先级为:负载范围 > 命名空间范围 > 全服务网格范围
    举例:如果要使大多数负载启用双向 TLS,个别禁用双向 TLS,可以使用如下的多粒度叠加策略
    以下两个策略,第一个表示 test 命名空间所有负载启用双向 TLS,第二个表示 label 为 enable 的负载禁用双向 TLS。不用一个一个为需要双向 TLS 的负载添加认证策略

    复制代码
    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: enable_tls
      namespace: test
    spec:
      mtls:
        mode: STRICT
    ---
    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: disable_tls
      namespace: test
    spec:
      selector:
        matchLabels:
          app: enable
      mtls:
        mode: STRICT
  • 端口粒度认证策略
    以下示例表示只在3001端口定义 STRICT 模式

    复制代码
    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: port_tls
      namespace: test
    spec:
      selector:
        matchLabel:
          app: port
      protLevelMtls:
        3001:
          mode: STRICT

服务请求认证 RequestAuthentication

  • 提供对最终用户的认证,用于认证请求的最终用户或者设备
  • 在 istio 中一般通过 JWT 方式实现请求级别的验证

istio JWT 的认证流程

  1. 客户端连接授权/认证服务,提供账号密码
  2. 服务端验证账号密码,生成 JWT 令牌,使用私钥签名,向客户端返回生成的 JWT 令牌
相关推荐
这儿有一堆花14 分钟前
Nginx服务器集群:横向扩展与集群解决方案
运维·服务器·nginx
刘孬孬沉迷学习23 分钟前
5G标准学习笔记15 --CSI-RS测量
网络·笔记·学习·5g·信息与通信·信号处理
敲上瘾1 小时前
传输层协议UDP原理
linux·c语言·网络·网络协议·udp
egoist20231 小时前
【Linux仓库】命令行参数与环境变量【进程·伍】
linux·运维·服务器·环境变量·命令行参数·内建命令
Fireworkitte2 小时前
Linux 中替换sed
linux·运维·服务器
gooxi_hui2 小时前
性能狂飙 Gooxi 8卡5090服务器重新定义高密度算力
运维·服务器
weixin_420571872 小时前
Windos服务器升级MySQL版本
运维·服务器·mysql
秃了也弱了。2 小时前
两台电脑通过网线直连形成局域网,共享一台wifi网络实现上网
网络·电脑
誰能久伴不乏2 小时前
深入解析 TCP 连接状态与进程挂起、恢复与关闭
服务器·网络·tcp/ip
Dreamboat¿2 小时前
小皮面板搭建pikachu
运维·服务器·网络