kubernetes - Istio:HTTP 授权:验证用户是资源所有者
问题描述
研究使用 Istio 处理基于 Kubernetes 微服务架构构建的应用程序的授权。
我们希望完成的一件事是通过使用 Istio 授权来解耦服务的授权。
我们的 API 网关(Kong)将处理 JWT 令牌的验证/解析,并将任何必需的属性(用户名、组、角色等)作为标题传递,例如 x-username: homer@somewhere.com(从服务中提取)
我们想要完成的是基于角色等进行验证,我们还希望确保 x-username 也是资源的所有者,例如,如果他们正在访问:
/user/{userID}/resource
这意味着如果 userId 与 x-username 标头的值匹配,我们可以继续为请求提供服务,否则我们将发送 401 等
有没有办法将其配置为 Istio 授权的一部分?
在此先感谢您的时间
解决方案
您正在寻找的是基于属性的访问控制 ( abac )。查看授权引擎,例如直接插入 Kong 并提供该级别访问控制(所有权检查)的 Axiomatics。
您还可以选择使用基于 Istio授权模板的适配器从 Istio 调用 Axiomatics 。
Axiomatics 中的策略是使用 XACML 或ALFA编写的,它们是 ABAC / 细粒度授权的 2 个 OASIS 标准。
您可以轻松地按照以下方式编写条件:
rule checkOwner{
deny
condition not(owner==user.uid)
}
顺便说一句,您可能想要发回 403 而不是 401。后者指的是身份验证失败。
推荐阅读
- azure-cosmosdb - Azure DataFactory - 我们可以在摄取之前订购 CopyData 源吗
- python - 如何在python中对对象列求和
- database - 数据库表可以在列的函数上建立索引吗?
- r - 需要分组/排序,然后在同一列中进行操作
- c++ - add_compile_options 和 add_link_options 之间的区别也标记了每个选项支持
- java - 如何反映 Point2D 对象的角度
- sql - 将多条记录插入 SQL 表时,它不遵循顺序
- python - 为什么我的 python 类不会从另一个类继承?
- r - 在现有散点图中添加不同的线
- python - 如何使用 ftp.storbinary 上传文件?