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 令牌
相关推荐
人生匆匆几秒前
linux ext4缩容home,扩容根目录
linux·运维·服务器
sakoba1 小时前
Docker学习其二(容器卷,Docker网络,Compose)
运维·网络·学习·docker·容器·基础
A了LONE2 小时前
cv弹窗,退款确认弹窗
java·服务器·前端
惜.己3 小时前
appium中urllib3.exceptions.LocationValueError: No host specified. 的错误解决办法
网络·appium
吉凶以情迁3 小时前
window服务相关问题探索 go语言服务开发探索调试
linux·服务器·开发语言·网络·golang
卍郝凝卍3 小时前
云上服务器常见的存储方式和类型
大数据·服务器·数据库
专注VB编程开发20年4 小时前
UDP受限广播地址255.255.255.255的通信机制详解
网络·udp·智能路由器
柏木乃一5 小时前
Linux初步认识与指令与权限
linux·运维·服务器·shell·权限
189228048615 小时前
NX947NX955美光固态闪存NX962NX966
大数据·服务器·网络·人工智能·科技