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 사용자를 클러스터에 추가
- 클러스터를 생성한 SubAccount 사용자 또는 메인 계정으로 kubectl 자격 증명이 구성되어 있어야 합니다.
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
- ConfigMap의 IAM 사용자 파라미터는 아래와 같습니다.
- subaccountIdNo: SubAccount 콘솔에서 확인 가능한 추가할 SubAccount 사용자의 ID
- username: Kubernetes 내에서 IAM 사용자에게 매핑할 사용자 이름.
- groups: Kubernetes 내에서 사용자에게 매핑할 그룹 목록. 자세한 Default roles and role bindings를 참조해 주십시오.
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>"]}]'
...
- 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에 사용자 등록하지 않고 전체 인증
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
- 인증된 사용자는 SubAccount 사용자를 클러스터에 추가와 동일하게 Kubernetes 사용자 또는 그룹이 RoleBinding 또는 ClusterRoleBinding을 사용하여 Kubernetes 역할에 바인딩되어야 합니다.
SubAccount 그룹을 Kubernetes 그룹으로 사용
- SubAccount 그룹에 속해있는 SubAccount 사용자는 ncp-sub-account-group:가 prefix로 추가된 Kubernetes 그룹에 포함되게 됩니다.
- 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
이 문서가 도움이 되었습니까?