부트모아

[V2] Vault를 사용한 보안 강화

승무_ 2024. 9. 28. 14:39

웹 애플리케이션 취약점 중에서 빈도가 많이 발생하는 10가지를 선정한 문서인 OWASP TOP 10을 보던 중 misconfiguration에 대해 알게 되었다. 내 프로젝트에도 보안상 취약한 설정이 있나 살펴보던 중 DB 접근 정보가 github에 그대로 노출 되어있는 것을 확인하였다.

이와 같은 "시크릿"을 어떻게 안전하게 저장할 수 있을까를 살펴보던 중 Hashicorp vault를 알게돼 내 프로젝트에 적용해 보기로 하였다.

 

Hashicorp vault란?

vault를 이해하기 전, "시크릿"이라는 개념에 대한 이해가 필요하다.  시크릿은 시스템에 접속할 때 필요한 인증과 인가 정보를 부여하는 모든 것을 의미한다. 대표적인 예시로 계정 비밀번호, DB 인증정보, TLS 인증서가 있다.

 

이러한 "시크릿"은 매우 신중하게 관리 되어야 하며, 누가 시스템에 접근했는지 시스템에 대한 어떤 것을 이용했는지 로깅이 필요하다.

 

이러한 여러 문제를 해결해 주기 위해 vault가 등장했다. 곳곳에 흩어져 있는 시크릿 정보들을 중앙화 하고 vault에 저장된 데이터에 암호화를 제공한다. 그리고 auditing 기능을 제공해 누가 어떤 인증정보에 접근 했는지 손쉽게 파악할 수 있다.

 

다행히 gradle을 통해 간단하게 vault를 적용시킬 수 있다

ext {
    ...
    set('springCloudVersion', "2021.0.1-SNAPSHOT")
}

dependencies {
	...
	implementation 'org.springframework.cloud:spring-cloud-starter-vault-config'
}
    

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}
  application.name: bootmoa
  cloud.vault:
    scheme: http
    authentication: token
    token: {VAULT_TOKEN}
  config.import: vault://

 

테스트

@Slf4j
@SpringBootApplication
@EnableConfigurationProperties(VaultConfiguration.class) 
public class VaultApplication {
	
    ```

	@PostConstruct
	public void run(){
		log.info("username = {}", vaultConfiguration.getUsername());
		log.info("password = {}", vaultConfiguration.getPassword());
	}
}

 

 

성공적으로 username과 password가 들어오는 것을 확인할 수 있었다.