首页 > 解决方案 > Istio:HTTP 授权:验证用户是资源所有者

问题描述

研究使用 Istio 处理基于 Kubernetes 微服务架构构建的应用程序的授权。

我们希望完成的一件事是通过使用 Istio 授权来解耦服务的授权。

我们的 API 网关(Kong)将处理 JWT 令牌的验证/解析,并将任何必需的属性(用户名、组、角色等)作为标题传递,例如 x-username: homer@somewhere.com(从服务中提取)

我们想要完成的是基于角色等进行验证,我们还希望确保 x-username 也是资源的所有者,例如,如果他们正在访问:

/user/{userID}/resource

这意味着如果 userId 与 x-username 标头的值匹配,我们可以继续为请求提供服务,否则我们将发送 401 等

有没有办法将其配置为 Istio 授权的一部分?

在此先感谢您的时间

标签: kubernetesjwtauthorizationmicroservicesistio

解决方案


您正在寻找的是基于属性的访问控制 ( )。查看授权引擎,例如直接插入 Kong 并提供该级别访问控制(所有权检查)的 Axiomatics。

您还可以选择使用基于 Istio授权模板的适配器从 Istio 调用 Axiomatics 。

Axiomatics 中的策略是使用 XACML 或ALFA编写的,它们是 ABAC / 细粒度授权的 2 个 OASIS 标准。

您可以轻松地按照以下方式编写条件:

rule checkOwner{
    deny
    condition not(owner==user.uid)
}

顺便说一句,您可能想要发回 403 而不是 401。后者指的是身份验证失败。


推荐阅读