페스트캠퍼스 프로젝트

보안 기능 고도화 - Vault SpringBoot

hyeongjune 2024. 12. 26. 15:22

Vault 란?

hashicorp vault는 ID 기반의 비밀 및 암호화 관리 시스템 Vault는 인증 및 권한 부여 방식을 통해 암호화 서비스를 제공하여 비밀에 대한 안전하고, 감사 가능하며, 제한된 엑세스를 보장한다. 토큰, api키, 비밀번호, 암호화키, 인증서와 같은 것들을 통제 관리한다.

작동 방식

 

 

Authenticate: Vault에서 인증(Authentication)은 클라이언트가 자신이 주장하는 본인임을 Vault가 확인할 수 있도록 정보를 제공하는 과정입니다. 클라이언트가 인증 방법(auth method)을 통해 인증을 받으면, 토큰이 생성되고 해당 토큰은 특정 정책(policy)과 연결됩니다.

validate: Vault는 GitHub, LDAP, AppRole 등과 같은 신뢰할 수 있는 서드파티 소스를 통해 클라이언트를 검증한다

authorize: 클라이언트는 Vault 보안 정책에 따라 매칭됩니다. 이 정책은 클라이언트가 Vault 토큰으로 접근할 수 있는 API 엔드포인트를 정의하는 규칙 집합입니다. 정책은 Vault에서 특정 경로와 작업에 대한 접근을 허용하거나 금지하는 선언적인 방법을 제공합니다.

Access: Vault는 클라이언트의 신원에 연결된 정책을 기반으로 토큰을 발급하여 비밀 정보, 키, 암호화 기능에 대한 접근 권한을 제공합니다. 클라이언트는 발급받은 Vault 토큰을 사용하여 이후의 작업을 수행할 수 있습니다.

Vault 실행

https://developer.hashicorp.com/vault/install?product_intent=vault

 

Install | Vault | HashiCorp Developer

Explore Vault product documentation, tutorials, and examples.

developer.hashicorp.com

에서 설치

vault -server dev

vault 실행

http://127.0.0.1:8200 으로 접속

 

toekn으로 로그인을 하고 secret에서 key 와 value 값 삽입

Spring boot 와 연동하기

vault 를 Springboot 에 연동하기 

트러블 슛팅 : 

build.gradle 에서 springcolud 을 사용하려면 querydsl 버전을 명시해줘야 에러가 안난다.

spring boot 버전이 3.2.5 라 springcolud 와 버전 호완이 안되 3.4.0 으로 변경

ext {
  set('springCloudVersion', "2024.0.0")
}

dependencies {
  implementation 'org.springframework.cloud:spring-cloud-starter-vault-config'
  annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
}

dependencyManagement {
  imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
  }
}

Application.yml 파일

spring:
  application.name: board
  cloud.vault:
    scheme: http
    authentication: TOKEN
    token: 아까 발급 받은 토큰 값-> Root 토큰 값이 있다
  config.import: vault://

 

이로써 vault 를 사용 하여 민감 정보들을 안전하게 관리하는 방법을 알게 되었다.