EKS ERROR couldn't get current server API group list: the server has asked for the client to provide credentials

 

 

AWS EKS Cluster를 생성 후 node를 확인하기 위해 node를 확인하는 명령어(kubectl get nodes)를 입력했는데 아래 에러가 발생했다.

 

대충 에러 로그가 의미하는 바는 현재 권한이 없는 게 문제인 것 같은데, eks 사용하기 위해 별도의 IAM을 만들어 eks 관련 역할을 부여해 주었는데도 위와 같은 에러가 발생해 꽤나 삽질을 하느라 시간을 소비했다.

 

에러를 해결하기 위해 시도했던 과정들을 나열을 해보자.

 

1. 로컬의 kubectl 설정 업데이트

aws eks update-kubeconfig --region <region> --name <cluster_name>

 

 

위 명령어로 현재 로컬의 kubectl 설정(kubeconfig 파일)을 업데이트하여 EKS cluster에 접근이 가능하도록 했다.

Updated context arn:aws:eks:ap-northeast-2:123456789:cluster/playground-eks in /Users/seungjun/.kube/config

 

업데이트가 잘 되었다는 로그를 확인했지만 여전히 에러는 발생하고 있었다.

 

2. 현재 사용 중인 context 확인

현재 로컬에서 eks cluster가 여러 개 관리하고 있기 때문에 현재 내가 접속하려는 cluster를 사용 중인지 아래 명령어를 통해 현재 context를 확인했다.

kubectl config current-context

 

arn:aws:eks:ap-northeast-2:123456789:cluster/playground-eks

현재 사용 중인 cluster의 context도 내가 사용하려는 playground-eks로 정상적으로 사용 중이었다.

 

3. AWS 인증 정보 확인

AWS EKS를 사용하고 있기 때문에 AWS CLI를 통해 cluster에 접근하게 되는데, 아래 명령어를 통해 현재 AWS CLI 세션의 인증 정보를 확인했다.

aws sts get-caller-identity

 

 

위 명령어를 입력하고 정보를 확인하고 나서부터 해결의 실마리가 조금씩 보이기 시작했다.

{
    "UserId": "abcd",
    "Account": "123456789",
    "Arn": "arn:aws:iam::123456789:user/playground-dev"
}

 

확인한 정보로는 현재 AWS 계정 ID, IAM, ARN 정보를 얻을 수 있는데 위에서 확인한 IAM(playground-dev)에 EKS 관련 역할이 없었기에, 역할을 부여해 주고 다시 cluster에 접근을 시도했지만 여전히 권한이 필요하다는 에러가 발생했다.

 

이후 AWS EKS Cluster의 페이지를 확인해 보니 IAM 액세스 항목이라는 블록이 존재했다.

이 블록에는 현재 root IAM만 추가된 상태였다. 이게 문제였었다.

해당 cluster에 access 할 수 있는 IAM은 root iam이었고 현재 로컬에 인증된 AWS IAM은 이전에 eks를 사용하기 위해 생성했던 IAM이였다.

 

 

그래서 현재 IAM을 access 할 수 있도록 access 항목에 AmazonEKSAdmin 관련 정책과 함께 추가해 주었더니 정상정으로 cluster의 node를 확인할 수 있었다.