配置集群OIDC认证
更新时间:2024-06-06
本文介绍 CCE 集群 OIDC 认证、启用说明,以及如何与 RBAC 结合使用。
认证说明
- CCE 集群 OIDC 认证依赖百度云 IAM 的身份认证。支持 IAM 用户、IAM 角色认证。
- CCE 集群默认仅支持基于 X509 证书的认证方式。仅支持新版 CCE 集群在创建时选择开启 OIDC 认证。
- CCE 集群开启 OIDC 认证后,基于 X509 证书的认证能力依然保留。
- CCE 集群开启 OIDC 认证后,支持通过 AssumeRole 的方式操作集群资源。
操作步骤
开启OIDC认证
- 登录百度智能云控制台,进入 "产品服务 > 容器引擎 CCE";
- 在集群列表页面单击“创建集群”进入集群创建页面:
-
在集群配置 > 高级设置中,勾选“开启OIDC认证”。
- 在目标集群列表详情页面,单击查看集群凭证下载基于 OIDC 的 KubeConfig 文件,基于该文件可以通过 OIDC 认证访问集群。
- 通过 KubeConfig 或者直接在控制台操作集群资源,请先确保进行操作的子用户 (通过子用户访问时),或者用户所切换的 IAM Role (通过 AssumeRole 访问时) 已经提前被赋予相应的 RBAC 权限。
配置RBAC权限
OIDC 仅仅解决集群认证问题,集群认证通过后,开始进行鉴权操作 (一般基于 RBAC)。需要事先为用户或者 IAM Role 绑定相应的 RBAC 权限,才能正常操作集群资源。
- 主用户:默认具备集群管理员权限,即可以操作集群全部资源,无需再绑定 RBAC 权限。
- 子用户:对于子用户的权限绑定,有以下两种方式可选:
通过预置RBAC授权
通过 CCE 控制台为子用户绑定 RBAC 权限,详情参考:配置预置RBAC权限策略
自定义RBAC策略授权
手动在集群创建 ClusterRole/Role 和 ClusterRoleBinding/RoleBinding,详情参考:K8s RBAC 官方文档。示例如下:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: custom-cluster-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: default
name: custom-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: custom-cluster-role
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: 294ae2c68794fb1ab58e71fbc8ef338
注意: ClusterRoleBinding/RoleBinding 中的 subjects.kind = User,subjects.name = 子用户 ID。
IAM Role
IAM Role 目前只能通过手动在集群中创建 ClusterRole/Role 和 ClusterRoleBinding/RoleBinding 方式绑定 RBAC 权限,示例如下:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: custom-cluster-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: default
name: custom-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: custom-cluster-role
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: 7e442e97bba54d9ea0d8da1fcacecd7a
注意:
ClusterRoleBinding/RoleBinding 中的 subjects.kind = Group,subjects.name = IAM Role ID;不要混淆 IAM Role 和 K8s Role,IAM Role 会被映射为集群中的 Group,Group name 等于 IAM Role ID。按照示例给 Group 绑定了 RBAC 权限后,那么扮演该 IAM Role 的用户就会获得相同的 RBAC 权限。