IAM 인증 사용자 관리(ConfigMap)
    • PDF

    IAM 인증 사용자 관리(ConfigMap)

    • PDF

    기사 요약

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

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

    참고

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

    IAM 사용자를 클러스터에 추가

    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
    
    1. ConfigMap의 IAM 사용자 파라미터는 아래와 같습니다.
      • subaccountIdNo: SubAccount 콘솔에서 확인 가능한 추가할 SubAccount 사용자의 ID
      • username: Kubernetes 내에서 IAM 사용자에게 매핑할 사용자 이름.
      • groups: Kubernetes 내에서 사용자에게 매핑할 그룹 목록. 자세한 Default roles and role bindings를 참조해 주십시오.
    2. 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>"]}]'
    ...     
    
    1. IAM 사용자 또는 역할을 매핑한 Kubernetes 사용자 또는 그룹이 RoleBinding 또는 ClusterRoleBinding을 사용하여 Kubernetes 역할에 바인딩되어 있는지 확인합니다. 자세한 내용은 Kubernetes 문서의 Using RBAC Authorization를 참조해 주십시오.
    • 모든 네임스페이스의 리소스 보기 권한 - 그룹 이름은 full-access-group 이며, 이를 ncp-auth ConfigMap에서 IAM 사용자의 groups에 매핑해야 합니다.
    참고
    • full-access-group은 많은 권한을 가지고 있지만 클러스터 관리자가 사용하는 마스터 권한은 아닙니다.
    • 클러스터 마스터 권한이 필요한 경우 기본으로 제공되는 system:masters 그룹에 사용자를 매핑시켜야 합니다.
    $ 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
    
    • 특정 네임스페이스의 리소스 보기 권한 - 파일에 설정된 네임스페이스는 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  
    

    mapSubAccounts에 사용자 등록하지 않고 전체 인증

    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
    
    1. 인증된 사용자는 SubAccount 사용자를 클러스터에 추가와 동일하게 Kubernetes 사용자 또는 그룹이 RoleBinding 또는 ClusterRoleBinding을 사용하여 Kubernetes 역할에 바인딩되어야 합니다.

    SubAccount 그룹을 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
    

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.