Overview
EKS Pod Identity Addon에 대해서 알아본다.
EKS Pod Identity 이란?
Amazon EKS Pod Identity는 2023년 12월에 출시 되었다.
Amazon EKS Pod Identity는 Amazon EC2 인스턴스 프로파일이 Amazon EC2 인스턴스에 자격 증명을 제공하는 것과 비슷한 방식으로 애플리케이션에 대한 자격 증명을 관리하는 기능을 제공한다.
추가 EKS Auth API와 각 노드에서 실행되는 에이전트 Pod를 통해 워크로드에 보안 인증 정보를 제공 한다.
Pod Identity Webhook은 EKS 클러스터의 Kubernetes API 서버와 통합되어 Kubernetes 서비스 계정(Service Account)을 사용해 IAM 역할을 파드에 연결할 수 있게 한다. 이를 통해 클러스터 내 파드가 특정 AWS 리소스에 액세스할 수 있도록 제한적인 권한을 부여할 수 있다.
이 기능은 IAM Roles for Service Accounts (IRSA)라는 AWS EKS 기능의 핵심 요소 중 하나이다.
이제 Amazon EKS Pod Identity를 사용하면 Kubernetes Identity에 AWS 권한을 부여하는 작업을 더 쉽게 구성하고 자동화할 수 있다. 클러스터 관리자는 더 이상 모든 AWS 리소스에 대한 애플리케이션을 인증하기 위해 Amazon EKS와 IAM 서비스 사이를 전환할 필요가 없다.
작동 원리
서비스 계정과 IAM 역할 연결
- Kubernetes 서비스 계정을 IAM 역할과 연결
- 서비스 계정이 사용하는 IAM 역할에는 필요한 AWS 리소스에 대한 권한을 정의
Pod Identity Webhook
- EKS Pod Identity Webhook은 클러스터에서 Pod가 시작될 때, Pod의 서비스 계정을 확인하고, 관련된 IAM 역할의 웹 ID 토큰을 발급
- Pod는 이 토큰을 사용하여 AWS 리소스에 액세스할 때 자격 증명으로 활용
STS AssumeRoleWithWebIdentity API 호출
- Pod는 서비스 계정과 연결된 IAM 역할을 기반으로 AWS STS(Security Token Service)를 호출하여 임시 자격 증명을 요청
- 이 임시 자격 증명으로 제한된 AWS 리소스에 액세스할 수 있다.
장점
보안 강화
- Pod별로 개별 IAM 역할을 할당할 수 있어 최소 권한 원칙(Least Privilege Principle)을 적용한다.
- EC2 인스턴스 프로파일에 종속되지 않으므로 자격 증명 유출 가능성을 줄인다.
관리 용이성
- Pod에서 AWS SDK를 사용하여 자격 증명 관리를 간소화합니다.
- AWS CLI 또는 SDK를 사용할 때 자동으로 자격 증명을 제공받을 수 있다.
정밀한 권한 제어
- 특정 서비스 계정과 연관된 Pod만 해당 IAM 역할의 권한을 사용할 수 있도록 제한할 수 있다.
사용 방법
EKS 클러스터 설정
- EKS 클러스터를 생성할 때 Pod Identity Webhook이 활성화되도록 설정
- IRSA를 사용하려면 OIDC 공급자를 클러스터에 연결
OIDC 공급자 생성
- eksctl 또는 AWS CLI를 사용하여 OIDC 공급자를 생성
eksctl utils associate-iam-oidc-provider \\
--region <region> \\
--cluster <cluster-name> \\
--approve
IAM 역할 생성 및 서비스 계정 연결
- 특정 권한을 가진 IAM 역할을 생성하고, 서비스 계정에 연결
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/<role-name>
Pod에 서비스 계정 지정
- Deployment 또는 Pod YAML 파일에서 서비스 계정을 참조
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
template:
spec:
serviceAccountName: my-service-account
IAM 정책 추가
- 역할에 AWS 리소스 액세스를 위한 IAM 정책을 연결
IAM Roles for Service Accounts (IRSA) vs AWS EKS Pod Identity (Agent Addon)
Feature | IRSA | Pod Identity |
OIDC Provider Requirement | Required for each cluster | Not required |
Role Tied to Cluster | Yes (OIDC URL is unique per cluster) | No (One role for multiple clusters) |
Ease of Role Sharing | Limited (Separate roles per cluster) | Simplified (One role for multiple clusters) |
Granular Permissions | Yes (Per service account in a cluster) | Yes (Supports granular policies as well) |
Setup Complexity | Moderate (OIDC provider and role per cluster) | Easier (No OIDC, centralized role management) |
AWS EKS IRSA
주요 특징
- 클러스터별 역할
- IRSA에서 각 EKS 클러스터에는 OpenID Connect(OIDC) ID 공급자를 생성하고 클러스터와 연결해야 한다.
- IAM 역할은 클러스터별 Kubernetes 네임스페이스의 특정 서비스 계정과 연결되어 있다.
- 세밀한 역할 관리
- 역할은 각 클러스터에 고유한 OIDC 발급자 URL에 연결되어 있으므로 각 클러스터 또는 서비스 계정에 대해 별도의 IAM 역할을 생성해야 한다.
- 예를 들어 IAM 역할의 ARN에는 클러스터와 관련된 OIDC 공급자 URL이 포함된다.
- 역할 범위
eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/<role-name>
- 각 IAM 역할은 클러스터의 OIDC 공급자로 범위가 지정되므로 여러 클러스터에서 역할을 공유하기가 어렵다
- 클러스터가 여러 개인 경우 클러스터별로 별도의 IAM 역할을 생성하고 이를 해당 클러스터의 서비스 계정과 연결해야 한다.
AWS EKS Pod Identity Agent Addon
주요 특징
- 클러스터 간 역할 공유
- Pod ID는 클러스터별 OIDC 공급자에 대한 필요성을 추상화
- 여러 EKS 클러스터에서 공유할 수 있는 단일 IAM 역할을 사용할 수 있다.
- 단순화된 역할 관리
- Pod ID를 사용하면 역할이 특정 OIDC 공급자 또는 클러스터에 연결되지 않는다.
- ID 매핑은 중앙에서 처리되며 클러스터 전체의 Kubernetes 서비스 계정은 동일한 IAM 역할을 사용할 수 있다.
- 작동 방식
- Pod ID 에이전트 애드온은 Kubernetes Pod와 AWS Identity and Access Management(IAM) 사이의 브리지 역할을 한다.
- Pod는 OIDC 공급자 없이 동적으로 IAM 역할을 맡는다. 이를 통해 액세스 정책을 원활하게 확장하고 보다 쉽게 관리할 수 있다.
IMDSv2 란?
IMDSv2 (Instance Metadata Service Version 2)는 AWS EC2 인스턴스의 메타데이터에 대한 보안 강화 버전의 액세스 방법이다.
IMDSv1과 IMDSv2의 주요 차이점
토큰 기반 세션
- 메타데이터 접근 전 PUT 요청으로 토큰 획득 필요
- 토큰의 TTL 지정 가능 (최대 6시간)
보안 강화
- SSRF(Server-Side Request Forgery) 공격 방지
- 네트워크 홉 제한 (기본값: 1)
- 필수 헤더 검증
엔드포인트
- 기본 URL: http://169.254.169.254
- 링크-로컬 주소 사용
접근 방법
# 토큰 획득
TOKEN=`curl -X PUT "<http://169.254.169.254/latest/api/token>" \\
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
# 메타데이터 접근
curl -H "X-aws-ec2-metadata-token: $TOKEN" \\
<http://169.254.169.254/latest/meta-data/instance-id>
Pod Identity에서의 활용
- Pod Identity는 IMDSv2와 유사한 방식으로 크레덴셜 제공
- `169.254.170.23/v1/credentials` 엔드포인트 사용
- 보안 토큰 기반의 인증 방식 채택
Reference
https://techblog.uplus.co.kr/eks-pod-identity-addon-poc-3326b6adb23e
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/pod-id-agent-setup.html
'AWS' 카테고리의 다른 글
AWS DynamoDB란? (0) | 2024.11.27 |
---|---|
ALB access Log 활성화 → S3 권한 설정 및 로그 저장 (0) | 2024.11.21 |
AWS Network ACL vs Security Group (0) | 2024.11.16 |
AWS Ingress Annotations 정리 (0) | 2024.11.07 |
AWS Assume Role이란? (0) | 2024.11.04 |