hippo 데브옵스
2022. 7. 10. 17:23
2022. 7. 10. 17:23
- 하시코프 볼트(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 기능
- 사용의 핵심 → 인증 및 권한 부여
- 인증 및 권한을 클라이언트에 제공하는 방법을 이해하는 것이 구성하고 관리하는 방법을 이해하기 위한 핵심
- 인증 방법(auth method)을 사용 → 클라이언트에 인증을 제공
- 정책(policy)을 사용 → 클라이언트에 권한 제어를 제공
Vault는 몇 가지 내부 또는 외부 인증 방법을 제공
- 외부 방법을 AWS, LDAP, GitHub 등과 같은 신뢰할 수 있는 서드파티 인증자(trusted third-party authenticators)
- 어떤 상황에서 신뢰할 수 있는 서드파티 인증자를 사용할 수 없으므로 Vault에서는 AppRole이라는 대체 수단을 마련
- 신뢰할 수 있는 서드파티 인증자가 있다면 그것을 사용하는 것이 AppRole을 사용하는 것보다는 바람직
Vault 아키텍처
1. Storage Backend
- 스토리지 백엔드(Storage Backend)는 암호화된 데이터를 저장하기 위한 스토리지를 담당
- Vault는 스토리지의 종류, 가용성 등을 책임지지 않음 → 어떤 스토리지 백엔드를 쓸 것인지는 고객이 결정
- Vault는 15가지 이상 스토리지를 지원
- filesystem과 in-memory 스토리지는 백앤드는 개발단계에서 빠르게 활용하기에 좋은 시스템
- 나머지 스토리지 백앤드는 서비스 전개 환경에 따라서 선택적으로 구성
- 스토리지 백엔드(Storage Backend) 종류
- HashCorp Consul
- Etcd
- Zookeeper
- AWS S3
- AWS DynamoDB
- Azure Storage Container
- Triton Manta Object Storage
- GCP Cloud Storage
- GCP Cloud Spanner
- MySQL
- PostgreSQL
- MSSQL
- Swift
- Raft
- Filesystem
- CockroachDB
- 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 목록
- Active Directory
- AliCloud
- AWS
- Azure
- Consul
- Cubbyhole
- Database
- Google Cloud
- Google Cloud KMS
- KMIP
- Key/Value
- Identity
- Nomad
- PKI
- RabbitMQ
- SSH
- TOTP
- 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의 목록
- AppRole
- AliCloud
- AWS
- Azure
- Google Cloud
- JWT/OIDC
- Kubernetes
- GitHub
- LDAP
- Okta
- PCF
- RADIUS
- TLS Certificates
- Tokens
- Username & Password
6. Client Token
- Client Token 혹은 Vault Token은 웹 사이트에서 사용하는 세션 쿠기(session cookie)과 개념적으로 비슷함
- 사용자 인증이 끝나면 Vault는 클라이언트 토큰을 리턴하는데, 이후에는 클라이언트 토큰을 이용해서 작업을 수행 가능
- Vault는 Client Token을 이용해서 클라이언트를 식별하고 애플리케이션 접근 정책을 검사함
- Client Token 은 HTTP 헤더를 통해서 전달됨
7. Secret
8. Server
- Vault는 클라이언트/서버 애플리케이션
- Vault 서버는 데이터 스토리지와 백앤드 등과 상호작용함
- Vault 서버는 전체 Vault 아키텍처에서 하나의 컴포넌트로 작동함
- 사용자는 Vault CLI를 이용해서 TLS 연결로 서버와 통신 가능
암호화 알고리즘 → Vault 서버에서는 암호화 알고리즘을 사용
- 암호화 알고리즘은 일반적으로 공개됨 → 암호화 열쇠를 어떻게 만들고 저장하고 관리할 것인지가 가장 중요
- 한국인터넷진흥원(KISA)에서는 암호화된 데이터와 암호화 키는 물리적으로 안전하게 분리된 장소에 보관해야 한다고 권고
- 데이터는 암호화하여 DB에 보관한다고 하면 키는 볼트(Vault)에 저장하는 것이 좋음
- 볼트(Vault) 서비스는 일반적으로 암호화 키, 인증서 등 민감한 데이터를 안전하게 보호함
- 볼트(Vault) 서비스는 민감 데이터를 DB에 전달하기 전에 암호화를 하며, DB에 저장된 암호화된 민감 데이터는 Vault 없이는 해독할 수 없음 → 민감 데이터를 안전하게 보호 가능