文档简介:
本文介绍 CCE 集群 OIDC 认证、启用说明,以及如何与 RBAC 结合使用。
认证说明
- CCE 集群 OIDC 认证依赖百度云 IAM 的身份认证。支持 IAM 用户、IAM 角色认证。
- CCE 集群默认仅支持基于 X509 证书的认证方式。仅新版 CCE 集群支持在创建时选择开启 OIDC 认证。
- CCE 集群开启 OIDC 认证后,基于 X509 证书的认证能力依然保留。
- CCE 集群开启 OIDC 认证后,支持通过 AssumeRole 的方式操作集群资源。
启用步骤
- 创建集群
登录百度智能云控制台,进入 "产品服务 > 容器引擎 CCE";在左侧导航栏,依次点击 "集群管理 > 集群列表 > 创建集群 (新版)",进入集群创建页面:
- 在高级设置中,勾选OIDC认证,如上图。然后按照一般步骤完成集群创建。
- 在集群列表页,下载基于 OIDC 的 KubeConfig 文件,基于该文件可以通过 OIDC 认证访问集群
- 通过 KubeConfig 或者直接在控制台操作集群资源,请先确保进行操作的子用户 (通过子用户访问时),或者用户所切换的 IAM Role (通过 AssumeRole 访问时) 已经提前被赋予相应的 RBAC 权限。具体见下文 『权限管理』。
权限管理
OIDC 仅仅解决集群认证问题,集群认证通过后,开始进行鉴权操作 (一般基于 RBAC)。需要事先为用户或者 IAM Role 绑定相应的 RBAC 权限,才能正常操作集群资源。
主用户
主用户默认具备集群管理员权限,即可以操作集群全部资源,无需再绑定 RBAC 权限。
子用户
对于子用户的权限绑定,有以下两种方式可选:
- 通过 CCE 控制台为子用户绑定 RBAC 权限,详情参考:子用户 RBAC 权限配置
-
手动在集群创建 ClusterRole/Role 和 ClusterRoleBinding/RoleBinding,详情参考:K8s RBAC 官方文档。示例如下:
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: custom-cluster-role rules:
注意: ClusterRoleBinding/RoleBinding 中的 subjects.kind = User,subjects.name = 子用户 ID。
-
- 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
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 权限。