共计 1938 个字符,预计需要花费 5 分钟才能阅读完成。
Istio 是一种具备流量治理,安全性,可察看性,可扩大的服务网格解决方案。那么 Istio 的受权模型是什么?其如何实现对网格中的工作负载进行访问控制的?
实现架构
在 Istio 中,Envoy 代理是“受权引擎”,因为它蕴含用于确定是否必须回绝或容许一个申请的所有策略。因为间接从代理进行决策,因而 Istio 中的受权速度十分快。代理应用 AuthorizationPolicy
自定义资源进行配置,当你将其利用于集群时,该资源将由 Istiod 获取并配置指标工作负载的服务代理。
AuthorizationPolicy
作用域
AuthorizationPolicy 的作用域能够是 mesh
, 命名空间
和工作负载
范畴的,具体取决于命名空间和 spec/selector 字段。
如果 AuthorizationPolicy 处于 istio root 命名空间(通常是 istio-system),并且没有 selector 字段,那么该策略的作用域是 mesh 级别,即该规定将在所有命名空间的网格范畴内强制执行。
如果 AuthorizationPolicy 处于非 istio root 命名空间,并且没有 selector 字段,那么该策略的作用域是命名空间级别,即该规定将对该命名空间内的所有工作负载起作用。
如果 AuthorizationPolicy 处于非 istio root 命名空间,并且蕴含 selector 字段,那么该策略的作用域是工作负载级别,即该规定将对该命名空间内的对应工作负载起作用。
动作
策略反对 ALLOW
和DENY
动作。
当 ALLOW
和DENY
动作同时用于工作负载时,将首先评估 DENY
策略。评估由以下规定确定:
- 如果有任何与申请匹配的 DENY 策略,回绝该申请。
- 如果没有针对工作负载的 ALLOW 策略,则容许该申请。
- 如果任何 ALLOW 策略与申请匹配,则容许该申请。
- 拒绝请求。
Rules
AuthorizationPolicy 蕴含规定列表,这些规定形容匹配的申请,而后依据操作容许或回绝哪些申请。规定由三局部组成:from
,to
和when
。
- from — 指定申请的起源。如果未设置,则容许任何起源。
- to — 指定申请的操作。如果未设置,则容许任何操作。
- when — 指定申请的其余条件列表。如果未设置,则容许任何条件。
示例
首先咱们从一个典型的 AuthorizationPolicy 加深对三大因素的了解。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: httpbin
namespace: foo
spec:
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/sleep"]
- source:
namespaces: ["test"]
to:
- operation:
methods: ["GET"]
paths: ["/info*"]
- operation:
methods: ["POST"]
paths: ["/data"]
when:
- key: request.auth.claims[iss]
values: ["https://accounts.google.com"]
该示例,httpbin 受权策略,位于 foo 命名空间,并且没有 selector,那么其是命名空间级别的受权策略,其作用于 foo 命名空间下所有工作负载。
该示例动作设置为 ”ALLOW”,目标是创立容许策略。
在示例中,source 是 principals
,但也能够是requestPrincipals
,namespaces
或ipBlocks
。
咱们也来看看 operation
字段:与 methods
一起应用的无效的匹配项是 hosts
,ports
,paths
及其排除对,例如notHosts
。
在大多数状况下,能够省略“when”字段,通常仅在简单的状况下应用,但能够应用反对的 Istio 属性列表来进一步自定义申请匹配。
综上所述,该策略容许满足上面条件的请求者:
- 服务账户为“cluster.local/ns/default/sa/sleep”
- 位于 test 命名空间
能够拜访满足上面条件的工作负载:
- 拜访前缀门路为“/info”的 Get 办法
- 拜访门路为“/data”的 POST 办法
当申请具备“https://accounts.google.com”签发的非法 JWT token 时。
总结
Istio 可用于应用 AuthorizationPolicy 自定义资源在服务网格中的工作负载之间施行访问控制。这种访问控制是由 Envoy Sidecar 代理在应用程序层施行的。它为用户提供了 Kubernetes 工作负载之间十分弱小,灵便但高效的受权形式。