你知道Vault 嗎?
前陣子研究了一下Vault,研究期間也寫了些筆記。部落格也好久沒更新了,今天把Vault的筆記稍微整理下,過陣子看有沒有機會再去寫一篇跟Vault跟Kubernetes的integration tutorial。
Vault能夠提供集中化的Secret管理,可以預防今天某部門的Secret洩露後,就全部都被洩漏的情況。
目前提供以下使用方式
- CLI
- API
- UI
為什麼要用Vault
- Dynamic Credential
- 存活時間短
- 如果四小時內,沒有任何App去取得。這個Credential就會失效
- 自動更新Credential
- 使用程式取得(減少Hardcode)
如果使用傳統的方式來管理,在以下情況時會不方便
- 員工離職
- 安全性較高的公司,需要頻繁的更換密碼
Installing Vault
可以在多種平台上安裝看看 Vault
- Kubernetes
- VM(Cloud and on-premise)
- Physical Machines
- Laptop
支援的作業系統
- Linux
- Windows
- macOS
- FreeBSD
- NetBSD
- OpenBSD
- Solaris
可以直接從官網取得最新資訊 https://developer.hashicorp/vault/downloads
Vault Components
Vault中存在了多種的Components,每一種Components都負責不同的工作。
Storage Backends
每一種Storage吃不同的Parameters,所有被存取下來的資料一定都經過加,如果要使用HA,就必須要Storage Backend也支援HA。
支援清單
- Raft
- Filesystem
- In-Memory
- Consul
Secrets Engines
- Store data
- Generate data
- Encrypt data
Authentication Methods
支援多種方式。有些較適合機器對機器
- Token
- Kubernetes
- TLS
- AppRole
有些不好記憶,比較適合給人使用。
- OIDC
- Username
- GitHub
- Okta
負責分配identity與policies給使用者
- Identity: 回傳Token給使用者
- Policies: 決定使用者擁有哪些權限,可以選擇的權限有
- create
- read
- update
- patch
- delete
- list
Audit Devices
- 紀錄所有的requests與responses
- 使用json格式
- 無法從Audit log中看到敏感資訊(會被hash過)
動手裝看看
Vault有支援Helm的方式來安裝,以下範例直接使用Helm來快速安裝。
新增vault repo
$ helm repo add hashicorp <https://helm.releases.hashicorp.com>
$ helm update
新增vaules.yaml
其他有支援的相關參數可以參考官網的資訊https://developer.hashicorp.com/vault/docs/platform/k8s/helm/configuration
server:
dev:
enabled: true
安裝vault
$ helm install vault hashicorp/vault -f values.yaml
確認安裝完成
$ kubectl get po
NAME READY STATUS RESTARTS AGE
vault-0 1/1 Running 0 13m
vault-agent-injector-67b7867999-vj8xm 1/1 Running 0 13m
Service Port-forward
使用kubectl開啟Web UI來試試
# 讓本機的 8787 port可以連到 service/vault 的 8200 port
$ kubectl port-forward svc/vault 8787:8200
安裝成功應該可以看到以下畫面
- 登入url:
http://localhost:8787/
此時選擇token登入,登入成功後就可以開始操作Vault囉!
- 登入token:
root