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 按钮会被禁用。
如需组件支持的 RBAC 的详细信息,参阅以下小节。
1.1.1. 角色概述 复制链接链接已复制到粘贴板!
有些产品资源是基于集群范围的,有些则是命名空间范围。您必须将集群角色绑定和命名空间角色绑定应用到用户,以使访问控制具有一致性。查看 Red Hat Advanced Cluster Management for Kubernetes 支持的以下角色定义表列表:
| 角色 | 定义 |
| cluster-admin |
这是 OpenShift Container Platform 的默认角色。具有集群范围内的绑定到 |
| open-cluster-management:cluster-manager-admin |
具有集群范围内的绑定到 |
| open-cluster-management:admin:<managed_cluster_name> |
具有集群范围内的绑定到 |
| open-cluster-management:view:<managed_cluster_name> |
具有集群范围内的绑定到 |
| open-cluster-management:managedclusterset:admin:<managed_clusterset_name> |
具有集群范围内的绑定到 |
| open-cluster-management:managedclusterset:view:<managed_clusterset_name> |
具有集群范围内的绑定到 |
| open-cluster-management:subscription-admin |
具有 |
| admin, edit, view |
admin、edit 和 view 是 OpenShift Container Platform 的默认角色。具有命名空间范围绑定的用户可以访问特定命名空间中的 |
重要:
- 任何用户都可以从 OpenShift Container Platform 创建项目,这为命名空间授予管理员角色权限。
-
如果用户无法访问集群的角色,则无法看到集群名称。集群名称显示有以下符号:
-。
1.1.2. RBAC 的实施 复制链接链接已复制到粘贴板!
RBAC 在控制台和 API 一级进行验证。控制台中的操作可根据用户访问角色权限启用或禁用。查看以下部分以了解有关产品中特定生命周期的 RBAC 的更多信息。
1.1.2.1. 集群生命周期 RBAC 复制链接链接已复制到粘贴板!
查看以下集群生命周期 RBAC 操作。
创建和管理所有受管集群:
输入以下命令,创建到集群角色
open-cluster-management:cluster-manager-admin的集群角色绑定:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个角色是一个超级用户,可访问所有资源和操作。您可以创建集群范围的
managedcluster资源、用于管理受管集群的资源的命名空间,以及使用此角色的命名空间中的资源。您还可以访问用于创建具有此角色的受管集群的供应商连接和裸机资产。
管理名为
cluster-name的受管集群:输入以下命令,创建到集群角色
open-cluster-management:admin:<cluster-name>的集群角色绑定:oc create clusterrolebinding (role-binding-name) --clusterrole=open-cluster-management:admin:<cluster-name>
oc create clusterrolebinding (role-binding-name) --clusterrole=open-cluster-management:admin:<cluster-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色对集群范围的
managedcluster资源具有读写访问权限。这是必要的,因为managedcluster是一个集群范围的资源,而不是命名空间范围的资源。输入以下命令,创建到集群角色
admin的命名空间角色绑定:oc create rolebinding <role-binding-name> -n <cluster-name> --clusterrole=admin
oc create rolebinding <role-binding-name> -n <cluster-name> --clusterrole=adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色对受管集群命名空间中的资源具有读写访问权限。
查看名为
cluster-name的受管集群:输入以下命令,创建到集群角色
open-cluster-management:view:<cluster-name>的集群角色绑定:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对集群范围的
managedcluster资源的读取访问权限。这是必要的,因为managedcluster是一个集群范围的资源,而不是命名空间范围的资源。输入以下命令,创建到集群角色
view的命名空间角色绑定:oc create rolebinding <role-binding-name> -n <cluster-name> --clusterrole=view
oc create rolebinding <role-binding-name> -n <cluster-name> --clusterrole=viewCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色对受管集群命名空间中的资源具有只读访问权限。
输入以下命令来查看您可以访问的受管集群列表:
oc get managedclusters.clusterview.open-cluster-management.io
oc get managedclusters.clusterview.open-cluster-management.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令供没有集群管理员特权的管理员和用户使用。
输入以下命令来查看您可以访问的受管集群集列表:
oc get managedclustersets.clusterview.open-cluster-management.io
oc get managedclustersets.clusterview.open-cluster-management.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令供没有集群管理员特权的管理员和用户使用。
1.1.2.1.1. 集群池 RBAC 复制链接链接已复制到粘贴板!
查看以下集群池 RBAC 操作。
使用集群池置备集群:
以集群管理员身份,通过将角色添加到组来创建受管集群集,并将管理员权限授予角色。
使用以下命令为
server-foundation-clusterset受管集群集授予admin权限:oc adm policy add-cluster-role-to-group open-cluster-management:clusterset-admin:server-foundation-clusterset server-foundation-team-admin
oc adm policy add-cluster-role-to-group open-cluster-management:clusterset-admin:server-foundation-clusterset server-foundation-team-adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令为
server-foundation-clusterset受管集群授予view权限:oc adm policy add-cluster-role-to-group open-cluster-management:clusterset-view:server-foundation-clusterset server-foundation-team-user
oc adm policy add-cluster-role-to-group open-cluster-management:clusterset-view:server-foundation-clusterset server-foundation-team-userCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为集群池
server-foundation-clusterpool创建命名空间。运行以下命令,为
server-foundation-team-admin授予server-foundation-clusterpool的admin权限:oc adm new-project server-foundation-clusterpool oc adm policy add-role-to-group admin server-foundation-team-admin --namespace server-foundation-clusterpool
oc adm new-project server-foundation-clusterpool oc adm policy add-role-to-group admin server-foundation-team-admin --namespace server-foundation-clusterpoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
作为团队管理员,在集群池命名空间中创建一个名为
ocp46-aws-clusterpool的集群池,带有集群设置标签cluster.open-cluster-management.io/clusterset=server-foundation-clusterset。-
server-foundation-webhook检查集群池是否有集群设置标签,以及用户是否有权在集群集中创建集群池。 -
server-foundation-controller为server-foundation-team-user授予对server-foundation-clusterpool命名空间的view权限。
-
创建集群池时,集群池会创建一个
clusterdeployment。-
server-foundation-controller为server-foundation-team-admin授予对clusterdeployment命名空间的admin权限。 server-foundation-controller为server-foundation-team-user授予对clusterdeployment名空间的view权限。注 :作为
team-admin和team-user,您有clusterpool、clusterdeplyment和clusterclaim的admin权限
-
查看以下集群生命周期控制台和 API RBAC 表:
| resource | Admin | Edit | View |
|---|---|---|---|
| Clusters | read、update、delete | - | 读取 |
| 集群集 | get、update、bind、join | 未提及 edit 角色 | get |
| 受管集群 | read、update、delete | 未提及 edit 角色 | get |
| AWS 供应商连接。 | create、read、update 和 delete | - | 读取 |
| 裸机资产 | 创建、读取、更新、删除 | - | 读取 |
| API | Admin | Edit | View |
|---|---|---|---|
| managedclusters.cluster.open-cluster-management.io
对于这个 API 您可以使用 | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| managedclusters.view.open-cluster-management.io
对于这个 API 您可以使用 | 读取 | 读取 | 读取 |
| managedclusters.register.open-cluster-management.io/accept | 更新 | 更新 | |
| managedclusterset.cluster.open-cluster-management.io
对于这个 API 您可以使用 | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| managedclustersets.view.open-cluster-management.io | 读取 | 读取 | 读取 |
| managedclustersetbinding.cluster.open-cluster-management.io
对于这个 API 您可以使用 | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| baremetalassets.inventory.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| klusterletaddonconfigs.agent.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| managedclusteractions.action.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| managedclusterviews.view.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| managedclusterinfos.internal.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| manifestworks.work.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| submarinerconfigs.submarineraddon.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| placements.cluster.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
1.1.2.2. 基于角色的凭证访问控制 复制链接链接已复制到粘贴板!
对凭证的访问由 Kubernetes 控制。凭据作为 Kubernetes secret 存储和保护。以下权限适用于在 Red Hat Advanced Cluster Management for Kubernetes 中访问 secret:
- 有权在命名空间中创建 secret 的用户可以创建凭证。
- 有权读取命名空间中的 secret 的用户也可以查看凭证。
-
具有 Kubernetes 集群角色
admin和edit的用户可以创建和编辑 secret。 -
具有 Kubernetes 集群角色
view的用户无法查看 secret,因为读取 secret 的内容可以访问服务帐户凭证。
1.1.2.3. 应用程序生命周期 RBAC 复制链接链接已复制到粘贴板!
在创建应用程序时,subscription 命名空间会被创建,配置映射会在 subscription 命名空间中创建。您还必须有权访问 channel 命名空间。如果需要应用订阅,则必须是订阅管理员。有关管理应用程序的更多信息,请参阅 创建和管理订阅。
查看以下应用程序生命周期 RBAC 操作:
使用名为
username的用户在所有受管集群中创建和管理应用程序:创建到
open-cluster-management:cluster-manager-admin集群角色绑定的集群角色绑定,并将其绑定到username,运行以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个角色是一个超级用户,可访问所有资源和操作。您可以使用此角色为应用程序和命名空间中的所有应用程序资源创建命名空间。
选项 :您可以创建应用程序将资源部署到多个命名空间中:
创建一个集群角色绑定到
open-cluster-management:subscription-admin集群角色,并将其绑定到名为username的用户。运行以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要在
cluster-name受管集群中创建并管理一个名为application-name的应用程序,以username用户:输入以下命令创建一个绑定到
open-cluster-management:admin:的一个集群角色,并将其绑定到username:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对受管集群
cluster-name上所有application资源的读写访问权限。如果需要访问其他受管集群,请重复此操作。输入以下命令,创建一个到使用
admin角色的application命名空间的命名空间角色绑定,并把它绑定到username:oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=admin --user=<username>
oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对
application命名空间中的所有application资源的读和写的访问权限。如果需要访问其他应用程序,或者应用部署到多个命名空间,请重复此操作。
选项 :您可以创建应用程序将资源部署到多个命名空间中:
输入以下命令创建一个到 open-cluster-management:subscription-admin 集群角色绑定的集群角色绑定,并将其绑定到
username:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用名为
username的用户在名为cluster-name的受管集群中查看应用程序:输入以下命令创建一个绑定到
open-cluster-management:view:的一个集群角色,并将其绑定到username:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对受管集群
cluster-name上所有application资源的读访问权限。如果需要访问其他受管集群,请重复此操作。使用
view角色创建到application命名空间的命名空间角色绑定,并将它绑定到username。使用以下命令:oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=view --user=<username>
oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=view --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对
application命名空间中的 所有application资源的读访问权限。如果需要访问其他应用程序,请重复此操作。
查看以下应用程序生命周期控制台和 API RBAC 表:
| resource | Admin | Edit | View |
|---|---|---|---|
| Application | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| Channel | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| Subscription | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 放置规则(Placement rule) | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| API | Admin | Edit | View |
|---|---|---|---|
| applications.app.k8s.io | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| channels.apps.open-cluster-management.io | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| deployables.apps.open-cluster-management.io | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| helmreleases.apps.open-cluster-management.io | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| placementrules.apps.open-cluster-management.io | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| subscriptions.apps.open-cluster-management.io | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| configmaps | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| secrets | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| 命名空间 | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
1.1.2.4. 监管生命周期 RBAC 复制链接链接已复制到粘贴板!
创建策略时,会在集群中创建策略。监管生命周期的角色是命名空间范围的。用户还必须有权访问受管集群。
要执行监管生命周期操作,用户必须有权访问创建策略的命名空间,以及访问应用策略的受管集群。
请参见以下示例:
要在
policy命名空间中创建策略,并将其应用到名为cluster-name的受管集群中:使用
open-cluster-management:admin:角色,创建到policy命名空间的命名空间角色绑定。运行以下命令:oc create rolebinding <role-binding-name> -n <policy-namespace> --clusterrole=admin --user=<username>
oc create rolebinding <role-binding-name> -n <policy-namespace> --clusterrole=admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
查看受管集群中的策略:
输入以下命令创建一个到
open-cluster-management:admin:集群角色的集群角色绑定,并将其绑定到view角色:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
查看以下监管生命周期控制台和 API RBAC 表:
| resource | Admin | Edit | View |
|---|---|---|---|
| 策略(policy) | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| PlacementBindings | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| PlacementRules | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| PolicyAutomations | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| API | Admin | Edit | View |
|---|---|---|---|
| policies.policy.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| placementbindings.policy.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| policyautomations.policy.open-cluster-management.io | 创建、读取、更新、删除 | 读取、更新 | 读取 |
1.1.2.5. Observability RBAC 复制链接链接已复制到粘贴板!
要查看受管集群的可观察性指标,您必须具有对 hub 集群中该受管集群的 view 访问权限。查看以下可观察功能列表:
访问受管集群指标。
如果没有将用户分配给 hub 集群上的受管集群的
view角色,则拒绝用户访问受管集群的指标。- 搜索资源。
要在 Grafana 中查看可观察性数据,则必须在受管集群相同的命名空间中有一个 RoleBinding 资源。查看以下 RoleBinding 示例:
如需更多信息,请参阅 角色绑定策略。请参阅自定义可观察性 来配置可观察性。
要管理可观察性组件,请查看以下 API RBAC 表:
| API | Admin | Edit | View |
| multiclusterobservabilities.observability.open-cluster-management.io | create、read、update 和 delete | 读取、更新 | 读取 |
| searchcustomizations.search.open-cluster-management.io | create, get, list, watch, update, delete, patch | - | - |
| policyreports.wgpolicyk8s.io | get、list、watch | get、list、watch | get、list、watch |
要继续了解更多有关保护集群的信息,请参阅风险和合规性。