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 令牌
相关推荐
切糕师学AI1 分钟前
GDB: GNU 调试器
服务器·gnu
深圳南柯电子16 分钟前
深圳南柯电子|EMC电磁兼容测试系统:5G时代应对频段的干扰挑战
网络·人工智能·互联网·实验室·emc
星哥说事20 分钟前
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台
运维·服务器·docker
w陆压22 分钟前
2.TCP三次握手、四次挥手
网络·网络协议·计网知识点
知乎的哥廷根数学学派30 分钟前
基于高阶统计量引导的小波自适应块阈值地震信号降噪算法(MATLAB)
网络·人工智能·pytorch·深度学习·算法·机器学习·matlab
DeepFlow 零侵扰全栈可观测31 分钟前
DeepFlow 实践:利用 eBPF 实现覆盖从网关到数据库的全栈分布式追踪
网络·分布式·云原生·云计算
松涛和鸣34 分钟前
51、51单片机
c语言·网络·单片机·嵌入式硬件·tcp/ip·51单片机
CHENKONG_CK44 分钟前
晨控CK-FR09EIP与汇川H5U系列PLC配置EtherNet/IP通讯连接手册
网络·网络协议·自动化·rfid
上海云盾安全满满1 小时前
面对T级大流量攻击,业务如何确保稳定可用
网络
古城小栈1 小时前
Rust 异步、并发 一文全解
网络·rust