Access control
第 1 章 Access control
可能需要手动创建和管理访问控制。您必须为 Red Hat Advanced Cluster Management for Kubernetes 配置身份验证(authentication)服务,以便将工作负载加载到 Identity and Access Management(IAM)。如需更多信息,请参阅 OpenShift Container Platform 文档中的了解身份验证中的身份验证。
基于角色的访问控制和身份验证用于标识用户关联的角色和集群凭据。有关访问和凭证的详情,请查看以下文档。
需要的访问权限:集群管理员
1.1. 基于角色的访问控制
Red Hat Advanced Cluster Management for Kubernetes 支持的基于角色的控制访问(RBAC)。您的角色决定了您可以执行的操作。RBAC 基于 Kubernetes 中的授权机制,类似于 Red Hat OpenShift Container Platform。如需有关 RBAC 的更多信息,请参阅 OpenShift Container Platform 文档中的 RBAC 概述。
备注: 如果用户角色访问不可用,则控制台中的 Action 按钮会被禁用。
1.1.1. 角色概述
有些产品资源是基于集群范围的,有些则是命名空间范围。您必须将集群角色绑定和命名空间角色绑定应用到用户,以使访问控制具有一致性。查看 Red Hat Advanced Cluster Management for Kubernetes 支持的以下角色定义表列表:
角色 | 定义 |
|
这是 OpenShift Container Platform 的默认角色。具有集群范围内的绑定到 |
|
具有集群范围内的绑定到 |
|
具有集群范围内的绑定到 |
|
具有集群范围内的绑定到 |
|
具有集群范围内的绑定到 |
|
具有集群范围内的绑定到 |
|
具有 |
admin, edit, view |
admin、edit 和 view 是 OpenShift Container Platform 的默认角色。具有命名空间范围绑定的用户可以访问特定命名空间中的 |
|
带有 |
重要:
- 任何用户都可以从 OpenShift Container Platform 创建项目,这为命名空间授予管理员角色权限。
-
如果用户无法访问集群的角色,则不会显示集群名称。集群名称可能显示有以下符号:
-
。
如需了解更多详细信息,请参阅实现基于角色的访问控制。
1.2. 实施基于角色的访问控制
Red Hat Advanced Cluster Management for Kubernetes RBAC 在控制台级别和 API 级别进行验证。控制台中的操作可根据用户访问角色权限启用或禁用。
multicluster engine operator 是一个前提条件,Red Hat Advanced Cluster Management 的集群生命周期功能。要使用 multicluster engine operator 管理集群 RBAC,请参阅集群生命周期multicluster engine for Kubernetes operator Role-based access control 文档中的 RBAC 指导信息。
查看以下部分以了解有关 Red Hat Advanced Cluster Management 特定生命周期的 RBAC 的更多信息:
1.2.1. 应用程序生命周期 RBAC
在创建应用程序时,subscription
命名空间会被创建,配置映射会在 subscription
命名空间中创建。您还必须有权访问 channel
命名空间。如果需要应用订阅,则必须是订阅管理员。有关管理应用程序的更多信息,请参阅作为订阅管理员创建允许和拒绝列表。
查看以下应用程序生命周期 RBAC 操作:
使用名为
username
的用户在所有受管集群中创建和管理应用程序。您必须创建一个集群角色绑定,并将其绑定到username
。运行以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin --user=<username>
这个角色是一个超级用户,可访问所有资源和操作。您可以使用此角色为应用程序和命名空间中的所有应用程序资源创建命名空间。
创建将资源部署到多个命名空间的应用程序。您必须创建一个集群角色绑定到
open-cluster-management:subscription-admin
集群角色,并将其绑定到名为username
的用户。运行以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
要在
cluster-name
受管集群中创建并管理一个名为application-name
的应用程序,以username
用户:您必须输入以下命令创建一个到open-cluster-management:admin:<cluster-name>
集群角色绑定的集群角色绑定,并将其绑定到username
:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
此角色具有对受管集群
cluster-name
上所有application
资源的读写访问权限。如果需要访问其他受管集群,请重复此操作。输入以下命令,创建一个到使用
admin
角色的application
命名空间的命名空间角色绑定,并把它绑定到username
:oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=admin --user=<username>
此角色具有对
application
命名空间中的所有application
资源的读和写的访问权限。如果需要访问其他应用程序,或者应用部署到多个命名空间,请重复此操作。您可以创建将资源部署到多个命名空间的应用程序。输入以下命令创建到
open-cluster-management:subscription-admin
集群角色的集群角色绑定,并将其绑定到username
:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
要使用名为
username
的用户查看在一个名为cluster-name
的受管集群中的应用程序,请创建一个集群角色绑定到open-cluster-management:view:
集群角色,并将其绑定到username
。输入以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
此角色具有对受管集群
cluster-name
上所有application
资源的读访问权限。如果需要访问其他受管集群,请重复此操作。使用
view
角色创建到application
命名空间的命名空间角色绑定,并将它绑定到username
。输入以下命令:oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=view --user=<username>
此角色具有对
application
命名空间中的 所有application
资源的读访问权限。如果需要访问其他应用程序,请重复此操作。
1.2.1.1. 应用程序生命周期的控制台和 API RBAC 表
查看以下应用程序生命周期控制台和 API RBAC 表:
资源 | Admin | Edit | View |
---|---|---|---|
Application | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
Channel | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
Subscription | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
放置规则(Placement rule) | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
API | Admin | Edit | View |
---|---|---|---|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
1.2.2. 监管生命周期 RBAC
创建策略时,会在集群中创建策略。监管生命周期的角色是命名空间范围的。用户还必须有权访问受管集群。
要执行监管生命周期操作,用户必须有权访问创建策略的命名空间,以及访问应用策略的受管集群。
查看以下操作:
要在
policy
命名空间中创建策略,并将其应用到名为cluster-name
的受管集群中,请使用open-cluster-management:admin:<cluster-name>
角色创建一个到policy
命名空间的命名空间角色绑定。运行以下命令:oc create rolebinding <role-binding-name> -n <policy-namespace> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
要查看受管集群中的策略,请创建一个集群角色绑定到
open-cluster-management:view:<cluster-name>
集群角色,并使用以下命令将其绑定到view
角色:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
1.2.2.1. 监管生命周期的控制台和 API RBAC 表
查看以下监管生命周期控制台和 API RBAC 表:
资源 | Admin | Edit | View |
---|---|---|---|
策略(policy) | 创建、读取、更新、删除 | 读取、更新 | 读取 |
PlacementBindings | 创建、读取、更新、删除 | 读取、更新 | 读取 |
放置 | 创建、读取、更新、删除 | 读取、更新 | 读取 |
PlacementRules (已弃用) | 创建、读取、更新、删除 | 读取、更新 | 读取 |
PolicyAutomations | 创建、读取、更新、删除 | 读取、更新 | 读取 |
API | Admin | Edit | View |
---|---|---|---|
| 创建、读取、更新、删除 | 读取、更新 | 读取 |
| 创建、读取、更新、删除 | 读取、更新 | 读取 |
| 创建、读取、更新、删除 | 读取、更新 | 读取 |
1.2.3. Observability RBAC
要查看受管集群的可观察性指标,您必须具有对 hub 集群中该受管集群的 view
访问权限。查看以下可观察功能列表:
访问受管集群指标。
如果没有将用户分配给 hub 集群上的受管集群的
view
角色,则拒绝用户访问受管集群的指标。运行以下命令,以验证用户是否有在受管集群命名空间中创建managedClusterView
角色:oc auth can-i create ManagedClusterView -n <managedClusterName> --as=<user>
作为集群管理员,在受管集群命名空间中创建一个
managedClusterView
角色。运行以下命令:oc create role create-managedclusterview --verb=create --resource=managedclusterviews -n <managedClusterName>
然后,通过创建角色绑定来将角色应用到用户。运行以下命令:
oc create rolebinding user-create-managedclusterview-binding --role=create-managedclusterview --user=<user> -n <managedClusterName>
搜索资源。
要验证用户是否可以访问资源类型,请使用以下命令:
oc auth can-i list <resource-type> -n <namespace> --as=<rbac-user>
备注:
<resource-type>
必须是复数。要在 Grafana 中查看可观察性数据,则必须在受管集群相同的命名空间中有一个
RoleBinding
资源。查看以下
RoleBinding
示例:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: <replace-with-name-of-rolebinding> namespace: <replace-with-name-of-managedcluster-namespace> subjects: - kind: <replace with User|Group|ServiceAccount> apiGroup: rbac.authorization.k8s.io name: <replace with name of User|Group|ServiceAccount> roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view
如需更多信息,请参阅角色绑定策略。请参阅自定义可观察性以配置可观察性。
1.2.3.1. Observability 生命周期的控制台和 API RBAC 表
要管理可观察性组件,请查看以下 API RBAC 表:
API | Admin | Edit | View |
| create、read、update 和 delete | 读取、更新 | 读取 |
| create, get, list, watch, update, delete, patch | - | - |
| get、list、watch | get、list、watch | get、list、watch |
要了解更多保护集群的信息,请参阅风险和合规性。