AWS Secrets Manager
AWS Secrets Manager란?
DB 비밀번호, API 키, 접속 정보 등 민감한 정보(시크릿)를 중앙에서 안전하게 저장·관리하는 AWS 서비스다.
코드나 환경변수에 직접 자격증명을 박아넣는 대신, Secrets Manager에 저장해두고 애플리케이션이 필요할 때 API로 가져간다.
주요 특징
- 중앙 관리: DB 접속정보, 캐시 비밀번호, 외부 API 키 등을 한 곳에서 관리
- 버전 관리: 시크릿 변경 이력이 남고, 이전 버전으로 롤백 가능
- 자동 교체(Rotation): Lambda를 이용한 자동 비밀번호 교체 지원
- IAM 기반 접근 제어: 어떤 역할/서비스가 어떤 시크릿에 접근할 수 있는지 세밀하게 제어
- 암호화: KMS(Key Management Service)로 저장 시 암호화
시크릿 구조
시크릿은 키-값 JSON 형태로 저장된다.
{
"host": "my-db.cluster.ap-northeast-2.rds.amazonaws.com",
"port": "5432",
"username": "app_user",
"password": "s3cr3tP@ssw0rd",
"dbname": "mydb"
}시크릿 이름은 경로 형태로 계층화해서 관리하는 경우가 많다.
/prod/myapp/db
/prod/myapp/redis
/staging/myapp/db
Kubernetes와 연동 방법
External Secrets Operator (ESO)
쿠버네티스에서 Secrets Manager의 값을 자동으로 가져와 Kubernetes Secret으로 동기화해주는 오퍼레이터.
Secrets Manager
↓ (ESO가 주기적으로 동기화)
Kubernetes Secret
↓
파드 환경변수 또는 볼륨으로 마운트
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: my-app-secret
spec:
refreshInterval: 1h # 동기화 주기
secretStoreRef:
name: aws-secrets-store
kind: SecretStore
target:
name: my-app-secret # 생성될 Kubernetes Secret 이름
data:
- secretKey: db-password # K8s Secret의 키
remoteRef:
key: /prod/myapp/db # Secrets Manager의 시크릿 이름
property: password # JSON 내 필드SecretStore
ESO가 AWS에 접근할 때 사용할 인증 정보를 정의한다.
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: aws-secrets-store
spec:
provider:
aws:
service: SecretsManager
region: ap-northeast-2
auth:
jwt:
serviceAccountRef:
name: external-secrets-sa # IRSA로 AWS 권한 부여파드에서 사용
Kubernetes Secret으로 동기화된 값을 파드 환경변수나 볼륨으로 주입한다.
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-app-secret
key: db-passwordIAM 권한 설정
파드(서비스 어카운트)가 Secrets Manager에 접근하려면 IAM 정책이 필요하다. IRSA(IAM Roles for Service Accounts)로 파드에 역할을 부여한다.
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": "arn:aws:secretsmanager:ap-northeast-2:123456789:secret:/prod/myapp/*"
}AWS Parameter Store와의 차이
| Secrets Manager | Parameter Store | |
|---|---|---|
| 용도 | 민감한 자격증명 | 설정값, 비민감 정보도 포함 |
| 자동 교체 | 지원 | 미지원 |
| 비용 | 유료 (시크릿당 과금) | 기본 무료 (Advanced는 유료) |
| 주로 쓰는 경우 | DB 비밀번호, API 키 | 앱 설정, 기능 플래그 |
주의사항
- 시크릿 이름은 삭제 후 7~30일간 복구 대기 상태가 되며, 그 기간에는 같은 이름으로 재생성 불가
- ESO의
refreshInterval이 있어도 즉각 반영은 아님. 파드 재시작이 필요한 경우 별도 트리거 필요 - Secrets Manager는 시크릿 수와 API 호출 수 기준으로 과금됨
댓글 (0)