集群 OIDC 认证
所有文档

          容器引擎 CCE

          集群 OIDC 认证


          本文介绍 CCE 集群 OIDC 认证、启用说明,以及如何与 RBAC 结合使用。

          认证说明

          • CCE 集群 OIDC 认证依赖百度云 IAM 的身份认证。支持 IAM 用户、IAM 角色认证。
          • CCE 集群默认仅支持基于 X509 证书的认证方式。仅新版 CCE 集群支持在创建时选择开启 OIDC 认证。
          • CCE 集群开启 OIDC 认证后,基于 X509 证书的认证能力依然保留。
          • CCE 集群开启 OIDC 认证后,支持通过 AssumeRole 的方式操作集群资源。

          启用步骤

          1. 创建集群

          登录百度智能云控制台,进入 "产品服务 > 容器引擎 CCE";在左侧导航栏,依次点击 "集群管理 > 集群列表 > 创建集群 (新版)",进入集群创建页面:

          image-20200831164416197.png

          1. 在高级设置中,勾选OIDC认证,如上图。然后按照一般步骤完成集群创建。
          2. 在集群列表页,下载基于 OIDC 的 KubeConfig 文件,基于该文件可以通过 OIDC 认证访问集群

          image-20200831164228163.png

          1. 通过 KubeConfig 或者直接在控制台操作集群资源,请先确保进行操作的子用户 (通过子用户访问时),或者用户所切换的 IAM Role (通过 AssumeRole 访问时) 已经提前被赋予相应的 RBAC 权限。具体见下文 『权限管理』。

          权限管理

          OIDC 仅仅解决集群认证问题,集群认证通过后,开始进行鉴权操作 (一般基于 RBAC)。需要事先为用户或者 IAM Role 绑定相应的 RBAC 权限,才能正常操作集群资源。

          主用户

          主用户默认具备集群管理员权限,即可以操作集群全部资源,无需再绑定 RBAC 权限。

          子用户

          对于子用户的权限绑定,有以下两种方式可选:

          1. 通过 CCE 控制台为子用户绑定 RBAC 权限,详情参考:子用户 RBAC 权限配置
          2. 手动在集群创建 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 权限。

          上一篇
          子用户RBAC权限配置
          下一篇
          镜像仓库