IAM 인증 사용자 관리(ConfigMap)

Prev Next

VPC 환경에서 이용 가능합니다.

클러스터를 생성할 경우, 클러스터를 생성한 SubAccount 계정과 메인 계정은 클러스터 RBAC 구성에 system:masters 그룹으로 자동 설정되며, 이 설정은 클러스터 정보나 ConfigMap에 표시되지 않습니다. IAM 사용자에게 클러스터 사용 권한을 추가하려면 kube-system 네임스페이스에 ncp-auth ConfigMap을 등록해야 합니다.

참고

ncp-iam-authenticator가 설치되고 kubeconfig가 생성된 상태에서 설정 가능합니다. ncp-iam-authenticator 설치, IAM 인증 kubeconfig 생성을 참조해 주십시오.

  1. 클러스터를 생성한 SubAccount 사용자 또는 메인 계정으로 kubectl 자격 증명이 구성되어 있어야 합니다.
  2. ncp-auth ConfigMap을 생성해 주십시오.
    $ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ncp-auth
      namespace: kube-system
    data:
      mapSubAccounts: |
        - subAccountIdNo: <iam-user-idno>
          username: <username>
          groups:
            - <groups>
    EOF
    
    Plain text
  3. ConfigMap의 IAM 사용자 파라미터는 아래와 같습니다.
    • subaccountIdNo: SubAccount 콘솔에서 확인 가능한 추가할 SubAccount 사용자의 ID
    • username: Kubernetes 내에서 IAM 사용자에게 매핑할 사용자 이름.
    • groups: Kubernetes 내에서 사용자에게 매핑할 그룹 목록. 자세한 Default roles and role bindings를 참조해 주십시오.
  4. ncp-auth ConfigMap에 ncloud.com/applied-ncp-auth 어노테이션을 통해 적용된 사용자 목록을 확인합니다.
    $ kubectl --kubeconfig $KUBE_CONFIG -n kube-system get configmap ncp-auth -o yaml
    ...
    metadata:
      annotations:
         ncloud.com/applied-ncp-auth: '[{"SubAccountIdNo":"<iam-user-idno>","Username":"<username>","Groups":["<groups>"]}]'
    ...     
    
    Plain text
  5. IAM 사용자 또는 역할을 매핑한 Kubernetes 사용자 또는 그룹이 RoleBinding 또는 ClusterRoleBinding을 사용하여 Kubernetes 역할에 바인딩되어 있는지 확인해 주십시오.
    • 자세한 내용은 Kubernetes 문서의 Using RBAC Authorization를 참조해 주십시오.
    • 모든 네임스페이스의 리소스 보기 권한 - 그룹 이름은 full-access-group 이며, 이를 ncp-auth ConfigMap에서 IAM 사용자의 groups에 매핑해야 합니다.
    $ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
     name: full-access-clusterrole
    rules:
    - apiGroups:
      - ""
      resources:
      - nodes
      - namespaces
      - pods
      verbs:
      - get
      - list
    - apiGroups:
      - apps
      resources:
      - deployments
      - daemonsets
      - statefulsets
      - replicasets
      verbs:
      - get
      - list
    - apiGroups:
      - batch
      resources:
      - jobs
      verbs:
      - get
      - list
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
     name: full-access-binding
    subjects:
    - kind: Group
      name: full-access-group
      apiGroup: rbac.authorization.k8s.io
    roleRef:
     kind: ClusterRole
     name: full-access-clusterrole
     apiGroup: rbac.authorization.k8s.io
    EOF
    
    Plain text
    • 특정 네임스페이스의 리소스 보기 권한 - 파일에 설정된 네임스페이스는 default이므로 원하는 네임스페이스를 지정하여 수정합니다. 그룹 이름은 restricted-access-group이며, 이를 ncp-auth ConfigMap에서 IAM 사용자의 groups에 매핑해야 합니다.
    $ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: restricted-access-clusterrole
    rules:
    - apiGroups:
      - ""
      resources:
      - nodes
      - namespaces
      verbs:
      - get
      - list
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: restricted-access-clusterrole-binding
    subjects:
    - kind: Group
      name: restricted-access-group
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: restricted-access-clusterrole
      apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: default
      name: restricted-access-role
    rules:
    - apiGroups:
      - ""
      resources:
      - pods
      verbs:
      - get
      - list
    - apiGroups:
      - apps
      resources:
      - deployments
      - daemonsets
      - statefulsets
      - replicasets
      verbs:
      - get
      - list
    - apiGroups:
      - batch
      resources:
      - jobs
      verbs:
      - get
      - list
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: restricted-access-role-binding
      namespace: default
    subjects:
    - kind: Group
      name: restricted-access-group
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: restricted-access-role
      apiGroup: rbac.authorization.k8s.io
    EOF  
    
    Plain text
  1. ncp-auth ConfigMap에 authenticateAll 값을 true로 추가하면 모든 SubAccount 계정이 mapSubAccounts에 추가되지 않아도 인증됩니다.
    $ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ncp-auth
      namespace: kube-system
    data:
      authenticateAll: "true"
    EOF
    
    Plain text
  2. 인증된 사용자는 SubAccount 사용자를 클러스터에 추가와 동일하게 Kubernetes 사용자 또는 그룹이 RoleBinding 또는 ClusterRoleBinding을 사용하여 Kubernetes 역할에 바인딩되어야 합니다.
  1. SubAccount 그룹에 속해있는 SubAccount 사용자는 ncp-sub-account-group:가 prefix로 추가된 Kubernetes 그룹에 포함되게 됩니다.
  2. full-access 라는 SubAccount 그룹에 속한 사용자 전체에 full-access-clusterrole을 부여하는 예시는 아래와 같습니다.
    $ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
     name: full-access-clusterrole
    rules:
    - apiGroups:
      - ""
      resources:
      - nodes
      - namespaces
      - pods
      verbs:
      - get
      - list
    - apiGroups:
      - apps
      resources:
      - deployments
      - daemonsets
      - statefulsets
      - replicasets
      verbs:
      - get
      - list
    - apiGroups:
      - batch
      resources:
      - jobs
      verbs:
      - get
      - list
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
     name: full-access-binding
    subjects:
    - kind: Group
      name: ncp-sub-account-group:full-access
      apiGroup: rbac.authorization.k8s.io
    roleRef:
     kind: ClusterRole
     name: full-access-clusterrole
     apiGroup: rbac.authorization.k8s.io
    EOF
    
    Plain text