Istio:HTTP 授权:验证用户是资源所有者
Posted
技术标签:
【中文标题】Istio:HTTP 授权:验证用户是资源所有者【英文标题】:Istio: HTTP Authorization: verify user is the resource owner 【发布时间】:2019-11-02 08:19:40 【问题描述】:研究使用 Istio 为基于 Kubernetes 微服务架构构建的应用程序处理授权。
我们希望完成的一件事是通过利用 Istio 授权来解耦服务的授权。
我们的 API 网关 (Kong) 将处理 JWT 令牌的验证/解析,并将任何必需的属性(用户名、组、角色等)作为标头传递,例如x-username:homer@somewhere.com(从服务中提取)
我们想要完成的是除了基于角色等进行验证之外,我们还希望确保 x-username 也是资源的所有者,例如如果他们正在访问:
/user/userID/resource
这意味着如果 userId 与 x-username 标头的值匹配,我们可以继续为请求提供服务,否则我们将发送 401 等
有没有办法将此配置为 Istio 授权的一部分?
提前感谢您的宝贵时间
【问题讨论】:
【参考方案1】:您正在寻找的是基于属性的访问控制 (abac)。查看授权引擎,例如直接插入 Kong 并提供该级别访问控制(所有权检查)的公理。
Kong授权handler on GitHub
关于集成的技术webcast
您还可以选择使用基于 Istio 的 authorization template 的适配器从 Istio 调用 Axiomatics。
Axiomatics 中的策略是使用 XACML 或 ALFA 编写的,它们是 ABAC/细粒度授权的 2 个 OASIS 标准。
你可以很容易地写一个条件:
rule checkOwner
deny
condition not(owner==user.uid)
顺便说一句,您可能想要发回 403 而不是 401。后者指的是身份验证失败。
【讨论】:
以上是关于Istio:HTTP 授权:验证用户是资源所有者的主要内容,如果未能解决你的问题,请参考以下文章