볼트를 설명해보다.

Junyeong·2022년 5월 24일
0

설명해보다

목록 보기
3/7

🔧Vault


(사내 블로그에 정리하고 여기에 또 정리하려니까 지루해....)

https://www.vaultproject.io/ <-- Vault Homepage, (HashiCorp사 제공 오픈소스)

볼트의 웹 사이트에 접속해보면, 어떤 기능을 제공하는지 한 문장으로 정의하고 있다.

"A tool for managing secrets"

다시 말해, 민감한 데이터를 안전하게 보관하고 관리해주는 도구이자 저장소이다.
민감한 데이터라는 건, Encryption-Key, Credential, Password 등을 말한다.

♾️Vault Architecture


흐름을 간단히 보면, API를 통해 HTTP 통신으로 들어온 요청이 Barrier 를 거쳐 Backend(저장소)에 도달해 값을 넣거나 가져간다.

그 과정에서 인증, 로깅, 암호화, 정책 등을 각각의 엔진 및 메서드들이 수행한다.

📖Vault Word


Secret

볼트에서 관리하는 비밀 객체(토큰, 키 등)를 칭하는 용어.
일정 주기가 지나면 폐기해야 한다.

Storage Backend

볼트의 저장소.
볼트가 내부적으로 제공해주진 않고, 유저가 AWS S3 등 지원하는 15가지의 저장소 중에서 직접 선택해서 사용하는 구조다.

Secret Engine

데이터를 저장, 생성, 암호화하는 엔진.
특이한 점은 Engine의 구현체마다 방식이 달라진다는 것. (저장소와 마찬가지로 내부적인 제공 없음)
Generic으로 구현하면 암호화된 Redis/Memcached에 key-value 형식으로 저장 및 읽기가 가능해 username/password 구조로 갈 수 있다.
다른 엔진들은 ‘동적 자격증명’을 사용한다.
예를 들어 AWS의 I AM 정책을 기반으로 AWS의 자격 증명을 Vault가 동적으로 생성 및 관리해주는 것이다.
이렇게 되면 Vault의 UI를 거칠 필요 없이 AWS에 접근할 수 있고 일정 시간이 지나면 자동 삭제 등 안전하게 관리해준다.
MySql과 같은 DB도 계정정보를 동적으로 발급하고 expire를 설정해준다.

Auth Method

볼트에 접근하는 클라이언트를 인증해주는 요소.
사용자 인증에 성공하면 클라이언트 토큰을 반환해준다.

Barrier

대문(프록시) 역할.
저장소(스토리지 백엔드)로 접근하기 위해서는 반드시 배리어를 통과해야 한다.
볼트는 항상 암호화된 데이터만 밖으로 나오도록 허락하기 때문에 데이터를 얻고자 한다면 대문을 열어야 한다.
이 과정에서 Sealed(봉인) Unsealed(봉인해제) 라는 스텝이 파생된다.

Client Token

인증 메서드를 통해 사용자 인증을 마치면, 반환해주는 토큰이다.
HTTP 헤더를 통해 전달되며 Session ID와 같은 역할을 한다.

Audit Device

감사로그를 관리한다.
볼트의 모든 요청/응답은 Audit Device를 통해 로그를 남긴다.

  • Vault 는 Client - Server 구조로, 이하 글에서 접근 시에 ‘볼트’ 라는 표현은 클라이언트를 의미.

🎁Vault Seal & Unseal



(다크 모드에서 사진이 잘 안보일 수 있음..)

  • 볼트는 Encryption Key 를 활용해 Secret 들을 암/복호화 한다.

  • 암호화한 SecretEncryption Key 를 묶어서 Master Key 로 한번 더 암호화 한다.

  • 이러한 Master Key 를 얻기 위한 과정을 Unseal (봉인 해제) 라고 한다.

  • 봉인 해제를 위한 (마스터키를 얻기 위한) 키를 이번엔 Unsealed-key 라고 부른다.

  • Unsealed-key는 SSS(Shamir Secret Sharing)이라는 알고리즘으로 분할 보관되어 있다.

(알고리즘의 이해는 각자의 흥미에 맡기고…)

알면 좋을 Sealed <--> Unsealed 상태를 전환하기 위한 명령어는 다음과 같다.

vault operator seal // 봉인하는 명령어
vault operator unseal // 봉인 해제 명령어, 다음 줄에서 키를 입력해줘야 한다.
Unseal Key (will be hidden): 여기에 키 입력

👁️‍🗨️Vault Code (코드를 보려면..)


하단 링크의 게시글에 코드 위주로 테스트 할 수 있는 설명이 있어 가져왔다..!
https://lejewk.github.io/vault-get-started/

profile
좋아하는 것을 계속 좋아하자.

0개의 댓글