
| 방식 | 특징 |
|---|---|
| RBAC | Kubernetes 표준 권한 모델 |
| Node | kubelet/노드 전용 인가 |
| Webhook | 외부 시스템에 인가 위임 |
| ABAC | 비권장 |
| Verb | 의미 |
|---|---|
| get | 조회 |
| list | 목록 조회 |
| watch | 변경 감시 |
| create | 생성 |
| update | 수정 |
| patch | 일부 수정 |
| delete | 삭제 |
| deletecollection | 여러 리소스 삭제 |
aws eks get-token 으로 인증 토큰 생성TokenReview로 인증 수행GetCallerIdentity 호출로 서명 검증| 항목 | 내용 |
|---|---|
| Prefix | k8s-aws-v1 |
| 본문 | Base64 인코딩 문자열 |
| 실제 의미 | STS GetCallerIdentity용 Pre-signed URL |
| 만료 | 짧은 수명 |
SecretKey → DateKey → RegionKey → ServiceKey → SigningKey → Signature
username: IAM ARN
groups: system:authenticated
extra: principalId, arn, accessKeyId 등
EKS 생성 principal은 내부적으로 높은 권한을 가질 수 있음
하지만 응답에 그 권한이 항상 그대로 노출되는 것은 아님
| 항목 | Access Entry (EKS API) | aws-auth ConfigMap |
|---|---|---|
| 저장 위치 | AWS 관리형 API | Kubernetes ConfigMap |
| 관리 방식 | AWS API/콘솔 | YAML 직접 수정 |
| 인가 처리 | Access Policy + Webhook 가능 | RBAC 중심 |
| 상태 | 권장 | deprecated |
system:nodes, system:bootstrappers 그룹과 연결됨eks:node-bootstrapper 권한과 연계됨aws-auth ConfigMap 잘못 수정 시 클러스터 장애 발생 가능system:nodes 제거 → 전체 노드 NotReadyclusters: API 서버 정보
users: 인증 정보
contexts: cluster + user 조합
EKS에서는 kubeconfig에 exec: aws eks get-token 구조가 들어감
| 구성 | 역할 |
|---|---|
| serviceAccountToken | 인증 토큰 |
| configMap | CA 번들 |
| downwardAPI | namespace 등 메타데이터 |
| 유형 | 역할 |
|---|---|
| MutatingWebhook | 요청 수정 |
| ValidatingWebhook | 요청 검증 및 차단 |

파드 기동 시 서비스 어카운트 한 개가 할당되며, 서비스 어카운트 기반 인증/인가를 함, 미지정 시 기본 서비스 어카운트가 할당
서비스 어카운트에 자동 생성된 시크릿에 저장된 토큰으로 쿠버네티스 API에 대한 인증 정보로 사용 할 수 있다 ← 1.23 이전 버전의 경우에만 해당
# 네임스페이스(Namespace, NS) 생성 및 확인
kubectl create namespace dev-team
kubectl create ns infra-team
# 네임스페이스 확인
kubectl get ns
# 네임스페이스에 각각 서비스 어카운트 생성 : serviceaccounts 약자(=sa)
kubectl create sa dev-k8s -n dev-team
kubectl create sa infra-k8s -n infra-team
# 서비스 어카운트 정보 확인
kubectl get sa -n dev-team
kubectl get sa dev-k8s -n dev-team -o yaml
kubectl get sa -n infra-team
kubectl get sa infra-k8s -n infra-team -o yaml




각 네임스페이스에 kubectl 실행용 Pod를 생성하고, 서로 다른 ServiceAccount를 연결
이후 Pod 내부에 자동 주입된 서비스어카운트 토큰, 네임스페이스 정보, CA 인증서를 확인
kubectl exec를 이용해 Pod 내부에서 직접 kubectl 명령을 실행하며 권한을 테스트
마지막으로 kubectl auth can-i 명령으로 해당 ServiceAccount가 실제로 어떤 권한을 가지는지 검증




kubectl api-resources로 클러스터에서 제공하는 리소스와 API 그룹을 먼저 확인Role을 생성Role은 어떤 리소스에 어떤 작업을 허용할지 정의하는 권한 객체RoleBinding은 해당 Role을 각 ServiceAccount에 연결하는 객체dev-k8s, infra-k8s가 각 네임스페이스 내 권한을 가지도록 매핑하는 과정


alias를 사용해 각 Pod 내부에서 kubectl 명령을 바로 실행할 수 있도록 단축 명령 구성kube-system 네임스페이스 조회와 nodes 조회를 통해 네임스페이스 범위를 넘는 접근 가능 여부 확인-v=6 옵션으로 실제 API 요청 흐름과 상세 로그 확인kubectl auth can-i get pods 결과를 통해 현재 ServiceAccount 권한 정상 반영 확인


