핵심 요약
Pulumi ESC(Environments, Secrets, Configurations) 6개월 production. AWS SM·1Password·Doppler 통합 + 계층화 config. .env 파일 0개, 환경별 차이 명시적, audit log 자동.
1. 환경 정의 — YAML
# environments/prod.yaml
values:
aws:
region: ap-northeast-2
db:
host: prod-db.cluster.amazonaws.com
password:
fn::secret:
ciphertext: ZmM6QUVTLzI1Ni...
api:
stripe_key:
fn::open::aws-secrets:
region: ap-northeast-2
get:
secretId: prod/stripe-api-key
2. 계층 — staging은 prod 상속
# environments/staging.yaml
imports:
- prod
values:
db:
host: staging-db.cluster.amazonaws.com
# password 등은 자동 상속, override만 명시
3. 사용 — application 코드
// Node SDK
import { EscClient } from '@pulumi/esc-sdk'
const esc = new EscClient()
const env = await esc.openEnvironment('myorg', 'prod')
const dbHost = env.values.db.host
const dbPass = env.values.db.password // 자동 복호화
.env 파일 fetching·rotate 자동. K8s Secrets와 동기화 가능.
4. 효과 — 6개월
- Secret 누출 사고 0건 (이전 12개월 4건)
- 환경 추가 시간 4h → 20분
- Audit log — 모든 secret 접근 30일 보관, SOC2 통과
- 비용 월 $180 (5개 환경 × 18 secret avg)
5. 함정
- ESC 자체 down — secret 캐시 정책 명확히, 5분 fallback 권장
- Lambda cold start — ESC SDK 초기화 ~200ms, 프록시 패턴 검토
- rotation 자동화 — ESC는 fetch만, 실제 rotation은 backend(AWS SM 등)에서
- CI 통합 — GitHub Actions에서 OIDC token으로 ESC 접근, long-lived token 금지

댓글 0