aws eks get-token --name <cluster_name> 명령어로 토큰을 얻을 수 있지만 클러스터 정보(describeCluster)를 가져올 권한이 없다면, 자신의 ~/.kube/config를 준비할 수 있습니다. 그러나 토큰이 있더라도 연결할 url 엔드포인트가 필요합니다 (pod에서 JWT 토큰을 얻는 데 성공했다면 여기를 읽어보세요) 그리고 클러스터 이름도 필요합니다.
제 경우에는 CloudWatch 로그에서 정보를 찾지 못했지만, LaunchTemplates userData와 EC2 머신의 userData에서 정보를 찾았습니다. 다음 예제에서처럼 userData에서 이 정보를 쉽게 볼 수 있습니다 (클러스터 이름은 cluster-name이었습니다):
EKS 클러스터의 생성자는 항상 그룹 system:masters (k8s 관리자)의 kubernetes 클러스터 부분에 접근할 수 있습니다. 이 글을 작성할 당시 클러스터를 생성한 사람을 찾는 직접적인 방법은 없습니다 (CloudTrail을 확인할 수 있습니다). 그리고 그 권한을 제거할 방법도 없습니다.
더 많은 AWS IAM 사용자 또는 역할에 K8s에 대한 접근을 부여하는 방법은 configmap **aws-auth**를 사용하는 것입니다.
따라서, config map **aws-auth**에 쓰기 권한이 있는 사람은 전체 클러스터를 손상시킬 수 있습니다.
같은 계정 또는 다른 계정에서 IAM 역할 및 사용자에게 추가 권한을 부여하는 방법과 이를 악용하는 방법에 대한 자세한 정보는 이 페이지를 확인하세요.
또한 이 멋진게시물을 확인하여 IAM -> Kubernetes 인증이 어떻게 작동하는지 알아보세요.
공격자가 EKS에 대한 권한을 가진 AWS의 자격 증명을 얻으면, 공격자가 이전에 설명한 대로 **update-kubeconfig**를 호출하지 않고 자신의 **kubeconfig**를 구성하면, **get-token**은 AWS API와 상호작용하지 않기 때문에 CloudTrail에 로그를 생성하지 않습니다(단지 로컬에서 토큰을 생성할 뿐입니다).
따라서 공격자가 EKS 클러스터와 대화할 때, cloudtrail은 사용자가 도난당하고 접근하는 것과 관련된 어떤 것도 기록하지 않습니다.
EKS 클러스터는 이 접근을 기록할 수 있는 로그가 활성화되어 있을 수 있습니다(기본적으로는 비활성화되어 있습니다).
EKS 랜섬?
기본적으로 클러스터를 생성한 사용자 또는 역할은 항상 클러스터에 대한 관리자 권한을 가집니다. 그리고 AWS가 Kubernetes 클러스터에 대해 가질 수 있는 유일한 "안전한" 접근입니다.
따라서, 공격자가 fargate를 사용하여 클러스터를 손상시키고다른 모든 관리자를 제거하며클러스터를 생성한 AWS 사용자/역할을 삭제하면, 공격자는 클러스터를 랜섬할 수 있습니다**.
클러스터가 EC2 VM을 사용하고 있다면, 노드에서 관리자 권한을 얻고 클러스터를 복구할 수 있을 가능성이 있습니다.
실제로, 클러스터가 Fargate를 사용하고 있다면 EC2 노드를 사용하거나 모든 것을 EC2로 이동하여 클러스터를 복구하고 노드의 토큰에 접근할 수 있습니다.