개요 : EKS는 최초 생성한 사람만이 master 권한을 가지고 있으며, 이 사람을 제외한 사용자는 접근 할 수없다
방법 : EKS 생성 후 생성한 사람의 권한으로 접속하여 다른 사용자/Role 에게 권한을 주어야 한다
1. EKS 생성
- AWS 콘솔에서 EKS 를 생성
2. EC2에 kubectl 명령어 설치 및 EKS config update
- kubectl 설치
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html
kubectl 설치 또는 업데이트 - Amazon EKS
Amazon EKS 클러스터 제어 영역과 마이너 버전이 하나 다른 kubectl 버전을 사용해야 합니다. 예를 들어 1.24 kubectl 클라이언트는 Kubernetes 1.23, 1.24, 1.25 클러스터와 함께 작동합니다.
docs.aws.amazon.com
- kubectl config upgrade
aws eks update-kubeconfig --region region-code --name my-cluster
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-cluster.html
Amazon EKS 클러스터 생성 - Amazon EKS
AWS Management Console을 사용하여 클러스터를 배포한 경우 이 단계를 건너뛸 수 있습니다. AWS Management Console은 기본적으로 Amazon VPC CNI plugin for Kubernetes, CoreDNS 및 kube-proxy Amazon EKS 추가 기능을 배포합
docs.aws.amazon.com
3. kubectl 명령어 확인
4. aws-auth configmap 확인
※ EKS Cluster 만 있을 때에는 aws-auth 가 생성 되지 않는 것으로 보입니다.
따라서, 노드그룹을 생성 해야 aws-auth configmap 이 생성 됩니다.
5. 아래와 같이 Configmap 수정
- 초록색 부분이 기본적으로 설정 되어 있는 부분 입니다.
- role 로 매핑할 경우 아래와 같이 mapRoles 부분에 원하는 Role 을 추가 하면 됩니다
-> 새로 추가하는 groups 의 username 은 아무거나 입력해도 됩니다
- 2번 항목에서 EC2 에서 사용하는 IAM 역할이 바로 위 항목에서 입력한 Role 과 동일해야 EC2 에서 EKS 를 사용 할 수 있습니다.
- user 권한을 추가할 경우 아래 문서 참고 하여 추가
- user ID 를사용할 경우 EC2 에 해당 user Credential 이 있어야 합니다.
- 참고 : aws sts get-caller-identity
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/add-user-role.html
클러스터에 대한 IAM 보안 주체 액세스 사용 - Amazon EKS
역할 ARN에는 role/my-team/developers/my-role과 같은 경로가 포함될 수 없습니다. ARN 형식은 arn:aws:iam::111122223333:role/my-role이어야 합니다. 이 예에서는 my-team/developers/를 제거해야 합니다.
docs.aws.amazon.com
참고자료
[system:masters] 에 생성자 user 가 매핑 되는 것을 EKS log 로 확인 가능
EKS 최초 생성 시 생성자 계정이 system:master 에 매핑됨
Authenticator Version: "v0.5.15", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"MountedFile\""
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"EKSConfigMap\""
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"DynamicFile\""
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-Add-AddonManagerRole-1xxxY" username="eks:addon-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-NodeManagerRole-SJxxxOT" username="eks:node-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-FargateManagerRole-XAxxx4T" username="eks:fargate-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM user" groups="[system:masters]" user="arn:aws:iam::111111111111:user/xxxxxx@xxxxxxx.co.kr" username=kubernetes-admin
time="2023-04-16T04:27:27Z" level=error msg="Unable to re-establish watch: Get \"https://10.0.50.xxx:443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Daws-auth&watch=true\": dial tcp 10.0.50.219:xxx: connect: connection refused, sleeping for 5 seconds."
time="2023-04-16T04:27:30Z" level=info msg="Creating certificate with address" address=127.0.0.1
time="2023-04-16T04:27:30Z" level=info msg="generated a new private key and certificate" certBytes=xxx keyBytes=xxxx
time="2023-04-16T04:27:30Z" level=info msg="saving new key and certificate" certPath=/var/authenticator/xxxx.pem keyPath=/var/authenticator/xxx.pem
time="2023-04-16T04:27:30Z" level=info msg="loaded existing keypair" certPath=/var/authenticator/xxxx.pem keyPath=/var/authenticator/xxx.pem
time="2023-04-16T04:27:30Z" level=info msg="writing webhook kubeconfig file" kubeconfigPath=/etc/kubernetes/authenticator/apiserver-webhook-kubeconfig.yaml
time="2023-04-16T04:27:30Z" level=info msg="listening on 127.0.0.1:xxxxx"
time="2023-04-16T04:27:30Z" level=info msg="reconfigure your apiserver with `--authentication-token-webhook-config-file=/etc/kubernetes/authenticator/apiserver-webhook-kubeconfig.yaml` to enable (assuming default hostPath mounts)"
time="2023-04-16T04:27:30Z" level=info msg="Using assumed role for EC2 API" roleARN="arn:aws:iam::111111111111:role/xxxEKSClusterRole"
time="2023-04-16T04:27:30Z" level=info msg="Starting the h.ec2Provider.startEc2DescribeBatchProcessing "
time="2023-04-16T04:27:32Z" level=error msg="Unable to re-establish watch: Get \"https://10.0.50.xxx:443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Daws-auth&watch=true\": dial tcp 10.0.50.xxx:xxx: connect: connection refused, sleeping for 5 seconds."
time="2023-04-16T04:27:41Z" level=error msg="Unable to re-establish watch: unknown (get configmaps), sleeping for 5 seconds."
time="2023-04-16T04:27:46Z" level=error msg="Unable to re-establish watch: unknown (get configmaps), sleeping for 5 seconds."
노드그룹 생성
time="2023-04-16T04:50:06Z" level=info msg="Received aws-auth watch event"
time="2023-04-16T04:50:31Z" level=info msg="STS response" accesskeyid=xxxxxxxxxxxxxxx accountid=111111111111 arn="arn:aws:sts::111111111111:assumed-role/AmazonEKSNodeRole/i-0xxxxxxxxxe8" client="127.0.0.1:xxxxx" method=POST path=/authenticate session=i-0xxxxxxxe8 userid=xxxxxxx
time="2023-04-16T04:50:31Z" level=info msg="Calling ec2:DescribeInstances for the InstanceId = i-xxxxxx "
time="2023-04-16T04:50:32Z" level=info msg="access granted" arn="arn:aws:iam::111111111111:role/xxxxEKSNodeRole" client="127.0.0.1:xxxxx" groups="[system:bootstrappers system:nodes]" method=POST path=/authenticate uid="aws-iam-authenticator:111111111111:xxxxx" username="system:node:ip-172-xx-xx-xx.ap-northeast-2.compute.internal"