- [실습] 2. EKS 인증/인가 - 인증/인가 완벽 분석 해보기2024년 04월 13일
- yeongki0944
- 작성자
- 2024.04.13.:59
1. kubectl 명령어 흐름
- kubectl 명령 → aws eks get-token → EKS Service endpoint(STS)에 토큰 요청 ⇒ 응답값 디코드(Pre-Signed URL 이며 GetCallerIdentity..) - 링크
- STS Security Token Service : AWS 리소스에 대한 액세스를 제어할 수 있는 임시 보안 자격 증명(STS)을 생성하여 신뢰받는 사용자에게 제공할 수 있음
- https://ap-northeast-2.console.aws.amazon.com/cloudtrail/home?region=ap-northeast-2#/events?EventSource=sts.amazonaws.com
- AWS CLI 버전 1.16.156 이상에서는 별도 aws-iam-authenticator 설치 없이 aws eks get-token으로 사용 가능 - Docs
# sts caller id의 ARN 확인 aws sts get-caller-identity --query Arn
# kubeconfig 정보 확인 cat ~/.kube/config | yh
# Get a token for authentication with an Amazon EKS cluster. # This can be used as an alternative to the aws-iam-authenticator. aws eks get-token help
# 임시 보안 자격 증명(토큰)을 요청 : expirationTimestamp 시간경과 시 토큰 재발급됨 aws eks get-token --cluster-name $CLUSTER_NAME | jq aws eks get-token --cluster-name $CLUSTER_NAME | jq -r '.status.token'
2. kubectl의 Client-Go 라이브러리는 Pre-Signed URL을 Bearer Token으로 EKS API Cluster Endpoint로 요청을 보냄
k8s-aws-v1.aHR0cHM6Ly9zdHMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1HZXRDYWxsZXJJZGVudGl0eSZWZXJzaW9uPTIwMTEtMDYtMTUmWC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBWUU2WkxISFRDUU5MR0k1VSUyRjIwMjQwNDEzJTJGdXMtZWFzdC0xJTJGc3RzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA0MTNUMTM0NTU2WiZYLUFtei1FeHBpcmVzPTYwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCUzQngtazhzLWF3cy1pZCZYLUFtei1TaWduYXR1cmU9NmFkYjhkODBkNWQ3ZWRkMDdkYzNiMWJjMWJkZjI0YWIwZWI2ZWRlY2M5ZWJjMjQ3NTM0ZWM0NGJkMmEwMjM3NA
- 일반적인 AWS API 호출과 유사하다.
3. EKS API는 Token Review 를 Webhook token authenticator에 요청
⇒ (STS GetCallerIdentity 호출) AWS IAM 해당 호출 인증 완료 후 User/Role에 대한 ARN 반환
- 참고로 Webhook token authenticator 는 aws-iam-authenticator 를 사용 - 링크 Github
- https://ap-northeast-2.console.aws.amazon.com/cloudtrail/home?region=ap-northeast-2#/events?EventName=GetCallerIdentity
kubectl api-resources | grep authentication
kubectl explain tokenreviews
4. 쿠버네티스 RBAC 인가를 처리
- 해당 IAM User/Role 확인이 되면 k8s aws-auth configmap에서 mapping 정보를 확인하게 됩니다.
- aws-auth 컨피그맵에 'IAM 사용자, 역할 arm, K8S 오브젝트' 로 권한 확인 후 k8s 인가 허가가 되면 최종적으로 동작 실행을 합니다.
- 참고로 EKS를 생성한 IAM principal은 aws-auth 와 상관없이 kubernetes-admin Username으로 system:masters 그룹에 권한을 가짐 - 링크
# Webhook api 리소스 확인 kubectl api-resources | grep Webhook
# validatingwebhookconfigurations 리소스 확인 kubectl get validatingwebhookconfigurations
kubectl get validatingwebhookconfigurations eks-aws-auth-configmap-validation-webhook -o yaml | kubectl neat | yh
# aws-auth 컨피그맵 확인 kubectl get cm -n kube-system aws-auth -o yaml | kubectl neat | yh
# EKS 설치한 IAM User 정보 >> system:authenticated는 어떤 방식으로 추가가 되었는지 궁금??? kubectl rbac-tool whoami
# system:masters , system:authenticated 그룹의 정보 확인 kubectl rbac-tool lookup system:masters kubectl rbac-tool lookup system:authenticated kubectl rolesum -k Group system:masters kubectl rolesum -k Group system:authenticated
# system:masters 그룹이 사용 가능한 클러스터 롤 확인 : cluster-admin kubectl describe clusterrolebindings.rbac.authorization.k8s.io cluster-admin
# cluster-admin 의 PolicyRule 확인 : 모든 리소스 사용 가능! kubectl describe clusterrole cluster-admin
# system:authenticated 그룹이 사용 가능한 클러스터 롤 확인 kubectl describe ClusterRole system:discovery kubectl describe ClusterRole system:public-info-viewer kubectl describe ClusterRole system:basic-user kubectl describe ClusterRole eks:podsecuritypolicy:privileged
다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)