AWS EKS(Elastic Kubernetes Service) 환경에서 Python 기반 서비스가 S3, DynamoDB와 같은 AWS 리소스에 접근하기 위해 boto3.client를 사용할 경우, aws_access_key_id 및 aws_secret_access_key를 코드나 설정 파일에 명시적으로 설정할 필요가 있는지에 대해 많은 분들이 궁금해하십니다.
결론적으로, AWS의 고급 보안 기능을 활용하시면 해당 자격 증명을 직접 설정할 필요가 없습니다.
이는 AWS EKS가 제공하는 핵심 기능 중 하나인 IRSA(IAM Roles for Service Accounts) 덕분입니다.
1. Access Key를 설정하지 않아도 되는 근본적인 이유
일반적으로 AWS 환경 외부에서 boto3 라이브러리를 사용할 때는 사용자 자격 증명을 설정해야 합니다. 그러나 EKS 클러스터 내부에서는 IRSA를 통해 Kubernetes의 Service Account에 AWS IAM Role의 권한을 연결할 수 있습니다.
작동 원리:
- 신뢰 관계 설정: 특정 Service Account가 특정 IAM Role의 권한을 위임받아 사용할 수 있도록 신뢰 관계가 구축됩니다.
- 임시 자격 증명 주입: 이 Service Account를 사용하는 파드(Pod)가 생성되면, EKS는 AWS STS(Security Token Service)를 통해 유효 기간이 짧은 임시 자격 증명을 발급받아 해당 파드의 파일 시스템에 자동으로 주입합니다.
- Boto3의 자동 감지: 파드 내에서 실행되는 Python 코드의
boto3라이브러리는 AWS SDK의 자격 증명 해결 체인(Credential Provider Chain) 에 따라 이 임시 자격 증명을 자동으로 감지하고 사용하여 AWS API 호출을 수행합니다.
따라서 개발자는 AWS 자격 증명을 직접 관리하거나 코드에 노출할 필요 없이 안전하게 AWS 리소스에 접근할 수 있게 됩니다.
2. IRSA 활용의 주요 이점
IRSA를 채택함으로써 서비스의 보안성과 운영 효율성을 동시에 높일 수 있습니다.
- 보안 강화 및 자격 증명 노출 방지: 가장 큰 이점은 민감한
access key와secret key를 코드, 환경 변수, 또는 컨테이너 이미지에 저장할 필요가 없어진다는 것입니다. 이는 자격 증명 유출 위험을 근본적으로 차단합니다. - 최소 권한 원칙 구현: 각 파드별로 필요한 최소한의 권한만 가진 IAM Role을 할당할 수 있습니다. 예를 들어, S3 버킷에 읽기만 필요한 서비스와 쓰기가 필요한 서비스를 명확하게 분리하여 권한을 부여할 수 있습니다.
- 자동화된 자격 증명 순환: IRSA를 통해 발급되는 자격 증명은 임시 토큰이며, AWS에 의해 자동으로 만료되고 갱신됩니다. 수동으로 자격 증명을 주기적으로 교체해야 하는 운영 부담이 사라집니다.
3. IRSA를 통한 설정 개요
IRSA를 적용하기 위한 일반적인 과정은 다음과 같습니다.
- IAM Role 생성: 필요한 AWS 권한(예: S3 읽기 전용)을 포함하는 IAM Role을 생성하고, EKS 클러스터의 OIDC(OpenID Connect)를 신뢰하도록 설정합니다.
- Kubernetes Service Account 연결: Kubernetes Service Account를 생성하고, 여기에 Annotation(
eks.amazonaws.com/role-arn)을 추가하여 1단계에서 생성한 IAM Role의 ARN을 연결합니다. - 파드에 Service Account 지정: 배포(Deployment) 파일의
spec섹션에서serviceAccountName필드에 해당 Service Account 이름을 지정합니다.
이러한 설정을 완료하면, 파드 내의 Python 애플리케이션은 아래와 같이 간단하고 안전하게 AWS 서비스에 접근할 수 있습니다.
import boto3
# 자격 증명 없이, Boto3가 IRSA를 통해 자동으로 획득한 임시 토큰을 사용합니다.
s3_client = boto3.client('s3')
# S3 작업 수행
response = s3_client.list_buckets()
AWS EKS 환경에서 IRSA를 적극적으로 활용하시어 보다 안전하고 관리하기 용이한 클라우드 네이티브 애플리케이션을 구축하시기를 권장드립니다.
'개발 (Development) > AWS' 카테고리의 다른 글
| [AWS] Amazon SageMaker 사용법 정리 (0) | 2025.09.14 |
|---|---|
| [AWS] ECR 리포지토리에서 모든 이미지 태그 조회하기 (0) | 2025.09.07 |
| [AWS] AWS 환경에서 모델 학습 API 호출 시 Broken pipe 에러 해결 과정 (0) | 2025.06.28 |
| [AWS] S3 객체 권한 변경 - PutObjectAcl (0) | 2025.04.12 |
| [AWS] AWS ECR에 MFA로 Docker 로그인 자동화하기 (.bat 파일) (0) | 2025.04.12 |