비밀의 의미 및 Java에서 비밀을 처리하는 방법

완료됨

비밀은 외부 세계와 공유하지 않아야 하는 문자열입니다. 데이터베이스 암호, 프라이빗 암호화 키, 개인용 액세스 토큰 등이 될 수 있습니다. 보안 향상을 위해 많은 사람들은 공격자가 암호를 추측하는 데 도움이 될 수 있는 모든 사항을 고려합니다. 예를 들어 프로덕션 데이터베이스에 대한 URL은 비밀로 볼 수 있습니다. 데이터베이스는 공개적으로 액세스할 수 없어야 합니다. 이러한 종류의 정보는 기본적으로 중요하며 코드에는 사용할 수 있는 정보가 적게 포함될수록 좋습니다.

제로 트러스트 및 제로 비밀이란?

제로 트러스트의 개념을 맹목적으로 믿어서는 안 되며, 검증되고 허가되지 않으면 회사에서 리소스에 액세스하도록 허용하지 않아야 합니다.

이 개념은 웹 애플리케이션에도 적용됩니다. 즉, 해당 코드 또는 최종 이진 파일에 비밀을 저장하지 않아야 합니다. 이것을 제로 비밀이라고 합니다.

비밀은 엄격한 액세스 규칙 및 유효성 검사를 사용하여 외부 시스템에서 관리해야 공격 위험을 줄일 수 있습니다.

Git 리포지토리에 비밀을 배치하지 않음

Git 리포지토리가 프라이빗인 경우에도 소스 코드에 암호를 저장하는 것은 바람직하지 않습니다.

  • 리포지토리에 액세스할 수 있는 누구나 중요한 데이터를 알게 됩니다.
  • 애플리케이션 이진 파일에 액세스할 수 있는 누구나 비밀을 추출할 수 있습니다.

또한 비밀이 Git에 저장되면 공격자는 리포지토리의 기록을 확인하여 언제든지 해당 비밀을 찾을 수 있으며 이러한 비밀은 오랫동안 잊혀질 수 있습니다.

실용적인 것처럼 보이더라도 소스 코드 리포지토리에 비밀을 저장하면 안 됩니다. 이 문제를 방지하려면 리포지토리를 주기적으로 확인하다가 실수로 저장한 암호나 데이터베이스 URL을 찾으면 경고를 보내는 자동 도구를 사용할 수 있습니다.

환경 변수 사용

비밀을 관리하는 가장 쉬운 방법은 환경 변수를 사용하는 것입니다. 이러한 방법에는 다음과 같은 여러 가지 이점이 있습니다.

  • 쉽게 사용할 수 있습니다.
  • 모든 시스템(비클라우드 시스템 포함)에서 작동합니다.
  • 모든 사용자가 알 수 있고 작동 방식을 이해할 수 있습니다.

그러나 충분히 안전하지는 않습니다. 시스템의 모든 프로세스가 읽을 수 있으며, Java 시스템의 JMX를 사용하여 쉽게 노출되기 때문입니다.

결과적으로 환경 변수는 종종 제로 트러스트를 위한 첫 번째 단계로 인식됩니다. 비밀을 소스 코드에 직접 저장하는 것보다 더 안전하지만, 관리 기능이 없고 공격자가 쉽게 액세스할 수 있습니다.

Kubernetes 비밀 사용

Kubernetes에는 또 다른 좋은 방법인 secrets라는 개념이 있습니다. 이러한 비밀은 애플리케이션의 파일 시스템에 파일로 로드할 수 있습니다. 그러면 Java 프로그램에서 시작할 때 해당 파일을 읽고 이러한 비밀에 액세스할 수 있습니다. Spring Frameworks와 같은 도구에도 이 메커니즘에 대한 표준 지원이 있으므로 이러한 비밀을 쉽고 효율적인 방식으로 사용할 수 있습니다.

이러한 메커니즘에서는 필요한 프로세스에서만 해당 파일을 읽을 수 있으므로 환경 변수보다 더 안전합니다. 또한 풍부한 Kubernetes 에코시스템을 활용하고, 클라우드 공급자가 제공하는 도구를 비롯한 다양한 관리 도구를 통해 관리할 수 있습니다.

Kubernetes 비밀은 Kubernetes에 적합한 솔루션이지만 Kubernetes로 제한되며, Kubernetes 인프라를 관리하는 데 사용되는 도구에 따라 고급 관리 기능이 없을 수 있습니다.

비밀 저장소 사용

Hashicorp Vault 또는 Azure Key Vault와 같은 비밀 저장소는 비밀 관리를 위한 특수 소프트웨어입니다. 사용자에게 권한을 부여하고, 보안 키를 순환하고, 어떤 애플리케이션이 어떤 비밀에 액세스할 수 있는지를 확인하는 풍부한 관리 시스템을 제공합니다.

또한 외부 API를 제공하므로 어떤 시스템에서도 사용할 수 있습니다. 예를 들어 Virtual Machines, Azure App Services, Azure Kubernetes Services 또는 Azure Spring 앱을 비롯한 모든 Azure 서비스에서 Azure Key Vault를 사용할 수 있습니다.

비밀 저장소는 비밀 관리를 위한 가장 안전한 고급 솔루션이지만 전용 도구를 사용해야 합니다.