解析Istio访问控制

微信扫一扫,分享到朋友圈

解析Istio访问控制

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字段,那么该策略的作用域是工作负载级别,即该规则将对该命名空间内的对应工作负载起作用。

动作

策略支持 ALLOWDENY 动作。

ALLOWDENY 动作同时用于工作负载时,将首先评估 DENY 策略。评估由以下规则确定:

  • 如果有任何与请求匹配的DENY策略,拒绝该请求。
  • 如果没有针对工作负载的ALLOW策略,则允许该请求。
  • 如果任何ALLOW策略与请求匹配,则允许该请求。
  • 拒绝请求。

Rules

AuthorizationPolicy包含规则列表,这些规则描述匹配的请求,然后根据操作允许或拒绝哪些请求。规则由三部分组成: fromtowhen

  • 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 ,但也可以是 requestPrincipalsnamespacesipBlocks

我们也来看看 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工作负载之间非常强大,灵活但高效的授权方式。

微信扫一扫,分享到朋友圈

解析Istio访问控制

做Java开发7年,今年9个月时间圆梦饿了么P7

上一篇

MySQL逻辑数据恢复体系的设计

下一篇

你也可能喜欢

解析Istio访问控制

长按储存图像,分享给朋友