비밀번호 관리는 애플리케이션의 자동화된 구성 요소에 대한 자격 증명을 보호하고 제어하는 프로세스입니다.
이 글을 읽은 후에 다음을 할 수 있습니다:
관련 콘텐츠
인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!
글 링크 복사
비밀 관리는 유출될 경우 악의적이거나 권한이 없는 당사자가 애플리케이션 인프라에 액세스할 수 있게 해주는 중요한 정보를 안전하게 저장하는 관행입니다. 여기서 "비밀" 은 애플리케이션 인프라의 서로 다른 부분을 서로 연결할 수 있도록 하는 암호화 키, API 키, SSH 키, 토큰, 비밀번호, 인증서를 말합니다.
사용자는 애플리케이션에 로그인하기 위해 하나의 비밀번호만 알면 되지만, 그 애플리케이션 자체는 서로 통신하기 위해 모두 자격 증명(비밀)이 필요한 다양한 부분으로 구성되어 있습니다.
여러 애플리케이션의 비밀번호를 기억하는 것이 얼마나 어려운지, 특히 정기적으로 비밀번호를 업데이트해야 하는 경우 얼마나 어려운지 거의 모든 사람이 잘 알고 있습니다. 이 때문에 많은 사람이 비밀번호를 적어두거나 모든 애플리케이션에서 동일한 비밀번호를 사용하는 등 안전하지 않은 비밀번호 관행을 사용하기 시작합니다.
개발자는 소프트웨어를 만들 때 비슷한 문제에 직면합니다. 애플리케이션이 작동하는 인프라 또는 기업에서 실행하는 데 필요한 인프라에는 수백 또는 심지어 수백만 개의 키, 토큰, 비밀번호가 필요할 수 있습니다. 이러한 모든 비밀을 관리하는 것은 매우 번거롭기 때문에 애플리케이션 소프트웨어에 하드코딩하는 경우가 많습니다. 이들 비밀은 업데이트되지 않을 수 있으며 때로는 일반 텍스트로 코딩되어 있어 공격자에게 취약할 수 있습니다.
앱 개발의 맥락에서 비밀은 자격 증명으로 사용되는 데이터 조각입니다. 개인이 이메일에 액세스하려면 사용자 이름과 비밀번호를 입력하여 인증해야 하는 것처럼, 이메일 애플리케이션(또는 모든 애플리케이션)의 비인간 구성 요소도 애플리케이션이 작동하려면 서로 인증해야 합니다. 이러한 구성 요소에는 API 연결, 컨테이너, 마이크로서비스, 스크립트, 함수, 자동화 도구가 포함될 수 있습니다. 인증을 위해 이들은 자격 증명을 사용합니다.
비밀에는 다음이 포함될 수 있습니다.
LEGO®와 같은 어린이용 조립 블록이 서로 맞물려 작지만 튼튼한 구조물을 만들어내는 방식을 생각해 보세요. 비밀은 애플리케이션을 하나로 묶어주는 잠금 장치와 같습니다. 이 기능이 없으면 애플리케이션이 제대로 작동하지 않습니다.
서로 합체하기 위해 항상 동일한 볼록 부분이 있는 조립 블록과 달리, 비밀은 정기적으로 변경해야 합니다. 비밀을 너무 오래 사용하면 공격자가 무차별 대입 공격을 통해 비밀을 추측해낼 수 있습니다. 또한 비밀을 오래 사용할수록 유출될 가능성이 높아집니다.
비밀을 교체해야 하므로 비밀을 안전하게 관리하기가 더 복잡해집니다. 업데이트한 비밀번호를 기억하는 것이 어려운 것처럼, 정기적으로 비밀번호를 교체하는 것도 큰 문제입니다. 수십 개의 앱이 단일 API에 의존할 수 있으며, API에 새 자격 증명이 필요한 경우 모든 앱이 비밀을 업데이트해야 합니다. 어떤 경우에는 조직에서 해당 API에 얼마나 많은 앱이 종속되어 있는지, 그리고 비밀이 업데이트될 때 어떤 앱이 중단되는지조차 알지 못할 수도 있습니다.
많은 사람이 비밀번호를 업데이트하지 않는 것을 선호하는 것처럼, 개발 팀에서는 효율성을 위해 비밀 업데이트를 아예 하지 않는 경우도 있습니다. 심지어 비밀을 변경할 필요가 없다고 가정하고 스크립트와 함수에 비밀을 하드코딩할 수도 있습니다.
수동 공유: 비밀 관리 솔루션이 없는 개발자는 개발 팀 간에 비밀을 공유하기 위해 수동 프로세스를 사용해야 하므로 문서화가 부실해지고 보호되지 않은 환경에 비밀이 노출될 수 있습니다.
타사 계정: 외부 사용자가 내부 API 및 데이터베이스에 액세스해야 할 수 있습니다. 이들은 조직 외부에 있으므로 안전한 비밀 관리를 실행하기가 어렵습니다.
클라우드 컴퓨팅: 클라우드 환경은 광범위하고 일시적입니다. 새로운 가상 머신 인스턴스는 정기적으로 서비스를 지원하기 위해 스핀업되며, 모든 인스턴스에는 고유한 비밀이 필요합니다. 또한 클라우드 앱을 사용하면 거의 무제한의 위치에서 광범위하게 액세스할 수 있으므로 관리해야 하는 자격 증명과 권한의 수가 크게 늘어납니다.
중앙 집중식 관리 부족: 여러 사람이 저녁 식사 시간을 합의하는 것이 어려운 것처럼, 여러 팀과 부서에 분산돼 있는 비밀을 관리하는 것도 어렵습니다. 팀마다 비밀을 문서화하거나 저장하는 방식이 다르거나 다른 팀에서 사용하고 있는 비밀에 대한 가시성이 부족할 수 있습니다.
비밀 관리 도구는 비밀을 안전하게 관리하는 데 필요한 모든 프로세스를 자동화할 수 있습니다. 비밀 관리 도구는 또한 애플리케이션의 코드와 분리된 안전한 환경에 비밀을 저장합니다. 이를 통해 개발자는 비밀을 하드코딩하거나 유출될 수 있는 일반 텍스트로 저장하는 것을 피할 수 있습니다.
Cloudflare에서는 전역 네트워크에서 코드를 실행할 수 있는 확장성이 뛰어난 개발 플랫폼을 제공합니다. 개발자는 Cloudflare Secrets Store를 통해 API 토큰부터 요청 인증 헤더에 이르기까지 애플리케이션에 필요한 비밀을 안전하게 저장하고 관리할 수 있습니다. Secrets Store를 자세히 알아보세요.
비밀 관리는 애플리케이션의 자동화된 구성 요소가 사용하는 디지털 자격 증명을 보호하고 통제하는 방식입니다. 노출될 경우 애플리케이션 인프라에 대한 무단 접근을 허용할 수 있는 민감한 데이터를 안전하게 저장하는 것을 포함합니다.
이 맥락에서 비밀은 사람이 아닌 구성 요소를 위한 자격 증명 역할을 하는 데이터입니다. API 연결, 마이크로서비스, 자동화 도구와 같은 비인간 요소들이 서로 인증하기 위해 이러한 자격 증명을 사용하며, 이를 통해 애플리케이션이 정상적으로 작동합니다. 예로는 IPsec 키, TLS 개인 키, API 키, 비밀번호 등이 있습니다.
일반적인 비밀에는 API 키, 암호화 키, 비밀번호, 토큰 등이 포함됩니다. 또한 TLS 또는 IPsec 인증서, SSH 키와 같이 인프라 구성 요소 간 연결을 가능하게 하는 인증 정보도 포함됩니다.
비밀은 무차별 대입 공격을 통해 추측될 위험을 줄이기 위해 주기적으로 변경해야 합니다. 또한 동일한 비밀을 오래 사용할수록 유출될 가능성이 높아지므로, 정기적인 교체를 통해 장기적인 애플리케이션 보안을 유지할 수 있습니다.
클라우드 환경은 확장성이 크고 변화가 잦으며, 새로운 가상 머신이 지속적으로 생성되면서 각각 고유한 자격 증명이 필요합니다. 또한 구성 요소 간 의존성이 높아 비밀이 변경될 경우 새 정보로 업데이트되지 않은 구성 요소와의 연결이 끊길 수 있습니다. 이러한 확장성은 조직이 모니터링하고 관리해야 할 권한과 비밀의 수를 크게 증가시키며, 비밀 수가 너무 크게 증가해 수동 관리로는 대응하기 어려운 수준에 이를 수도 있습니다.
비밀 관리 솔루션은 관리 과정을 자동화하고 자격 증명을 애플리케이션 코드와 분리된 안전한 환경에 저장합니다. 이를 통해 개발자가 비밀을 코드에 하드코딩하거나 평문으로 저장하는 것을 방지할 수 있어, 공격자가 이를 쉽게 발견하는 위험도 줄일 수 있습니다.
Cloudflare는 글로벌 네트워크 기반의 Secrets Store라는 도구를 제공합니다. 이 서비스는 개발자가 애플리케이션에 필요한 다양한 자격 증명을 안전하게 저장하고 관리할 수 있도록 지원합니다.