47 lines
2.1 KiB
Markdown
47 lines
2.1 KiB
Markdown
# Security Policy
|
|
|
|
## 저장소에 둘 수 없는 항목
|
|
|
|
- 평문 비밀번호, token, access key, private key
|
|
- base64로만 인코딩한 Kubernetes `Secret`
|
|
- kubeconfig와 클라우드 provider credential
|
|
- Terraform/OpenTofu state, plan, 복호화 산출물
|
|
- 실제 비밀이 포함된 `tfvars`, Helm values, `.env`
|
|
|
|
`.gitignore`는 실수 완화 장치일 뿐 보안 통제가 아닙니다. 비밀이 한 번이라도
|
|
커밋되었다면 history 삭제 여부와 관계없이 즉시 폐기하고 회전합니다.
|
|
|
|
## 허용하는 비밀 관리 방식
|
|
|
|
프로젝트마다 다음 중 하나를 ADR로 선택하고 CI와 운영 절차를 함께 정의합니다.
|
|
|
|
- External Secrets 계열 리소스로 외부 secret manager를 참조
|
|
- SOPS와 KMS/age를 사용해 암호화한 파일만 저장
|
|
- 조직에서 승인한 동등한 GitOps 비밀 관리 방식
|
|
|
|
SOPS로 암호화한 Kubernetes Secret은 검증 가능한 규칙을 위해
|
|
`*.sops.yaml`, `*.sops.yml` 또는 `*.sops.json` 이름을 사용합니다.
|
|
|
|
암호화 키, 복호화 권한과 secret manager 접근은 workload identity/OIDC와
|
|
최소 권한 원칙으로 부여합니다. 장기 cloud access key를 CI secret으로
|
|
사용하지 않습니다.
|
|
|
|
## State와 CI
|
|
|
|
- remote state는 암호화, locking, versioning을 활성화합니다.
|
|
- 환경과 독립 장애 영역은 별도 state로 분리합니다.
|
|
- production apply에는 승인, 직렬화와 감사 로그를 적용합니다.
|
|
- fork 또는 신뢰하지 않는 PR 코드에 privileged credential을 제공하지 않습니다.
|
|
- CI action, provider, module, chart와 image 버전을 검토 가능한 방식으로 고정합니다.
|
|
|
|
## 노출 사고 대응
|
|
|
|
1. 노출된 credential과 파생 token을 폐기하고 회전합니다.
|
|
2. 영향받은 시스템의 접근 로그와 변경 이력을 확인합니다.
|
|
3. 저장소 history와 artifact/cache에서 민감 데이터를 제거합니다.
|
|
4. 원인과 영향 범위, 재발 방지 조치를 incident 문서에 기록합니다.
|
|
5. 조직의 보안 연락 채널로 보고합니다.
|
|
|
|
이 템플릿을 실제 조직에서 사용하기 전에 비공개 보안 연락처와 대응 SLA를 이
|
|
문서에 추가해야 합니다.
|