容器引擎CCE

    集群 OIDC 认证


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

    认证说明

    • CCE 集群 OIDC 认证依赖百度云 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权限配置
    下一篇
    镜像仓库