Kubernetes使用流量管理平台Istio(五)

基于Istio的授权

每个envoy代理都运行一个授权引擎,该引擎在运行时授权请求。

  • 当请求到达代理时,授权引擎根据当前授权策略评估请求上下文,并返回授权结果ALLOW或DENY。
  • 授权策略支持ALLOW或DENY动作,拒绝策略优先于允许策略。
  • 如果将任何允许策略应用于工作负载,则默认情况下,不符合该策略的访问都将被禁止。
    在这里插入图片描述

授权策略

selector字段指定策略的目标
action字段指定允许还是拒绝请求
rules指定何时触发动作

  • rules下的from字段指定请求的来源
  • rules下的to字段指定请求的操作
  • rules下的when字段指定应用规则所需的条件
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: "httpbin-viewer"
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin
  action: ALLOW
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/bar/sa/sleep"]
    to:
    - operation:
        methods: ["GET"]
     when:
     - key: request.auth.claims
       values: ["https://accounts.google.com"]

策略目标

  • 可以通过metadata/namespace字段和可选的selector字段来指定策略的范围和目标
  • metadata/namespace告诉策略适用于哪个命名空间。如果将其值设置为根名称空间,则该策略将用于网格中的所有名称空间。
  • 根命名空间的值时可配置的,默认值为istio-system
  • 可以使用selector字段来进一步限制策略以应用于特定工作负载。
  • 如果未设置,则授权策略将应用于与授权策略相同的命名空间中的所有工作负载。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: "httpbin-viewer"
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin
  action: ALLOW
  rules:
  - to:
    - operation:
        methods: ["GET"]

值匹配

授权策略中的大多数字段都支持以下所有匹配模式:

  • 完全匹配: 即完整的字符串匹配
  • 前缀匹配: “*”结尾的字符串。例如, “test.abc.*”匹配“test.abc.com”、“test.abc.cn”
  • 后缀匹配: “*”开头的字符串。例如, “*.abc.com”匹配“test.abc.com”、“test1.abc.com”
  • 存在匹配: * 用于指定非空的任意内容,可以使用格式filedname:[“*”]指定必须存在的字段,这意味着该字段可以匹配任意内容,但是不能为空
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: "httpbin-viewer"
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin
  action: ALLOW
  rules:
  - to:
    - operation:
        paths: ["/test/*", "*/info"]

全部允许和默认全部拒绝授权策略

允许完全访问default命名空间中的所有工作负载

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-all
  namespace: default
spec:
  action: ALLOW
  rules:
  - {}

不允许任何对admin命令空间工作负载的访问

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-all
  namespace: admin
spec:
  {}

认证与未认证身份

如果要使工作负载可公开访问,则需要将source部分留空

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: "httpbin-viewer"
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin
      version: v1
  action: ALLOW
  rules:
  - to:
    - operation:
        methods: ["GET", "POST"]

将principal设置为"*" 代表仅允许经过认证的用户

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: "httpbin-viewer"
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin
      version: v1
  action: ALLOW
  rules:
  - from:
    - source:
      principals: ["*"]
  - to:
    - operation:
        methods: ["GET", "POST"]

在普通TCP协议上使用istio授权

如果您授权策略中对TCP工作负载使用了任何只适用于HTTP的字段,istio将会忽略它们

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: "httpbin-viewer"
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin
  action: ALLOW
  rules:
  - from:
    - source:
      principals: ["cluster.local/ns/default/sa/http-bin-v2"]
  - to:
    - operation:
        ports: ["8080"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡似水的人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值