• 하시코프 볼트(Harshicorp Vault)는 아이덴티티 기반의 비밀, 암호화 관리 시스템
  • 공개되면 안되는 비밀번호, API 키, 토큰 등을 저장하고 관리함
  • 제한된 접근을 제공하기 위해 인증(authentication) 및 권한 부여(authorization) 방법으로 제어되는 암호화 서비스를 제공
  • UI, CLI 또는 HTTP API를 사용하여 토큰, 암호, 인증서, 비밀 보호를 위한 암호화 키 및 민감 정보에 대한 접근을 보호, 저장 및 엄격하게 제어하는 데 사용
  • vault 공식 참고 URL : https://www.vaultproject.io/docs
  • Vault HA 구성 with Consul : https://shanta.tistory.com/16?category=982069

Vault 기능

  1. 사용의 핵심 → 인증 및 권한 부여
  2. 인증 및 권한을 클라이언트에 제공하는 방법을 이해하는 것이 구성하고 관리하는 방법을 이해하기 위한 핵심
  3. 인증 방법(auth method)을 사용 → 클라이언트에 인증을 제공
  4. 정책(policy)을 사용 → 클라이언트에 권한 제어를 제공

Vault는 몇 가지 내부 또는 외부 인증 방법을 제공

  1. 외부 방법을 AWS, LDAP, GitHub 등과 같은 신뢰할 수 있는 서드파티 인증자(trusted third-party authenticators)
  2. 어떤 상황에서 신뢰할 수 있는 서드파티 인증자를 사용할 수 없으므로 Vault에서는 AppRole이라는 대체 수단을 마련
  3. 신뢰할 수 있는 서드파티 인증자가 있다면 그것을 사용하는 것이 AppRole을 사용하는 것보다는 바람직

Vault 아키텍처

1. Storage Backend

  • 스토리지 백엔드(Storage Backend)는 암호화된 데이터를 저장하기 위한 스토리지를 담당
  • Vault는 스토리지의 종류, 가용성 등을 책임지지 않음 → 어떤 스토리지 백엔드를 쓸 것인지는 고객이 결정
  • Vault는 15가지 이상 스토리지를 지원
  • filesystem과 in-memory 스토리지는 백앤드는 개발단계에서 빠르게 활용하기에 좋은 시스템
  • 나머지 스토리지 백앤드는 서비스 전개 환경에 따라서 선택적으로 구성
  • 스토리지 백엔드(Storage Backend) 종류
    1. HashCorp Consul
    2. Etcd
    3. Zookeeper
    4. AWS S3
    5. AWS DynamoDB
    6. Azure Storage Container
    7. Triton Manta Object Storage
    8. GCP Cloud Storage
    9. GCP Cloud Spanner
    10. MySQL
    11. PostgreSQL
    12. MSSQL
    13. Swift
    14. Raft
    15. Filesystem
    16. CockroachDB
    17. Cassandra

2. Barrier

  • Barrier는 장벽이라는 의미 → 데이터의 안전한 사용을 위한 강철벽
  • 스토리지 백앤드(Storage Backend) 간에 흐르는 모든 데이터는 Barrier를 통과함
  • Barrier는 암호화된 데이터만을 기록하며, 데이터가 필요한 시점에 복호화(암호해독)이 되도록함
  • barrier를 통과해야만 내부 데이터에 접근 가능.

3. Secret Engine

  • Secrets Engine은 데이터를 저장, 생성, 암호화하는 구성요소
  • Secret Engine 중 Redis/Memcached에 단순하게 key&value 형식으로 데이터를 저장하고 읽을 수 있음
  • 다른 Secrets Engine은 서비스에 연결하고 요청을 하는 시점에서 동적으로 자격증명을 생성 가능
  • AWS를 대상으로 할 경우, 시크릿 엔진은 AWS IAM 정책을 기반으로 AWS 자격증명을 동적으로 생성 가능 → AWS IAM 자격 증명은 시간을 기반으로 하기 때문에, 일정 시간이 지나면 자동으로 자격증명을 삭제함
  • SSH를 이용해서 인스턴스에 대한 접근권한을 관리할 경우에는 SSH Secret Engine을 사용할 수 있음 → SSH 유저, 권한, 유효시간, 원타임 패스워드등을 안전하게 관리
  • 다양한 서비스를 위한 Secret Engine 목록
    1. Active Directory
    2. AliCloud
    3. AWS
    4. Azure
    5. Consul
    6. Cubbyhole
    7. Database
    8. Google Cloud
    9. Google Cloud KMS
    10. KMIP
    11. Key/Value
    12. Identity
    13. Nomad
    14. PKI
    15. RabbitMQ
    16. SSH
    17. TOTP
    18. Transit

