Vault는 HashiCorp에서 제공하는 비밀 관리 시스템dl다. Vault는 보안 정보를 안전하게 저장하고 관리하는 데 사용된다. 외부 정보는 Vault의 비밀 관리 기능을 활용해 보안 토큰, 비밀번호, API 키 등을 저장하고 접근할 수 있는 방식으로 구성된다.
Vault의 외부 정보 구성 방식은 크게 다음과 같은 몇 가지 주요 개념을 포함한다.
1. Vault의 아키텍처
Vault는 중앙 집중식 비밀 관리 시스템으로, 외부 시스템이 Vault와 연결하여 비밀 정보에 접근한다. Vault는 두 가지 주요 방식을 제공한다.
- 키-값 저장소 (KV Store): 비밀 데이터를 키-값 형태로 저장한다. kv 경로에서 다양한 비밀을 저장하고 관리할 수 있다.
- 시크릿 엔진 (Secret Engines): 다양한 비밀을 생성하거나 저장할 수 있는 플러그인 모듈을 제공한다. 예를 들어, 데이터베이스 인증, PKI, AWS 자격 증명 등의 엔진이 있다.
2. 외부 정보 저장 방식
외부 정보는 일반적으로 Vault에 비밀로 저장되고, Vault의 API나 클라이언트를 통해 접근할 수 있다. Vault는 데이터를 암호화하여 저장하고, 접근 권한을 관리하는 기능을 제공한다.
- KV Secret Engine: 비밀번호, API 키, 인증서 등 간단한 비밀을 저장할 수 있다.
- Dynamic Secrets: Vault는 동적으로 생성된 비밀을 제공할 수 있다. 예를 들어, 데이터베이스에 접근할 수 있는 임시 자격 증명을 Vault가 생성할 수 있다.
▼ KV 경로에 비밀 저장
vault kv put secret/db_password password=mysecretpassword
▼ database/creds/my-role 경로에서 동적으로 생성된 데이터베이스 사용자 비밀을 요청
vault read database/creds/my-role
3. 외부 시스템과의 통합
Vault는 다양한 외부 시스템과 통합할 수 있다. 예를 들어, 데이터베이스, AWS, Google Cloud, Kubernetes, Consul 등과 통합하여 자격 증명을 동적으로 생성하거나 관리할 수 있다.
- AWS: Vault는 AWS IAM 사용자 및 역할에 대한 동적 자격 증명을 생성할 수 있다.
- Kubernetes: Vault는 Kubernetes와 통합되어 서비스 계정에 대한 동적 자격 증명을 제공할 수 있다.
4. 환경 변수와 외부 정보
Vault는 환경 변수를 사용하여 외부 시스템과 연동할 때 보안 정보를 제공하는 데 유용하다. 예를 들어, Docker, Kubernetes와 같은 환경에서는 Vault가 환경 변수로 비밀 정보를 전달할 수 있다. 예시로는 아래와 같다.
▼ Docker와 연동하여 Vault의 비밀 정보를 환경 변수로 설정
services:
my_service:
environment:
- VAULT_ADDR=http://vault:8200
- VAULT_TOKEN=myroot
▼ Kubernetes와 연동하여 Vault에서 동적으로 생성된 비밀을 환경 변수로 주입
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: my-image
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: vault-db-password
key: password
5. Vault의 접근 제어 정책 (ACL)
Vault는 Access Control List (ACL)을 사용하여 누가 어떤 비밀에 접근할 수 있는지 정의한다. Vault는 정책을 사용하여 세부적인 접근 권한을 설정할 수 있다. 예를 들어, 특정 사용자에게는 kv 경로의 비밀에 대한 읽기 권한만 주고, 다른 사용자에게는 쓰기 권한을 부여할 수 있다.
path "secret/*" {
capabilities = ["read", "list"]
}
path "secret/data/db_password" {
capabilities = ["create", "update"]
}
6. Vault에서 외부 정보 읽기
Vault는 외부 애플리케이션이 Vault에 저장된 비밀 정보를 안전하게 읽을 수 있도록 API를 제공한다. 클라이언트 애플리케이션은 Vault의 API를 호출하여 비밀 정보를 가져온다. 이를 통해, 애플리케이션에서 직접 데이터베이스 자격 증명, API 키, 비밀번호 등 민감한 정보를 안전하게 사용한다.
▼ Vault API로 비밀 정보 읽기
curl --header "X-Vault-Token: myroot" \
--request GET \
http://127.0.0.1:8200/v1/secret/data/db_password
이 요청은 Vault의 secret 경로에서 db_password를 읽어온다.
7. Vault 설정 파일 예시
Vault는 config.hcl 파일을 통해 다양한 설정을 정의할 수 있다. 여기서는 Vault 서버가 어디에서 실행되고, 어떤 인증 방법을 사용할 것인지 설정한다.
# Vault server configuration example
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
storage "file" {
path = "/vault/data"
}
# Enable token authentication
auth "token" {}
# Enable KV secrets engine
secrets "kv" {
path = "secret/"
}
결론
Vault는 보안 정보를 안전하게 저장하고 관리하는 매우 유연한 시스템이다. 외부 정보는 주로 비밀번호, API 키, 데이터베이스 자격 증명 등 민감한 데이터를 Vault에 안전하게 저장하고, 이를 필요한 애플리케이션에서 안전하게 접근할 수 있도록 도와준다. Vault는 이러한 비밀 데이터를 동적으로 생성하고, 다양한 외부 시스템과 통합하여 활용할 수 있는 기능을 제공한다.
'마이크로서비스 아키텍처' 카테고리의 다른 글
OAuth 2 클라이언트 구현 (0) | 2024.12.22 |
---|---|
OAuth 2 인증 서버 구현 (0) | 2024.12.22 |