1. 네임스페이스 생성하기
k8sdev group의 IAM 사용자가 접근할 수 있는 네임스페이스 development
와 k8sInteg group의 IAM 사용자가 접근할 수 있는 네임스페이스 integration
을 생성합니다.
Copy kubectl create namespace integration
kubectl create namespace development
dev-user에게 development
네임스페이스에 대한 액세스를 할 수 있는 role 및 rolebinding을 구성합니다.
Copy cat << EOF | kubectl apply -f - -n development
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dev-role
rules:
- apiGroups:
- ""
- "apps"
- "batch"
- "extensions"
resources:
- "configmaps"
- "cronjobs"
- "deployments"
- "events"
- "ingresses"
- "jobs"
- "pods"
- "pods/attach"
- "pods/exec"
- "pods/log"
- "pods/portforward"
- "secrets"
- "services"
verbs:
- "create"
- "delete"
- "describe"
- "get"
- "list"
- "patch"
- "update"
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dev-role-binding
subjects:
- kind: User
name: dev-user
roleRef:
kind: Role
name: dev-role
apiGroup: rbac.authorization.k8s.io
EOF
정의한 역할은 해당 네임스페이스의 모든 것에 대해 액세스 권한을 부여하였습니다. 이 Role은 ClusterRole이 아니므로 development
네임스페이스에서만 적용됩니다.
이번에는 integ-user에게 integration
네임스페이스에 대한 액세스를 할 수 있는 role 및 rolebinding을 구성합니다.
Copy cat << EOF | kubectl apply -f - -n integration
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: integ-role
rules:
- apiGroups:
- ""
- "apps"
- "batch"
- "extensions"
resources:
- "configmaps"
- "cronjobs"
- "deployments"
- "events"
- "ingresses"
- "jobs"
- "pods"
- "pods/attach"
- "pods/exec"
- "pods/log"
- "pods/portforward"
- "secrets"
- "services"
verbs:
- "create"
- "delete"
- "describe"
- "get"
- "list"
- "patch"
- "update"
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: integ-role-binding
subjects:
- kind: User
name: integ-user
roleRef:
kind: Role
name: integ-role
apiGroup: rbac.authorization.k8s.io
EOF
정의한 역할은 해당 네임스페이스의 모든 것에 대해 액세스 권한을 부여하였습니다. 이 Role은 ClusterRole이 아니므로 integration
네임스페이스에서만 적용됩니다.
2. Role 세스 설정
EKS 클러스터의 IAM 역할에 대한 액세스 권한을 부여 합니다. 이전에 정의한 IAM 역할에 대한 액세스 권한을 EKS 클러스터에 부여 하려면 특정 mapRoles 을 aws-auth
ConfigMap에 추가해야 합니다.
IAM 사용자가 직접 지정하는 대신 클러스터에 액세스하는 role을 사용하는 것의 장점은 관리가 더 쉽다는 것 입니다. 우리가 사용자를 추가 하거나 제거 하려는 경우 ConfigMap을 업데이트 할 필요가 없으며 사용자를 추가하거나 제거 할 필요가 있습니다. IAM 그룹은 IAM 그룹과 연관된 IAM 역할을 허용 하도록 ConfigMap을 구성 합니다.
aws-auth ConfigMap 을 업데이트하여 IAM 역할을 허용하게 할 수 있습니다. 이 파일은 IAM 역할과 K8S RBAC 권한 사이의 매핑을 만들며, 수동으로 편집 할 수 있습니다.
Copy eksctl create iamidentitymapping \
--cluster eksworkshop-eksctl \
--arn arn:aws:iam::${ACCOUNT_ID}:role/k8sDev \
--username dev-user
eksctl create iamidentitymapping \
--cluster eksworkshop-eksctl \
--arn arn:aws:iam::${ACCOUNT_ID}:role/k8sInteg \
--username integ-user
eksctl create iamidentitymapping \
--cluster eksworkshop-eksctl \
--arn arn:aws:iam::${ACCOUNT_ID}:role/k8sAdmin \
--username admin \
--group system:masters
다음과 같은 ConfigMap이 있어야 합니다.
Copy kubectl get cm -n kube-system aws-auth -o yaml
eksctl을 활용하여 클러스터에서 관리되는 모든 ID의 목록을 얻을 수 있습니다:
Copy eksctl get iamidentitymapping --cluster eksworkshop-eksctl
여기서 생성한 것은 다음과 같습니다.
system:masters 쿠버네티스 그룹에 액세스 권한을 부여하고 (완전 관리 권한이 있으므로) admin 사용자에게 맵핑 한 K8sAdmin의 RBAC 역할
개발 네임스페이스에서 dev-user에 맵핑한 k8sdev RBAC 역할
통합 네임스페이스에서 integ-user에 맵핑한 k8sInteg RBAC 역할