Files

2.1 KiB

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를 이 문서에 추가해야 합니다.