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
      
    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>"]}]'
      ...     
      
    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
      
      • 특정 네임스페이스의 리소스 보기 권한 - 파일에 설정된 네임스페이스는 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
      
    2. 인증된 사용자는 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.