- RBAC
- AccessRule
- AccessRule.Constraint
- RbacConfig
- RbacConfig.Mode
- RbacConfig.Target
- RoleRef
- ServiceRole
- ServiceRoleBinding
- Subject
RBAC
Istio RBAC(Role Based Access Control)定义了 ServiceRole 和 ServiceRoleBinding 对象。
ServiceRole 声明里包含一个规则列表(权限)。每个规则有如下的标准字段:
- services: services 列表。
- methods: HTTP methods。在 gRPC 场景下,由于值总是
POST,该字段会被忽略。 - paths: HTTP paths 或 gRPC methods。 注意 gRPC methods 的格式应为
/packageName.serviceName/methodName,并且是大小写敏感的。
除了标准字段,操作人员也可以在constraints字段中使用自定义 key,“约束和属性”页中列出了被支持的 key。
如下是一个名为 product-viewer 的 ServiceRole 对象,在服务 products.svc.cluster.local 的 v1 和 v2 版本上,它具有 read(GET 和 HEAD)权限。由于没有指定 path,它将作用于这个服务的所有 path 上。
apiVersion: "rbac.istio.io/v1alpha1"kind: ServiceRolemetadata:name: products-viewernamespace: defaultspec:rules:- services: ["products.svc.cluster.local"]methods: ["GET", "HEAD"]constraints:- key: "destination.labels[version]"value: ["v1", "v2"]
ServiceRoleBinding 对象的声明包含两部分:
roleRef字段引用相同 namespace 下的ServiceRole对象。- 被分配到该角色的
subjects列表。
除了一个简单的user字段,操作人员也可以在properties字段中使用自定义 key,“约束和属性” 页列出了被支持的 key。
如下是一个名为 test-binding-products 的 ServiceRoleBinding 对象,将两个 subjects 绑定到了名为 product-viewer 的 ServiceRole 上。
alice@yahoo.com用户abcnamespace 下的所有 Service。
apiVersion: "rbac.istio.io/v1alpha1"kind: ServiceRoleBindingmetadata:name: test-binding-productsnamespace: defaultspec:subjects:- user: alice@yahoo.com- properties:source.namespace: "abc"roleRef:kind: ServiceRolename: "products-viewer"
AccessRule
AccessRule 定义了一个访问一系列 services 的权限。
| 字段 | 类型 | 描述 |
|---|---|---|
| services | string[] | 必填。service 名称的列表。支持 service 名称的精确匹配、前缀匹配和后缀匹配。例如,要匹配到 bookstore.mtv.cluster.local,可以使用 bookstore.mtv.cluster.local(精确匹配),或者 bookstore(前缀匹配),或者 .mtv.cluster.local(后缀匹配)。如果设置为 [""],则表示该 namespace 下的所有 Service。 |
| paths | string[] | 可选项。HTTP paths 列表或 gRPC methods 列表。gRPC methods 必须提供如 /packageName.serviceName/methodName 格式的完成名称,并且是大小写敏感的。HTTP paths 支持精确匹配、前缀匹配和后缀匹配。例如,要匹配 /books/review 这个 path,可以使用 /books/review(精准匹配),或 /books/(前缀匹配),或 /review(后缀匹配)。若不指定,则作用于所有 path。 |
| methods | string[] | 可选项。HTTP methods(如 GET,POST)列表。在 gRPC 场景下,由于值总是 POST,该选项将被忽略。如果设置为 [""] 或者没有指定,它将应用于所有 Method。 |
| constraints | AccessRule.Constraint[] | 可选项。ServiceRole 定义中指定的其它约束。前面 ServiceRole 的定义中展示了关于“版本”的约束。 |
AccessRule.Constraint
自定义约束的声明,“约束和属性” 页列出了被支持的 key。
| 字段 | 类型 | 描述 |
|---|---|---|
| key | string | 约束的 key。 |
| values | string[] | 约束的有效值列表。支持精确匹配、前缀匹配、后缀匹配。例如,v1alpha2(精确匹配)、v1(前缀匹配)或 alpha2(后缀匹配)都能匹配到值 v1alpha2。 |
RbacConfig
RbacConfig 定义了控制 Istio RBAC 行为的全局配置。这种类型的 Custom Resource 是独占的,在整个 mesh 中只能全局性创建一次,并且要跟其它 Istio 组件的 namespace 相同,通常为 istio-system。注意:这点在 istioctl 和 server 端都是强制的,如果已经存在了,创建新的 Custom Resource 会被拒绝,用户只能删掉或者修改已存在的定义。
如下是一个名为 istio-rbac-config 的 RbacConfig 对象的例子,允许 Istio RBAC 控制 default namespace 下的全部 Service。
apiVersion: "rbac.istio.io/v1alpha1"kind: RbacConfigmetadata:name: defaultnamespace: istio-systemspec:mode: ON_WITH_INCLUSIONinclusion:namespaces: [ "default" ]
| 字段 | 类型 | 描述 |
|---|---|---|
| mode | RbacConfig.Mode | Istio RBAC 模式 |
| inclusion | RbacConfig.Target | 强制执行 Istio RBAC Policies 的 services 或 namespaces 列表。注意:该字段仅在 mode 配置为 ON_WITH_INCLUSION 时有效,其它 mode 值情况下,该字段将被忽略。 |
| exclusion | RbacConfig.Target | 强制执行 Istio RBAC Policies 的 services 或 namespaces 列表。注意:该字段仅在 mode 配置为 ON_WITH_EXCLUSION 时有效,其它 mode 值情况下,该字段将被忽略。 |
RbacConfig.Mode
| 名称 | 描述 |
|---|---|
| OFF | 关闭 Istio RBAC,RbacConfig 的所有配置将会失效,且 Istio RBAC Policies 不会执行。 |
| ON | 为所有 services 和 namespaces 启用 Istio RBAC。 |
ON_WITH_INCLUSION | 仅针对 inclusion 字段中指定的 services 和 namespaces 启用 Istio RBAC。其它不在 inclusion 字段中的 services 和 namespaces 将不会被 Istio RBAC Policies 强制执行。 |
ON_WITH_EXCLUSION | 针对除了 exclusion 字段中指定的 services 和 namespaces,启用 Istio RBAC。其它不在 exclusion 字段中的 services 和 namespaces 将按照 Istio RBAC Policies 执行。 |
RbacConfig.Target
Target 定义了一个 services 或 namespaces 列表。
| 字段 | 类型 | 描述 |
|---|---|---|
| services | string[] | services 列表。 |
| namespaces | string[] | namespaces 列表。 |
RoleRef
RoleRef 引用一个 role 对象。
| 字段 | 类型 | 描述 |
|---|---|---|
| kind | string | 必填。引用的 role 类型。目前仅支持 ServiceRole 类型。 |
| name | string | 必填。引用的 ServiceRole 对象名称。该 ServiceRole 对象必须跟 ServiceRoleBinding 对象在同一个 namespace 下。 |
ServiceRole
ServiceRole 的声明中包含一个访问规则(权限)列表。它在 ServiceRole 对象的 spec 部分表示。ServiceRole 的名称和 namespace 在 metadata 部分指定。
| 字段 | 类型 | 描述 |
|---|---|---|
| rules | AccessRule[] | 必填。该 role 所拥有的访问权限规则集合。 |
ServiceRoleBinding
ServiceRoleBinding 向 ServiceRole 对象分配 subjects 列表。它在 ServiceRoleBinding 对象的 spec 部分表示。 ServiceRoleBinding 的 名称 and namespace 在 metadata 部分指定。
| 字段 | 类型 | 描述 |
|---|---|---|
| subjects | Subject[] | 必填。分配给 ServiceRole 对象的 subjects 列表。 |
roleRef | RoleRef | 必填。要绑定的 ServiceRole 对象。 |
Subject
Subject 定义了一个身份。 这个身份可以是一个用户,也可以通过一组 properties 来识别。properties 中支持的 keys 已经在“约束和属性”页列出。
| 字段 | 类型 | 描述 |
|---|---|---|
| user | string | 可选项。代表一个 subject 的用户 name/ID。 |
| properties | map<string,string> | 可选项。一组标识 subject 的属性。前面的 ServiceRoleBinding 例子展示了一个 source.namespace 属性的例子。 |