4. Audit Device

  • Audit device는 감사 로그를 관리
  • Valut에 대한 모든 요청과 응답은 Audit device를 통과하면서 로그를 기록
  • 관리자는 로그를 통해서 시스템 상태를 관리 가능

5. Auth Method

  • Auth Method는 Vault에 연결하려는 유저와 애플리케이션을 인증하기 위해서 사용
  • 인증되면 Auth Method는 인증된 사용자와 사용 할 수 있는 애플리케이션 정책 목록을 리턴
  • 클라이언트 토큰(client token)을 리턴하는데, 한번 인증을 끝내고 나면 클라이언트 토큰을 이용하게 됨
  • 다른 구성요소들과 마찬가지로 다양한 서비스를 Auth Method로 사용 가능
  • 예를 들어서 Userpass(Username & Password) auth method는 유저이름과 패스워드 기반의 인증 매커니즘을 제공
  • Auth Method의 목록
    1. AppRole
    2. AliCloud
    3. AWS
    4. Azure
    5. Google Cloud
    6. JWT/OIDC
    7. Kubernetes
    8. GitHub
    9. LDAP
    10. Okta
    11. PCF
    12. RADIUS
    13. TLS Certificates
    14. Tokens
    15. Username & Password

6. Client Token

  • Client Token 혹은 Vault Token은 웹 사이트에서 사용하는 세션 쿠기(session cookie)과 개념적으로 비슷함
  • 사용자 인증이 끝나면 Vault는 클라이언트 토큰을 리턴하는데, 이후에는 클라이언트 토큰을 이용해서 작업을 수행 가능
  • Vault는 Client Token을 이용해서 클라이언트를 식별하고 애플리케이션 접근 정책을 검사함
  • Client Token 은 HTTP 헤더를 통해서 전달됨

7. Secret

  • Secret는 암호화된 데이터를 포함해서 Vault가 리턴하는 모든 정보를 의미
  • Vault가 반환하는 모든 정보가 Secret 인 것은 아님 → 시스템 설정, 상태 정보, 정책등은 secret로 간주되지 않음
  • Secret는 lease(임대)객체 → Lease가 끝나면 Vault는 Secret를 파기함
  • 관리자는 lease 정보를 확인해서 Secret를 철회하거나 연장하기 위해서 개입 가능
  • 예를 들어 관리자는 아래와 같은 Secret를 생성 가능
    $ vault kv put secret/hello foo=world
    Key                     Value
    ---                       -----
    created_time        2019-08-19T03:53:56.491587848Z
    deletion_time       n/a
    destroyed             false
    version                1

8. Server

  • Vault는 클라이언트/서버 애플리케이션
  • Vault 서버는 데이터 스토리지와 백앤드 등과 상호작용함
  • Vault 서버는 전체 Vault 아키텍처에서 하나의 컴포넌트로 작동함
  • 사용자는 Vault CLI를 이용해서 TLS 연결로 서버와 통신 가능



암호화 알고리즘 → Vault 서버에서는 암호화 알고리즘을 사용

  • 암호화 알고리즘은 일반적으로 공개됨 → 암호화 열쇠를 어떻게 만들고 저장하고 관리할 것인지가 가장 중요
  • 한국인터넷진흥원(KISA)에서는 암호화된 데이터와 암호화 키는 물리적으로 안전하게 분리된 장소에 보관해야 한다고 권고
  • 데이터는 암호화하여 DB에 보관한다고 하면 키는 볼트(Vault)에 저장하는 것이 좋음
  • 볼트(Vault) 서비스는 일반적으로 암호화 키, 인증서 등 민감한 데이터를 안전하게 보호함
  • 볼트(Vault) 서비스는 민감 데이터를 DB에 전달하기 전에 암호화를 하며, DB에 저장된 암호화된 민감 데이터는 Vault 없이는 해독할 수 없음 → 민감 데이터를 안전하게 보호 가능


+ Recent posts