비밀이란 무엇인가?
Source: Dev.to
1. What is a secret?
비밀(secret) 은 무단 접근으로부터 보호해야 하는 모든 민감한 정보를 의미합니다.
예시
- API 키
- 액세스 토큰
- 데이터베이스 비밀번호
- 개인 키(
.pem) - Confluent Cloud 자격 증명
- Terraform 백엔드 자격 증명
- OAuth 토큰
- SSH 키
목표: 비밀을 저장 시 암호화하고, 전송 시 암호화하며, 평문(예: 저장소, 로그, 아티팩트)으로 절대 저장하지 않음.
2. Why secrets management is critical
시니어 DevOps 엔지니어는 다음을 방지해야 합니다:
- 자격 증명 누출
- 무단 접근
- Git에 실수로 커밋
- Terraform, Kubernetes, Docker, CI/CD 파이프라인에 하드코딩
비밀 누출 시 결과
- 환경 침해
- 데이터 유출
- 수천 달러가 청구되는 무단 AWS 사용
- 저장소 탈취
이 때문에 일반 파일 대신 보안 비밀 저장소를 사용합니다.
3. Secret storage options DevOps must know
| 도구 | 사용 위치 | 장점 | 단점 |
|---|---|---|---|
| GitHub Secrets | GitHub CI/CD | 사용하기 쉬우며 암호화됨 | 런타임 애플리케이션에 사용 불가 |
| AWS Secrets Manager | AWS에서 실행되는 애플리케이션 | 자동 회전 및 IAM 통합 | 대규모 사용 시 비용이 많이 듦 |
| AWS SSM Parameter Store | AWS Systems Manager | Secrets Manager보다 저렴함 | 회전 기능이 기본 제공되지 않음 |
| HashiCorp Vault | 엔터프라이즈 멀티클라우드 | 가장 안전하고 동적 비밀 제공 | 관리 복잡함 |
4. GitHub Secrets — Used for CI/CD only
Where used
- GitHub Actions CI/CD 파이프라인
What it stores
- AWS 액세스 키 + 비밀 키
- Docker 레지스트리 토큰
- Terraform Cloud 토큰
- Confluent Cloud 자격 증명
- 모든 배포 API 키
How it works
- GitHub은 libsodium으로 비밀을 암호화합니다.
- 당신의 저장소에서 실행되는 GitHub Actions만 접근할 수 있습니다.
- 포크된 PR에서는 사용할 수 없습니다.
Security rules for senior DevOps
- 애플리케이션용 데이터베이스 비밀번호는 절대 저장하지 마세요.
- 장기 AWS 키는 저장하지 말고 OIDC 사용을 권장합니다.
- 키는 90일마다 회전하세요.
- 저장소에 최소 권한만 부여합니다.
- 복잡한 JSON은 저장하지 말고 AWS Parameter Store를 사용하세요.
What GitHub Secrets do not replace
- AWS Secrets Manager
- HashiCorp Vault
- Kubernetes Secrets
- 애플리케이션 런타임 비밀
GitHub Secrets는 CI/CD 전용입니다.
5. AWS Secrets Manager — Production‑grade secret storage
Where used
- AWS 상의 프로덕션 마이크로서비스
Features
- 자동 회전(Lambda 활용)
- 버전 히스토리
- IAM을 통한 다중 계정 접근
- 리전 간 복제
- KMS 내장 암호화
Typical use cases
- RDS 마스터 비밀번호
- Confluent API 비밀
- Stripe 키
- OAuth 토큰
- ECS 작업용 DB 자격 증명
Access via IAM
ecsTaskExecutionRole:
can access secret: arn:aws:secretsmanager:...
Code example (ECS task environment)
{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:us-east-2:xxx:secret:db_pass"
}
When to choose Secrets Manager
- 회전이 필요할 때.
- 엄격한 감사가 필요할 때.
- 크로스‑계정 애플리케이션을 관리할 때.
6. AWS SSM Parameter Store
Overview
- SecureString 파라미터를 저장합니다.
Cost
- 표준 티어는 $0 (Secrets Manager는 비밀당 월 약 $0.40).
Ideal for
- 개발 / QA / 비핵심 비밀.
Use cases
- 마이크로서비스 설정값
- 회전되지 않는 토큰
- S3 버킷 이름
- 기능 플래그
Not recommended for
- 프로덕션 데이터베이스 비밀번호(회전 지원 안 함).
7. HashiCorp Vault — The most advanced system
Why Vault is used
- AWS, GCP, Azure, Kubernetes, 온‑프레미스 모두 지원.
- 동적 비밀(임시 DB 자격 증명).
- 암호화‑as‑a‑service(Transit).
- PKI 인증서 발급.
- 세밀한 접근 정책.
- 감사 로그.
- 온‑프레미스 혹은 HCP Vault Cloud에서 운영 가능.
Dynamic secrets example
Vault는 PostgreSQL 사용자명/비밀번호를 생성할 수 있습니다:
- 유효 기간 1 시간
- 이후 자동 삭제
CI/CD 작업이나 고보안 환경(은행, 의료, 핀테크)에 최적입니다.
Notable users
- Uber
- Stripe
- Goldman Sachs
- Netflix
8. Kubernetes Secrets (optional but DevOps must know)
Storage
- etcd 내부에 저장(프로덕션에서는 KMS로 암호화).
Used for
- API 키
- DB 비밀번호
- TLS 인증서
Mounted as
- 환경 변수
- 파일
9. Terraform & Secrets — Senior level knowledge
Where not to store secrets
- Git 저장소
.tf파일 또는 모듈- Terraform 상태 파일
How secrets must be passed
terraform.tfvars(로컬에서만)- CI/CD 환경 변수
- AWS SSM Parameter Store
- AWS Secrets Manager
Example bad code (do not do)
password = "MySecret123"
Better practice
password = var.db_password
Recommended best practice
password = data.aws_secretsmanager_secret_version.db_password.secret_string
10. How secrets flow in a real CI/CD pipeline
- 비밀을 AWS Secrets Manager에 저장합니다.
- EC2/ECS/Lambda는 IAM 역할을 통해 해당 비밀에 접근합니다.
- GitHub Actions는 다음만 저장합니다:
- AWS Access Key
- AWS Secret Key
- Confluent API key
- Terraform은 인프라를 배포하면서 ARN으로 비밀을 참조합니다.
- 애플리케이션은 IAM 역할 권한을 이용해 AWS SDK로 비밀을 가져옵니다.
11. What NOT TO DO (Senior DevOps knowledge)
- ❌ 절대 비밀을 GitHub 저장소에 저장하지 마세요.
- ❌ 절대 비밀을 Slack이나 Teams에 저장하지 마세요.
- ❌ 절대 비밀을 Docker 이미지에 저장하지 마세요.
- ❌ 절대 비밀을 YAML 파일에 저장하지 마세요.
- ❌ 절대 비밀을 Terraform 상태에 저장하지 마세요.
- ❌ 절대 비밀을 코드 주석에 남기지 마세요.
- ❌ 절대 CI 로그에 비밀을 echo 하지 마세요.
- ❌ 절대 이메일로 비밀을 보내지 마세요.
비밀이 유출되면 즉시 회전하세요.
12. Interview‑level explanation (you can say this)
“우리 파이프라인에서는 GitHub Secrets를 CI/CD 자격 증명에만 사용합니다.
애플리케이션 런타임 비밀은 회전 요구에 따라 AWS Secrets Manager 또는 SSM Parameter Store를 사용합니다.
Terraform에서는 비밀을 런타임에 비밀 저장소에서 가져와 하드코딩을 피합니다.
엔터프라이즈 멀티‑클라우드 환경에서는 HashiCorp Vault를 AWS IAM 및 Kubernetes 서비스 계정과 연동해 안전한 인증과 동적 비밀을 제공합니다.
모든 비밀은 KMS로 암호화되며 로그에 절대 노출되지 않습니다.”
Secrets flow — High‑level diagram
┌──────────────────────────┐
│ Developer Machine │
│ (Push Git Changes) │
└─────────────┬────────────┘
│
▼
┌────────────────────────┐
│ GitHub Repository │
└─────────────┬──────────┘
│
▼
┌──────────────────────────────┐
│ GitHub Actions Runner │
│ (CI/CD Workflow Execution) │
└──────────────┬────────────────┘
SECRETS ENTER HERE FROM GITHUB →│
▼
┌───────────────────────────────────────────────────────────────────────────────┐
│ GitHub Secrets Storage │
│ - AWS_ACCESS_KEY_ID │
│ - AWS_SECRET_ACCESS_KEY │
└───────────────────────────────────────────────────────────────────────────────┘