• RBAC
    • AccessRule
    • AccessRule.Constraint
    • RbacConfig
    • RbacConfig.Mode
    • RbacConfig.Target
    • RoleRef
    • ServiceRole
    • ServiceRoleBinding
    • Subject

    RBAC

    Istio RBAC(Role Based Access Control)定义了 ServiceRoleServiceRoleBinding 对象。

    ServiceRole 声明里包含一个规则列表(权限)。每个规则有如下的标准字段:

    • services: services 列表。
    • methods: HTTP methods。在 gRPC 场景下,由于值总是 POST,该字段会被忽略。
    • paths: HTTP paths 或 gRPC methods。 注意 gRPC methods 的格式应为 /packageName.serviceName/methodName,并且是大小写敏感的。
      除了标准字段,操作人员也可以在 constraints 字段中使用自定义 key,“约束和属性”页中列出了被支持的 key。

    如下是一个名为 product-viewerServiceRole 对象,在服务 products.svc.cluster.localv1v2 版本上,它具有 readGETHEAD)权限。由于没有指定 path,它将作用于这个服务的所有 path 上。

    1. 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. value: ["v1", "v2"]

    ServiceRoleBinding 对象的声明包含两部分:

    • roleRef 字段引用相同 namespace 下的 ServiceRole 对象。
    • 被分配到该角色的 subjects 列表。
      除了一个简单的 user 字段,操作人员也可以在 properties 字段中使用自定义 key,“约束和属性” 页列出了被支持的 key。

    如下是一个名为 test-binding-productsServiceRoleBinding 对象,将两个 subjects 绑定到了名为 product-viewerServiceRole 上。

    • alice@yahoo.com 用户
    • abc namespace 下的所有 Service。
    1. 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"

    AccessRule

    AccessRule 定义了一个访问一系列 services 的权限。

    字段类型描述
    servicesstring[]必填。service 名称的列表。支持 service 名称的精确匹配、前缀匹配和后缀匹配。例如,要匹配到 bookstore.mtv.cluster.local,可以使用 bookstore.mtv.cluster.local(精确匹配),或者 bookstore(前缀匹配),或者 .mtv.cluster.local(后缀匹配)。如果设置为 [""],则表示该 namespace 下的所有 Service。
    pathsstring[]可选项。HTTP paths 列表或 gRPC methods 列表。gRPC methods 必须提供如 /packageName.serviceName/methodName 格式的完成名称,并且是大小写敏感的。HTTP paths 支持精确匹配、前缀匹配和后缀匹配。例如,要匹配 /books/review 这个 path,可以使用 /books/review(精准匹配),或 /books/(前缀匹配),或 /review(后缀匹配)。若不指定,则作用于所有 path。
    methodsstring[]可选项。HTTP methods(如 GETPOST)列表。在 gRPC 场景下,由于值总是 POST,该选项将被忽略。如果设置为 [""] 或者没有指定,它将应用于所有 Method。
    constraintsAccessRule.Constraint[]可选项。ServiceRole 定义中指定的其它约束。前面 ServiceRole 的定义中展示了关于“版本”的约束。

    AccessRule.Constraint

    自定义约束的声明,“约束和属性” 页列出了被支持的 key。

    字段类型描述
    keystring约束的 key。
    valuesstring[]约束的有效值列表。支持精确匹配、前缀匹配、后缀匹配。例如,v1alpha2(精确匹配)、v1(前缀匹配)或 alpha2(后缀匹配)都能匹配到值 v1alpha2

    RbacConfig

    RbacConfig 定义了控制 Istio RBAC 行为的全局配置。这种类型的 Custom Resource 是独占的,在整个 mesh 中只能全局性创建一次,并且要跟其它 Istio 组件的 namespace 相同,通常为 istio-system。注意:这点在 istioctl 和 server 端都是强制的,如果已经存在了,创建新的 Custom Resource 会被拒绝,用户只能删掉或者修改已存在的定义。

    如下是一个名为 istio-rbac-configRbacConfig 对象的例子,允许 Istio RBAC 控制 default namespace 下的全部 Service。

    1. apiVersion: "rbac.istio.io/v1alpha1"
    2. kind: RbacConfig
    3. metadata:
    4. name: default
    5. namespace: istio-system
    6. spec:
    7. mode: ON_WITH_INCLUSION
    8. inclusion:
    9. namespaces: [ "default" ]
    字段类型描述
    modeRbacConfig.ModeIstio RBAC 模式
    inclusionRbacConfig.Target强制执行 Istio RBAC Policies 的 services 或 namespaces 列表。注意:该字段仅在 mode 配置为 ON_WITH_INCLUSION 时有效,其它 mode 值情况下,该字段将被忽略。
    exclusionRbacConfig.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 列表。

    字段类型描述
    servicesstring[]services 列表。
    namespacesstring[]namespaces 列表。

    RoleRef

    RoleRef 引用一个 role 对象。

    字段类型描述
    kindstring必填。引用的 role 类型。目前仅支持 ServiceRole 类型。
    namestring必填。引用的 ServiceRole 对象名称。该 ServiceRole 对象必须跟 ServiceRoleBinding 对象在同一个 namespace 下。

    ServiceRole

    ServiceRole 的声明中包含一个访问规则(权限)列表。它在 ServiceRole 对象的 spec 部分表示。ServiceRole 的名称和 namespace 在 metadata 部分指定。

    字段类型描述
    rulesAccessRule[]必填。该 role 所拥有的访问权限规则集合。

    ServiceRoleBinding

    ServiceRoleBindingServiceRole 对象分配 subjects 列表。它在 ServiceRoleBinding 对象的 spec 部分表示。 ServiceRoleBinding 的 名称 and namespace 在 metadata 部分指定。

    字段类型描述
    subjectsSubject[]必填。分配给 ServiceRole 对象的 subjects 列表。
    roleRefRoleRef必填。要绑定的 ServiceRole 对象。

    Subject

    Subject 定义了一个身份。 这个身份可以是一个用户,也可以通过一组 properties 来识别。properties 中支持的 keys 已经在“约束和属性”页列出。

    字段类型描述
    userstring可选项。代表一个 subject 的用户 name/ID。
    propertiesmap<string,string>可选项。一组标识 subject 的属性。前面的 ServiceRoleBinding 例子展示了一个 source.namespace 属性的例子。