본문 바로가기
클라우드/Backstage

Backstage 보안 마스터: 설정 재정의와 비밀정보 관리의 권장 가이드

by gasbugs 2025. 12. 27.

안녕하세요! 오늘은 Backstage를 운영하면서 보안과 유연성을 동시에 잡을 수 있는 핵심 주제인 '기본값 재정의(Overrides) 및 비밀정보(Secrets) 관리의 권장 방식'에 대해 상세히 알아보겠습니다. 🛡️

Backstage는 대규모 개발자 포털인 만큼, 설정 파일에 민감한 API 키나 토큰이 포함될 가능성이 높습니다. 이를 안전하게 관리하고 환경별로 설정을 다르게 가져가는 최적의 방법을 정리해 드립니다! 💡


🏗️ Backstage 설정 시스템의 구조: app-config.yaml

Backstage의 모든 설정은 기본적으로 app-config.yaml 파일에서 관리됩니다. 하지만 운영 환경(Production), 스테이징, 로컬 개발 환경에 따라 설정이 달라져야 하며, 무엇보다 보안이 필요한 데이터는 절대 이 파일에 평문으로 저장해서는 안 됩니다. 🚫


🌟 1단계: 환경별 설정 재정의 (Overrides)

Backstage는 여러 개의 설정 파일을 겹쳐서 사용하는 계층적 설정(Hierarchical Configuration) 방식을 지원합니다.

✅ 환경별 파일 분리

권장되는 방식은 기본 설정은 app-config.yaml에 두고, 특정 환경에서만 바뀔 내용을 별도 파일에 작성하는 것입니다.

  • app-config.yaml: 모든 환경에서 공유되는 기본 설정 🏠
  • app-config.production.yaml: 운영 서버에서만 적용될 재정의 설정 🚀
  • app-config.local.yaml: 개발자 개인 로컬 환경 설정 (Git 무시 권장) 💻

🔐 2단계: 비밀정보(Secrets) 관리의 정석: 환경 변수(Environment Variables)

Backstage에서 비밀번호, 토큰, API 키와 같은 민감한 정보를 관리하는 가장 권장되는 방식은 환경 변수를 사용하는 것입니다.

📝 YAML 파일에서 환경 변수 참조하기

YAML 파일 안에 직접 비밀 정보를 적지 말고, ${ } 문법을 사용하여 시스템 환경 변수를 참조하세요.

YAML

backend:
  auth:
    keys:
      - secret: ${BACKEND_SECRET} # 환경 변수에서 읽어옴 🔑
  database:
    connection:
      password: ${POSTGRES_PASSWORD}

💡 왜 환경 변수인가요?

  1. 보안성: 소스 코드(Git)에 비밀 정보가 노출되지 않습니다.
  2. 유연성: 동일한 코드를 배포하더라도 인프라 설정(Kubernetes Secrets, AWS Secrets Manager 등)에 따라 다른 값을 주입할 수 있습니다.
  3. 표준: 클라우드 네이티브 환경에서 가장 널리 쓰이는 보안 준수 방식입니다. ☁️

🛡️ 3단계: 런타임 환경 변수 주입 전략

환경 변수를 실제로 어떻게 주입하느냐에 따라 보안의 수준이 달라집니다.

1. 로컬 개발 환경

.env 파일을 사용하거나 쉘에서 직접 내보내기(export)를 할 수 있습니다. 단, .env 파일은 반드시 .gitignore에 추가해야 합니다! ⚠️

2. 쿠버네티스(Kubernetes) 환경

Secrets 리소스를 생성하고, 이를 컨테이너의 환경 변수로 매핑하여 사용합니다.

3. 클라우드 전용 보안 서비스

AWS Secrets Manager, HashiCorp Vault, Azure Key Vault 등 전문 도구를 사용하여 배포 파이프라인(CI/CD) 과정에서 환경 변수를 동적으로 주입하는 것이 가장 강력한 보안 모델입니다. 🔒


🔍 4단계: visibility 설정을 통한 프론트엔드 보호

Backstage 설정 중 일부는 프론트엔드(브라우저)로 전달됩니다. 이때 민감한 정보가 유출되지 않도록 주의해야 합니다.

  • 기본값: 대부분의 백엔드 설정은 프론트엔드에 노출되지 않습니다.
  • 노출 제어: visibility: frontend로 명시된 설정만 브라우저가 읽을 수 있습니다. 비밀정보가 포함된 필드에는 절대로 이 설정을 사용하지 마세요! 🙅‍♂️

💡 요약: 보안을 위한 체크리스트

  1. 평문 저장 금지: app-config.yaml에 API 키를 직접 적지 않았나요? ❌
  2. 환경 변수 활용: ${VAR_NAME} 문법을 적극적으로 사용하고 있나요? ✅
  3. Git 관리: 민감한 정보가 포함된 .local.yaml이나 .env가 Git에 올라가지 않도록 설정했나요? 🛡️
  4. 최소 권한: 각 환경 변수에는 필요한 최소한의 권한만 부여된 토큰을 할당했나요? 🔑

🏁 결론: 유연하고 안전한 Backstage 운영

Backstage에서 권장하는 설정 관리의 핵심은 "기본은 파일로 공유하되, 차이는 파일로 재정의하고, 비밀은 환경 변수로 은닉한다"는 원칙입니다.

이 체계를 잘 갖춰두면 서비스 규모가 커지더라도 보안 사고 걱정 없이 안정적으로 플랫폼을 운영할 수 있습니다. 지금 바로 여러분의 app-config.yaml을 점검해 보세요! 🚀