请选择 进入手机版 | 继续访问电脑版

istio调研--RBAC

所在版块: 服务网格 2020-04-17 17:07 [复制链接] 查看: 302|回复: 1
本帖最后由 douyanwei 于 2020-4-17 18:45 编辑

istio调研--RBAC

v1alpha1 RBAC Policy被v1beta1 Authorization Policy弃用。v1beta1策略不向后兼容RBAC,需要一次转换。配置资源ClusterRbacConfig、ServiceRole和ServiceRoleBinding将从Istio 1.6起不再受支持。

弃用原因:
  • 简化api, 提升用户体验.
  • 在不增加复杂性的同时支持更多用例(允许该策略应用于入口/出口网关,以加强对流量入口的访问控制),
  • 与Istio配置模型保持一致,以更好地明确策略目标。配置模型提供了统一的配置层次结构、分辨率和目标选择
  • 减少CRD资源创建,更易维护和管理
  • 服务级别的访问控制容易导致配置混乱, v1beta1授权策略是工作负载级别的访问控制.

对比
v1beta1 AuthorizationPolicy的selector替代了ClusterRbacConfig和ServiceRole中的services字段提供的功能, rule替换ServiceRole其他字段和ServiceRoleBinding.

Feature
Feature
v1alpha1 RBAC policy
v1beta1 Authorization Policy
API 稳定性
alpha: 不向后兼容
beta: 向后兼容
CRDs数量
三个: ClusterRbacConfig, ServiceRole and ServiceRoleBinding
一个: AuthorizationPolicy
策略目标
service
workload
默认拒绝行为
通过配置ClusterRbacConfig显式启用
使用AuthorizationPolicy隐式启用
Ingress/Egress网关支持
不支持
支持
策略中的“*”值
匹配所有内容(空的和非空的)
只匹配非空内容
详细对比见附件

迁移
为了帮助简化迁移, "istioctl experimental authz"命令可以自动将v1alpha1策略转换为v1beta1策略(命令是实验性的,谨慎使用).

RBAC介绍
Istio提供了RBAC策略来使用三种配置资源对服务进行访问控制:ClusterRbacConfig、ServiceRole和ServiceRoleBinding。通过这个API,用户能够在网格级、名称空间级和服务级强制控制访问。与其他RBAC策略一样,Istio RBAC使用相同的角色和绑定概念来为身份授予权限。

ServiceRole
ServiceRole规范包含一组rules(权限)。每个rules都有以下标准字段:
  • services:服务的列表。
  • methods:是一个HTTP的方法列表。设置 \* 表示包含所有HTTP方法。TCP服务不支持该字段(设置后会被忽略)。gRPC服务只允许POST方法(其他方法会被拒绝)。
  • paths:HTTP路径或gRPC方法。注意,gRPC方法应该以“/packageName.serviceName/methodName”的形式呈现,区分大小写.
除了标准字段外,还可以在constraints(约束)字段中使用自定义键.

下面的ServiceRole对象 "product-viewer", 对 "products.svc.cluster.local"服务的"v1"和"v2"版本有读(GET和HEAD)访问权限."path"没有指定, 则匹配服务中的所有路径.
  1. <font color="#000000">apiVersion: "rbac.istio.io/v1alpha1"
  2. kind: ServiceRole
  3. metadata:
  4.   name: products-viewer
  5.   namespace: default
  6. spec:
  7.   rules:
  8.   - services: ["products.svc.cluster.local"]
  9.     methods: ["GET", "HEAD"]
  10.     constraints:
  11.     - key: "destination.labels[version]"
  12.       values: ["v1", "v2"]</font>
复制代码

ServiceRoleBinding
ServiceRoleBinding规范包括两部分:
  • roleRef: 引用同一名称空间中的ServiceRole对象
  • subjects: 分配角色的列表。除了user字段,还可以在properties字段中使用自定义键.

下面的ServiceRoleBinding对象"test-binding-products", 将subjects(User: "alice@yahoo.com"和source.namespace: "abc")绑定到ServiceRole "product-viewer"
  1. <font color="#000000">apiVersion: "rbac.istio.io/v1alpha1"
  2. kind: ServiceRoleBinding
  3. metadata:
  4.   name: test-binding-products
  5.   namespace: default
  6. spec:
  7.   subjects:
  8.   - user: alice@yahoo.com
  9.   - properties:
  10.       source.namespace: "abc"
  11.   roleRef:
  12.     kind: ServiceRole
  13.     name: "products-viewer"</font>
复制代码

RbacConfig
RbacConfig实现了ClusterRbacConfig自定义资源。ClusterRbacConfig自定义资源用于控制Istio RBAC行为, 是单例的,即网格全局中只能创建一个ClusterRbacConfig,namespace与其他Istio组件相同,通常是Istio-system。

下面的ClusterRbacConfig资源Istio-RBAC-config,为default namespace中的所有服务启用了Istio RBAC。
  1. <font color="#000000">apiVersion: "rbac.istio.io/v1alpha1"
  2. kind: ClusterRbacConfig
  3. metadata:
  4.   name: default
  5.   namespace: istio-system
  6. spec:
  7.   mode: ON_WITH_INCLUSION
  8.   inclusion:
  9.     namespaces: [ "default" ]</font>
复制代码

RBAC约束和属性
使用constraintsservice role的访问规则字段中指定额外的条件。
使用propertiesservice role binding的subject字段中指定额外的条件。
约束和属性列出的所有key, HTTP协议都支持,但TCP协议值支持部分。

RBAC详细配置见附件


总结
为了与istio配置模型保持一直, 减少CRD资源创建, 简化api, 提升用户维护,管理,使用体验. istioRBAC接口功能转移到了security下的AuthorizationPolicy接口统一实现, 灵活的支持更多的用例, 同时也解决了员rbac中服务级别访问控制带来的缺陷.


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

lesliehuang

发表于 2020-8-5 20:59:07 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注时速云公众号

QQ|Archiver|云原生技术实践 | 时速云 ( 京ICP备14045471号 )

GMT+8, 2020-9-19 16:24 , Processed in 0.155629 second(s), 22 queries .

快速回复 返回列表