TL; DR
구성 파일 대신 환경 변수를 사용하는 데는 여러 가지 이유가 있지만 간과해야 할 가장 일반적인 두 가지 이유는 대역 외 구성 의 유틸리티 값 과 서버, 응용 프로그램 또는 조직 역할 간의 향상된 분리 입니다. 가능한 모든 이유에 대한 철저한 목록을 제시하기보다는이 두 가지 주제에 대해서만 답변하고 보안에 미치는 영향에 대해 간략하게 설명합니다.
대역 외 구성 : 소스 코드에서 비밀 분리
모든 비밀을 구성 파일에 저장하는 경우 해당 비밀을 각 서버에 분배해야합니다. 즉, 코드와 함께 비밀을 수정 제어로 확인하거나 비밀에 대해 완전히 별도의 저장소 또는 배포 메커니즘을 갖습니다.
비밀을 암호화해도이 문제를 해결하는 데 도움이되지는 않습니다. 키 관리 및 배포에 대해 걱정해야하므로 문제를 한 번에 제거하면됩니다.
간단히 말해서, 환경 변수는 개발과 작업을 분리하려는 경우 서버 별 또는 애플리케이션 별 데이터를 소스 코드에서 이동하는 방법입니다. 소스 코드를 게시 한 경우 특히 중요합니다!
분리 향상 : 서버, 응용 프로그램 및 역할
비밀을 유지하기위한 구성 파일을 확실히 가질 수 있지만 비밀을 소스 코드에 저장하면 특정성에 문제가 있습니다. 각 비밀 세트에 대해 별도의 브랜치 또는 저장소가 있습니까? 올바른 비밀 세트가 올바른 서버에 도달하게하려면 어떻게해야합니까? 또는 어느 곳에서나 동일한 "비밀"(또는 하나의 파일에 모두있는 경우 모든 곳에서 읽을 수 있음)을 가지고있어 시스템 보안 제어에 실패하는 경우 더 큰 위험을 구성하여 보안을 줄입니까?
각 서버 또는 응용 프로그램마다 고유 한 비밀을 유지하려면 환경 변수가 많은 파일을 관리해야하는 문제로 해결됩니다. 새 서버, 응용 프로그램 또는 역할을 추가하는 경우 새 파일을 만들거나 이전 파일을 업데이트 할 필요가 없습니다. 문제가되는 시스템의 환경 만 업데이트하면됩니다.
보안에 관한 생각
커널 / 메모리 / 파일 보안에 대한 철저한 탐색은이 답변의 범위를 벗어나지 만, 제대로 구현 된 시스템 별 환경 변수는 "암호화 된"비밀보다 안전하지 않다는 점을 지적 할 가치가 있습니다. 어느 경우 에나, 목표 시스템은 암호 해독 된 비밀 을 사용하기 위해 어느 시점에서 메모리에 여전히 보유해야 합니다.
주어진 노드의 휘발성 메모리에 값을 저장하면 오프라인으로 복사 및 공격 할 수있는 온 디스크 파일이 없다는 점도 지적 할 가치가 있습니다. 이것은 일반적으로 메모리 내 비밀에 대한 이점으로 간주되지만 확실히 결정적인 것은 아닙니다.
환경 변수와 다른 비밀 관리 기술의 문제는 절대적 문제보다는 보안 및 유용성 트레이드 오프 에 관한 것입니다. 귀하의 마일리지가 다를 수 있습니다.