1. 개요
HashiCorp Vault는 시작 시 Sealed(봉인된) 상태로 시작합니다. 이 상태에서는 물리적 스토리지에 접근할 수 있지만, 저장된 데이터를 복호화할 수 없습니다. Unsealing(봉인해제)은 Vault가 데이터를 복호화하기 위해 필요한 root key에 접근하는 과정입니다.
2. 암호화 계층 구조
Vault는 3단계 암호화 계층 구조를 사용하여 데이터를 보호합니다:
HashiCorp Vault는 시작 시 Sealed(봉인된) 상태로 시작합니다. 이 상태에서는 물리적 스토리지에 접근할 수 있지만, 저장된 데이터를 복호화할 수 없습니다. Unsealing(봉인해제)은 Vault가 데이터를 복호화하기 위해 필요한 root key에 접근하는 과정입니다.
Vault는 3단계 암호화 계층 구조를 사용하여 데이터를 보호합니다:
이 문서는 HashiCorp Vault의 각 컴포넌트와 Secret Engine의 역할 및 지원 환경(OS)을 정리합니다.
Vault Server는 중앙 집중식 비밀 관리 시스템으로, 비밀번호, API 키, 인증서 등 민감한 데이터를 안전하게 저장하고 접근을 제어합니다. 정책 기반의 접근 제어를 통해 비밀에 대한 접근을 관리하며, 다양한 인증 방법과 시크릿 엔진을 통해 다양한 환경과 통합됩니다.
| 지원 환경(OS) | CPU 아키텍처 | 비고 |
|---|---|---|
| Linux (Ubuntu, CentOS, RHEL, Debian, Amazon Linux 등) | 386, amd64, arm, arm64, s390x | 다양한 배포판에서 지원됩니다. |
| Windows (Windows Server 및 데스크톱 버전) | 386, amd64 | Windows 플랫폼에서도 설치 및 실행이 가능합니다. |
| macOS (Intel 및 Apple Silicon) | amd64, arm64 | 개발 및 테스트 목적으로 실행할 수 있습니다. |
| FreeBSD | 386, amd64, arm | - |
| NetBSD | 386, amd64, arm | - |
| OpenBSD | 386, amd64, arm | - |
| Solaris | amd64 | - |
JypyterHub는 사용자에게 개별 Jupyter Notebook을 제공하는 도구입니다. 기존에는 사용자마다 개별적으로 Jypyter Notebook을 설치하고 관리하는 방식이였지만 JupyterHub를 사용하면 사용자 별로 개별적인 환경을 제공할 수 있습니다. 또한 JupyterHub는 사용자 인증을 위해 다양한 방법을 제공합니다. 그 중 하나가 OIDC(OpenID Connect)를 사용하는 방법입니다. OIDC는 인증 정보를 외부 인증 서버에서 가져오는 방식으로, 사용자 인증을 위한 표준 프로토콜입니다.
여기서는 Vault의 계정 관리와 시크릿 소비자를 하나의 Identity Provider(IdP) 로 관리하는 방법을 설명합니다. 이를 위해서는 사용자가 인증을 받고 나서 받은 Vault Token을 사용하여 JupyterHub에서 사용자 인증을 처리하는 방식으로 처리해야 합니다.
Vault는 다양한 인증 메소드를 제공하여 서로 다른 사용자, 애플리케이션, 인프라 환경에서 안전하게 시크릿에 접근할 수 있도록 합니다. 적절한 인증 방식을 선택하는 것은 보안성과 운영 효율성을 모두 고려해야 하는 중요한 결정입니다.
대상: 개발자, 운영자, 관리자 등 실제 사용자
특징: 대화형 인증, 일시적 접근, 개인별 권한 관리
웹 서비스의 보안은 현대 IT 인프라에서 가장 중요한 요소 중 하나입니다. 특히 민감한 데이터를 다루는 서비스에서는 단순한 사용자명/패스워드 인증을 넘어선 보다 강력한 보안 메커니즘이 필요합니다. 이러한 맥락에서 상호 TLS(mTLS) 인증은 클라이언트와 서버 간의 양방향 인증을 제공하는 강력한 보안 솔루션입니다.
참고 'mTLS 인증' : https://wiki.kreonet.net/web-auth-sso/mtls-51119765.html
요즘같이 사내에 많은 Open Source, Enterprise Soulition이 사용되는 시기에 각 Solution별로 ID/Password를 관리하는 것은 쉽지 않습니다.
거기다 만약 Dev, Stage, Production등의 환경별로 구축이 되어 있다면 이미 ID/Password를 저장하고 관리하는 것만 으로도 굉장히 반복적이고 귀찮은 작업이 될 것 입니다.
우리는 이러한 상황을 해결하기 위해 IDP(Identity Provider) Solution을 사용합니다.
다양한 IDP가 있겠으나 제가 속한 회사에서는 Keycloak을 사용하고 있고 그 Keycloak을 통해
gitlab, grafana, nomad, vault의 사용자 인증 및 권한관리를 하고 있습니다.
이 중 Terraform code로 구현이 완벽히 된 Nomad와 Vault의 Code에 대해 설명드리겠습니다.
Vault 설정 참고 링크: Hashicorp 공홈
Nomad Vault 연동 참고 링크: docmoa
token, app-role로 관리: docmoa
Spring boot에서는 Token, App-role을 제외하고 aws-auth를 통해서도 Secret을 주입 할 수 있습니다.
aws-auth에서는 다음의 두 기능을 지원합니다.