카이도스의 Tech Blog
Hashicorp Vault 클러스터 구축 본문
728x90
반응형
HashiCorp Vault는 데이터 보안을 위해 설계된 도구로, 비밀 관리 및 데이터 보호를 목적으로 사용됩니다. Vault는 암호화된 키-값 스토어를 제공하며, 암호화된 데이터를 안전하게 관리하고 액세스를 제어할 수 있는 강력한 기능을 갖추고 있습니다.
주요 기능
- 비밀 관리 (Secrets Management)
- API 키, 비밀번호, 인증서, 데이터베이스 자격 증명 등의 민감한 데이터를 중앙 집중화하여 관리합니다.
- 동적 자격 증명(Dynamic Secrets)을 생성하여 특정 기간 동안만 유효한 자격 증명을 제공합니다.
- 암호화 서비스 (Encryption as a Service)
- 데이터 암호화를 위한 API를 제공하며, 클라이언트가 Vault를 통해 데이터를 암호화 및 복호화할 수 있습니다.
- 데이터베이스 필드, 로그, 환경 변수와 같은 다양한 데이터를 보호하는 데 사용됩니다.
- 접근 제어 (Access Control)
- RBAC(Role-Based Access Control)을 통해 사용자 및 애플리케이션의 액세스를 세밀하게 제어합니다.
- 정책 기반으로 인증된 엔터티만 특정 데이터에 접근할 수 있도록 구성할 수 있습니다.
- 감사 로깅 (Audit Logging)
- 모든 요청 및 액세스 시도를 기록하여 보안 이벤트를 추적할 수 있습니다.
- 규정 준수 및 문제 해결에 유용합니다.
- 다양한 인증 방법 지원
- LDAP, GitHub, AWS, Kubernetes, Okta 등 다양한 인증 방법과 통합됩니다.
- 애플리케이션과의 통합을 쉽게 하기 위한 토큰 기반 인증도 제공합니다.
- 데이터 보호
- Vault는 저장소를 암호화하며, 민감한 데이터를 안전하게 보호합니다.
- 사용자는 Key Management를 통해 데이터의 암호화 및 키 회전을 관리할 수 있습니다.
Vault 구축 요청받아 아래와 같이 구축 완료했습니다.
전체척인 흐름은 아래와 같습니다.
VIP -> HAproxy(이중화) -> vault acive 서버로 연결(standby 서버는 연결 x 설정) -> Vault 서버
- 추후 구성 고도화시에는 HTTPS 통신으로 클러스터 구축가능하니 참고 부탁드립니다.
OS : Ubuntu 24.04 LTS
- 서버
- 10.10.X.24 vault-1
- 10.10.X.25 vault-2
- 10.10.X.26 vault-3
Vault 설치
# vault 설치
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install vault -y
# 디렉터리 생성
sudo mkdir -p /data/vault
sudo chown vault:vault /data/vault
# 설정
sudo vi /etc/vault.d/vault.hcl
ui = true
#mlock = true
#disable_mlock = true
storage "raft" {
path = "/data/vault"
node_id = "vault-1"
}
# HTTP listener
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
forwarded_for = true
}
# 클러스터 구성 주소
api_addr = "http://10.10.X.24:8200"
cluster_addr = "http://10.10.X.24:8201"
# 클러스터 피어 설정
cluster_peers = [
"http://10.10.X.24:8201",
"http://10.10.X.25:8201",
"http://10.10.X.26:8201"
]
-------------------------------------------
ui = true
# mlock = true
# disable_mlock = true
storage "raft" {
path = "/data/vault"
node_id = "vault-2"
}
# HTTP listener
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
# 클러스터 구성 주소
api_addr = "http://10.10.X.25:8200"
cluster_addr = "http://10.10.X.25:8201"
# 클러스터 피어 설정
cluster_peers = [
"http://10.10.X.24:8201",
"http://10.10.X.25:8201",
"http://10.10.X.26:8201"
]
-------------------------------------------
ui = true
# mlock = true
# disable_mlock = true
storage "raft" {
path = "/data/vault"
node_id = "vault-3"
}
# HTTP listener
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
# 클러스터 구성 주소
api_addr = "http://10.10.X.26:8200"
cluster_addr = "http://10.10.X.26:8201"
# 클러스터 피어 설정
cluster_peers = [
"http://10.10.X.24:8201",
"http://10.10.X.25:8201",
"http://10.10.X.26:8201"
]
실행
-----# 실행 및 확인
sudo systemctl enable vault && sudo systemctl start vault
sudo systemctl status vault
# vault 초기화(vault-1에서만)
echo "export VAULT_ADDR='http://0.0.0.0:8200'" >> ~/.bashrc
source ~/.bashrc
vault operator init
Unseal Key 1: Ee2Y.................
Unseal Key 2: lVb.................
Unseal Key 3: NTM.................
Unseal Key 4: mI3.................
Unseal Key 5: 661e.................
Initial Root Token: hvs.FGt.................
Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.
Vault does not store the generated root key. Without at least 3 keys to
reconstruct the root key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.
# unseal(vault-1에서)
vault operator unseal Ee2Y.................
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 1/3
Unseal Nonce 6c786775-f3c3-...
Version 1.18.1
Build Date 2024-10-29T14:21:31Z
Storage Type raft
HA Enabled true
vault operator unseal lVb.................
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 2/3
Unseal Nonce 6c786775-f3c3-...
Version 1.18.1
Build Date 2024-10-29T14:21:31Z
Storage Type raft
HA Enabled true
vault operator unseal NTM.................
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.18.1
Build Date 2024-10-29T14:21:31Z
Storage Type raft
Cluster Name vault-cluster-5ad87696
Cluster ID ed3c8a0e-138f-...
HA Enabled true
HA Cluster n/a
HA Mode standby
Active Node Address <none>
Raft Committed Index 33
Raft Applied Index 33
# unseal(vault-2, 3)
vault operator raft join http://10.10.X.24:8200
vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 0/3
Unseal Nonce n/a
Version 1.18.1
Build Date 2024-10-29T14:21:31Z
Storage Type raft
HA Enabled true
## 위의 unseal 작업 반복
------------------------------------------
# 전체 클러스터 확인
ubuntu@vault-1:~$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.18.1
Build Date 2024-10-29T14:21:31Z
Storage Type raft
Cluster Name vault-cluster-5ad87696
Cluster ID ed3c8a0e-138f-...
HA Enabled true
HA Cluster https://10.10.X.24:8201
HA Mode active
Active Since 2024-11-07T08:05:21.464442619Z
Raft Committed Index 75
Raft Applied Index 75
ubuntu@vault-2:~$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.18.1
Build Date 2024-10-29T14:21:31Z
Storage Type raft
Cluster Name vault-cluster-5ad87696
Cluster ID ed3c8a0e-138f-...
HA Enabled true
HA Cluster https://10.10.X.24:8201
HA Mode standby
Active Node Address http://10.10.X.24:8200
Raft Committed Index 74
Raft Applied Index 74
ubuntu@vault-3:~$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.18.1
Build Date 2024-10-29T14:21:31Z
Storage Type raft
Cluster Name vault-cluster-5ad87696
Cluster ID ed3c8a0e-138f-...
HA Enabled true
HA Cluster https://10.10.X.24:8201
HA Mode standby
Active Node Address http://10.10.X.24:8200
Raft Committed Index 75
Raft Applied Index 75
확인
# 로그인
vault login hvs.FGtr........
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.
Key Value
--- -----
token hvs.FGtr........
token_accessor UVe.....................
token_duration ∞
token_renewable false
token_policies ["root"]
identity_policies []
policies ["root"]
# 리스트 확인
vault operator raft list-peers
Node Address State Voter
---- ------- ----- -----
vault-1 10.10.X.24:8201 leader true
vault-2 10.10.X.25:8201 follower true
vault-3 10.10.X.26:8201 follower true
728x90
반응형
'HashiCorp Vault' 카테고리의 다른 글
Vault audit log 활성화 (0) | 2024.12.20 |
---|
Comments