automountServiceAccountToken: false 옵션으로 Pod에 Kubernetes 서비스어카운트 토큰을 주입하지 않고 실행aws-cli 컨테이너로 s3 ls를 수행하지만, IRSA나 별도 AWS 자격 증명이 없으므로 정상 접근 불가ListBuckets 호출 주체가 Pod용 IAM Role이 아닌 Node IAM Role(AssumedRole) 로 기록되고, 결과는 AccessDenied 확인



ProjectedServiceAccountToken 기능이 도입되며, Pod에는 기존 secret 기반 토큰 대신 OIDC 형식의 JWT 서비스어카운트 토큰이 마운트iss, aud, exp, sub 같은 표준 클레임과 Pod, Namespace, ServiceAccount 정보가 포함되며, 대상 제한과 만료 시간을 가지는 점이 핵심/var/run/secrets/kubernetes.io/serviceaccount/token 경로에서 해당 토큰 확인 가능













































# kube-ops-view Ingress 삭제 (ALB 제거)
kubectl delete ingress -n kube-system kubeopsview
kubectl get ingress -n kube-system
# IRSA 설정 삭제
CLUSTER_NAME=myeks
eksctl delete iamserviceaccount --cluster=$CLUSTER_NAME --namespace=kube-system --name=aws-load-balancer-controller
eksctl get iamserviceaccount --cluster $CLUSTER_NAME
# 테라폼으로 생성된 리소스 삭제
terraform destroy -auto-approve
rm -rf ~/.kube/config
IRSA는 Pod의 ServiceAccount 토큰을 OIDC 기반으로 AWS STS에 전달해, 특정 IAM Role의 임시 자격 증명을 받아 AWS 리소스에 접근하는 구조.
AWS_ROLE_ARN, AWS_WEB_IDENTITY_TOKEN_FILE 정보를 읽고 AssumeRoleWithWebIdentity 호출iss, sub, aud, exp와 OIDC Provider, Trust Policy, JWKS 공개키를 기준으로 토큰 유효성 검증aws-auth ConfigMap vs EKS API Access Entry| 항목 | aws-auth ConfigMap | EKS API Access Entry |
|---|---|---|
| 상태 | deprecated | 권장 |
| 저장 위치 | Kubernetes 내부 ConfigMap / etcd | AWS EKS 관리형 API |
| 권한 부여 | IAM 주체 매핑 후 RBAC 필요 | Access Policy 직접 연결 가능 |
| 운영 방식 | YAML 직접 수정 | AWS API / 콘솔 관리 |
| 리스크 | 오타·삭제 시 장애 가능 | 상대적으로 운영 안정성 높음 |
TokenReview 기반이며, 차이는 IAM 주체를 Kubernetes 권한으로 연결하는 방식| 항목 | IRSA | EKS Pod Identity |
|---|---|---|
| 기본 원리 | OIDC 웹 아이덴티티 토큰으로 AssumeRoleWithWebIdentity 호출 | EKS Auth API와 Pod Identity Agent가 임시 자격 증명 전달 |
| 사전 구성 | 클러스터별 OIDC Provider 필요 | OIDC Provider 불필요 |
| 핵심 구성요소 | ServiceAccount, projected token, IAM trust policy, Pod Identity Webhook | ServiceAccount, Pod Identity association, Pod Identity Agent |
| IAM 신뢰 주체 | 클러스터별 OIDC provider | pods.eks.amazonaws.com 서비스 주체 |
| 확장성 | 클러스터 수만큼 trust policy 관리가 늘어남 | 여러 클러스터에서 같은 principal 재사용 쉬움 |
AssumeRoleWithWebIdentity를 호출해 임시 자격 증명을 받는 구조ConfigMap Access Entry IRSA Pod Identity| 구분 | 대상 | 목적 | 권한 대상 | 핵심 특징 |
|---|---|---|---|---|
| aws-auth ConfigMap | 사람 / IAM 주체 | EKS API 접근 | Kubernetes 리소스 | 구식 방식, RBAC 의존 |
| Access Entry | 사람 / IAM 주체 | EKS API 접근 | Kubernetes 리소스 | 관리형 정책 사용 가능 |
| IRSA | Pod / ServiceAccount | AWS API 접근 | AWS 리소스 | OIDC 기반 |
| Pod Identity | Pod / ServiceAccount | AWS API 접근 | AWS 리소스 | EKS 관리형, Agent 기반 |
podIdentityAssociations 파라미터가 추가되어, 클러스터 생성 시점이나 이후 운영 단계에서 add-on 권한을 한 번에 설정 가능해진 점