애플리케이션 보안에서 비밀 정보(secret)란 인증 및 권한 부여 과정에서 그 소유자가 자신이 주장하는 신원과 자격을 갖추고 있음을 증명하는 모든 정보를 의미합니다. 악의적인 행위자가 비밀 정보에 접근하면 시스템에 무단으로 침입하여 기업 기밀과 고객 정보를 훔치거나 데이터를 볼모로 금전을 요구하는 등 다양한 목적으로 악용할 수 있습니다.

대표적인 예로 애플리케이션이 데이터베이스에 액세스할 수 있도록 하는 사용자 이름과 비밀번호가 있지만, 시크릿에는 API 키, 자격 증명, 인증서, 개인 키 등 다양한 유형의 정보도 포함될 수 있습니다. 시크릿은 조직의 자산에 대한 액세스를 제어하는 데 사용되므로, 조직이 침해될 위험을 줄이려면 이를 안전하게 저장하고 보호하는 것이 매우 중요합니다.

시크릿 관리란 무엇인가요?

비밀 관리는 조직이 다음을 수행하기 위해 사용하는 프로세스입니다:

  • 민감한 데이터 식별
  • 데이터 분류
  • 데이터에 레이블 지정
  • 데이터를 안전하게 저장하세요
  • 시크릿 배포
  • 비밀 정보를 정기적으로 교체

조직이 모놀리식 아키텍처에서 마이크로서비스 아키텍처로 전환하면, 각각 고유한 자격 증명을 사용하는 독립적인 애플리케이션 및 인프라 구성 요소의 수가 증가하므로 관리해야 할 시크릿도 훨씬 많아집니다.

시크릿을 저장하는 방법

비밀 정보를 안전하게 저장하는 두 가지 방법을 자세히 살펴보겠습니다:

Vault

볼트 방식에서는 타사 비밀 관리 도구를 설치합니다. 볼트 솔루션은 권한이 없는 사용자가 비밀에 액세스하지 못하도록 각 비밀을 암호화합니다. 볼트는 설정된 정책에 따라 사용자가 비밀에 액세스할 수 있도록 API를 제공합니다. API 사용자가 인증을 완료하면 권한이 부여된 비밀에만 액세스할 수 있습니다.

단점:

  • 솔루션과 자격 증명을 직접 관리해야 합니다
  • 팀이 독립적으로 활용하려면 이를 뒷받침하는 인프라를 구축해야 하며, 그렇지 않으면 사용하기 어렵습니다.

장점:

  • 업계에서 익숙하게 사용됨(대부분의 개발자가 이러한 도구의 사용법을 알고 있음)
  • 볼트 공급업체가 제공하는 다른 도구와 쉽게 통합 가능
  • 일부 볼트는 무료로 사용할 수 있습니다

개발자가 암호화된 보안 정보를 저장하고 관리하는 데 사용할 수 있는 도구는 시중에 많이 나와 있습니다. 중앙에서 자동화된 보안 정보 관리 도구를 사용하는 방법의 예는 블로그 게시물 “HashiCorp Vault로 NGINX의 SSL 개인 키 보호하기”에서 확인하세요.

클라우드 제공업체

또 다른 방법은 클라우드 공급자가 서비스 형태로 제공하는 비밀 관리를 사용하는 것입니다. 이 방식의 장점 중 하나는 비밀 관리 도구가 일반적으로 관리형 데이터베이스와 같은 다른 클라우드 서비스와 긴밀하게 통합된다는 점입니다. 클라우드 공급자 서비스는 자동 교체와 같은 기능도 제공할 수 있지만, 이 옵션이 다운타임을 유발하는지는 향후 추가 조사가 필요합니다.

단점:

  • 일반적으로 무료가 아님

장점:

  • 액세스 및 UI는 클라우드 제공업체에서 설정하고 관리합니다.
  • 다른 클라우드 제공업체 서비스와 원활하게 통합됩니다
  • 코드형 인프라(IaC) 도구로 관리 가능

비밀 정보를 저장하면 안 되는 곳

보안 비밀이 잠금 해제되어 액세스될 때 애플리케이션에 장애가 발생하지 않도록 신중하게 관리해야 합니다. 가장 좋은 방법은 보안 비밀을 소스 제어 시스템에 절대 커밋하지 않는 것입니다. 보안 비밀을 소스 제어 시스템에 저장하면 팀이나 개인이 코드 또는 애플리케이션을 업데이트하는 과정에서 실수로 보안 비밀에 액세스하거나 보안 비밀이 유출되어 조직에 심각한 피해가 발생할 수 있습니다. 따라서 보안 비밀을 잠깐이라도 소스 제어 시스템에 커밋했다면 유출된 것으로 간주해야 합니다. 민감한 데이터는 리포지토리에서 제거하고 소스 제어 시스템의 기록에서도 완전히 삭제해야 합니다.