AWS Parameter Store, Secrets Manager를 이용한 환경 변수 관리
.env 파일의 한계를 넘어 AWS Parameter Store와 Secrets Manager를 활용해 Django 프로젝트의 환경 변수를 안전하고 확장 가능하게 관리하는 방법

.env 파일의 한계점
보안 위험: .env 파일이 실수로 Git 저장소에 업로드되거나 서버에서 탈취될 위험 존재
관리의 어려움: 환경별로 다른 .env 파일을 관리하고 동기화하는 과정에서 실수 발생 가능
권한 제어의 한계: 특정 개발자에게 세분화된 권한 제어 불가능
감사 추적의 부재: 누가 언제 중요한 설정값을 변경했는지 추적 어려움
AWS Parameter Store vs Secrets Manager
Parameter Store
용도: 일반 설정 값, DB 연결 문자열, API 키 등
보안: AWS KMS를 통한 암호화 (SecureString)
가격: Standard 등급은 월 10,000개의 API 요청까지 무료
특징: 계층 구조, 버전 관리, IAM 연동, Standard(4KB)/Advanced(8KB) 등급
Secrets Manager
용도: 데이터베이스 자격 증명, API 키 등 매우 민감한 정보
보안: AWS KMS를 통한 암호화 (기본)
가격: Secret 당 월 $0.40 + API 호출 비용
특징: 자동 암호 키 교체(RDS, DocumentDB 등 기본 지원), 교차 계정 접근
AWS 서비스 설정
파라미터 및 보안 암호 생성
이름 규칙:
/{프로젝트명}/{환경}/{설정명}형태로 계층적 구조 사용Parameter Store: SecureString 타입으로 암호화하여 저장
Secrets Manager: 키/값 페어 형태로 민감 정보 저장
IAM 권한 설정
최소 권한 원칙: 필요한 리소스에만 접근 허용
IAM Role 사용: Access Key를 하드코딩하지 말고 EC2나 ECS Task에 IAM Role 부여
필요 권한:
ssm:GetParameter,ssm:GetParameters,secretsmanager:GetSecretValue,kms:Decrypt
Django 연동 구현
boto3 클라이언트 설정
boto3라이브러리를 사용해 AWS 서비스와 연동@lru_cache를 활용해 API 호출 최소화 및 성능 최적화GetParametersAPI로 여러 파라미터 배치 처리 권장AWS 환경 여부를 판단해 로컬과 클라우드 환경 분기 처리
settings.py 분기 처리
AWS 환경: Parameter Store와 Secrets Manager에서 설정값 로드
로컬 환경: 기존 .env 파일 사용
환경별로 적절한 설정 소스 자동 선택
실무 활용 팁
혼용 전략
일반 설정: Parameter Store 사용 (비용 절약)
민감 정보: Secrets Manager 사용 (보안 강화)
캐싱의 중요성
settings.py는 애플리케이션 시작 시 한 번만 실행
API 요청마다 AWS 호출하는 구조 방지
@lru_cache로 동일 파라미터 요청 캐싱
Secrets Rotation 활용
RDS, DocumentDB 등은 자동 교체 기본 지원 (커스텀 Lambda 필요한 경우도 있음)
30일, 90일 등 주기적 교체로 보안 수준 향상
다운타임 없이 자동 반영
Last updated
