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 令牌
相关推荐
开开心心就好35 分钟前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节
updayday8541 小时前
客户附件不该发往旧邮箱,如何在发送前拦截 - Ping64 邮件安全管控
大数据·网络·数据库·安全·智能路由器
其实防守也摸鱼1 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
小茬粥1 小时前
QEMU 宿主机网卡实例发现与采集脚本(标准 Linux / Proxmox VE 适配版)COLT_CMDB_QEMU_IFACE.sh
网络
见合八方1 小时前
借助半导体光放大器实现功率预算超31dB的112.5Gbit/s长距无源光网络
网络·5g·soa·光通信·激光雷达·半导体光放大器
程序猿老A2 小时前
轻量应用服务器总是CPU 100%怎么办?
服务器
夜雪一千2 小时前
锐捷天蝎路由器WiFi优化设置教程:解决邻居WiFi干扰、远距离卡顿
网络·智能路由器
2301_780789662 小时前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
余额瞒着我当琳2 小时前
Linux初识:Linux的历史,计算机的发展脉络,发行版本,选购云服务器,安装Xshell,第一次连接,基础命令指南
linux·运维·服务器
lazy H3 小时前
【计算机网络】第 15 篇:Java BIO、NIO 与高并发网络通信——从 Socket 理解 I/O 模型
网络·后端·tcp/ip·计算机网络·nio·408