카이도스의 Tech Blog

Hashicorp Vault 클러스터 구축 본문

HashiCorp Vault

Hashicorp Vault 클러스터 구축

카이도스 2024. 12. 20. 14:38
728x90
반응형

HashiCorp Vault는 데이터 보안을 위해 설계된 도구로, 비밀 관리 및 데이터 보호를 목적으로 사용됩니다. Vault는 암호화된 키-값 스토어를 제공하며, 암호화된 데이터를 안전하게 관리하고 액세스를 제어할 수 있는 강력한 기능을 갖추고 있습니다.

주요 기능

  1. 비밀 관리 (Secrets Management)
    • API 키, 비밀번호, 인증서, 데이터베이스 자격 증명 등의 민감한 데이터를 중앙 집중화하여 관리합니다.
    • 동적 자격 증명(Dynamic Secrets)을 생성하여 특정 기간 동안만 유효한 자격 증명을 제공합니다.
  2. 암호화 서비스 (Encryption as a Service)
    • 데이터 암호화를 위한 API를 제공하며, 클라이언트가 Vault를 통해 데이터를 암호화 및 복호화할 수 있습니다.
    • 데이터베이스 필드, 로그, 환경 변수와 같은 다양한 데이터를 보호하는 데 사용됩니다.
  3. 접근 제어 (Access Control)
    • RBAC(Role-Based Access Control)을 통해 사용자 및 애플리케이션의 액세스를 세밀하게 제어합니다.
    • 정책 기반으로 인증된 엔터티만 특정 데이터에 접근할 수 있도록 구성할 수 있습니다.
  4. 감사 로깅 (Audit Logging)
    • 모든 요청 및 액세스 시도를 기록하여 보안 이벤트를 추적할 수 있습니다.
    • 규정 준수 및 문제 해결에 유용합니다.
  5. 다양한 인증 방법 지원
    • LDAP, GitHub, AWS, Kubernetes, Okta 등 다양한 인증 방법과 통합됩니다.
    • 애플리케이션과의 통합을 쉽게 하기 위한 토큰 기반 인증도 제공합니다.
  6. 데이터 보호
    • 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