2020. 2. 24. 14:00ㆍ[정리] 기능별 개념 정리
Vault
HashCorp 에서 만든 오픈소스 프로젝트다.
깃허브 상에 존재하는 ID / Password 를 저장하는 방식은 보안적으로 취약하다.
따라서 이 정보를 vault 서버에 저장해놓는다.
어플리케이션 시작시 vault 서버에서 가져와 ID / Password를 사용한다.
높은 확장성, 더불어 Spring Vault 라고 오픈소스 프로젝트로 Vault 를 간단히 사용할 수 있는 모듈이 존재한다.
Secret
가장 간단하게 사용자가 요청한 값을 key-value 로 저장할 수 있는 데이터
secret/mydbs/mysql | |
username | hello |
password | world |
...
vault:
uri: vault 도메인
token: vault 토큰
path:
mysql: secret/mydbs/mysql
...
@Configuration
@Import(EnvironmentVaultConfiguration.class)
@VaultPropertySource(value = "${vault.path.mysql}", propertyNamePrefix = "spring.datasource.")
@Order(Ordered.HIGHEST_PRECEDENCE)
public class VaultConfig {
}
vault.path.mysql 이 가리키는 시크릿에 접근해서 key-value들을 가져온다.
해당 key 들 앞에 spring.datasource. 를 붙여서 설정 변수로 사용한다.
즉 해당 작업은 아래와 같은 설정변수를 application.yml 에 등록한 것과 같다.
spring.datasource.username = hello
spring.datasource.password = world
Transit
사용자가 개인정보를 올리는데 이런 정보를 MySQL 에 저장해야할 때가 있다.
그렇다면 당연히 개인정보를 암호화 해서 저장해야한다.
이 암호화에 사용되는 키는 어디다 저장할 것인가?
이럴 때 쓰는 게 Transit 이다.
Vault 에는 마스터키만 저장한다.
마스터키는 실제 데이터를 암호화, 복호화 하는 키는 데이터 키다.
실제 Transit 을 발급 받으면 데이터키를 암호화해서 제공한다.
어플리케이션에서의 동작
- 부트스트랩 단계에 암호화된 데이터 키를 복호화를 요청한다.
- Vault 는 마스터키로 복호화해서 데이터 키를 제공한다.
'[정리] 기능별 개념 정리' 카테고리의 다른 글
[2019.03.04] 오픈소스 서버 기술셋 (0) | 2019.03.04 |
---|