10 KiB
+++ title = "VaultをIntegrated Storage (raft)でセットアップ" date = 2021-06-28T13:49:43+09:00 description = "VaultをIntegrated Storage (raft)でセットアップしてみました。" tags = ["Vault", "Linux"] categories = ["Labs", "Infra", "HashiCorp"] author = "kazu634" +++
Vaultをインストール・セットアップしてみたので、そのときのメモになります。
想定する環境
想定する環境を説明します。Vaultについては、Integrated Storage (Raft)
を利用して、クラスターを構成します。
ダイアグラム
3台のサーバでクラスターを構成してみます。
サーバのOS・CPUアーキテクチャーとか
Ubuntu 20.04 LTS
にインストールします。
% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"
% arch
x86_64
インストール
apt
リポジトリがあるので、そこからインストールします。公式解説ページはこちら。
HashiCorp GPGキーの追加
以下のコマンドを実行して、GPGキーを追加します。
% curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
$ sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
インストール
各サーバー上で以下のコマンドを実行して、Vault
のインストールを行います。
% sudo apt-get update && sudo apt-get install vault
インストールすると導入されるもの
以下のものが導入されるようです:
vault
のバイナリーsystemd
設定ファイル/opt/vault
ディレクトリが作成される/opt/vault/data
はデータ格納用を意図していると思われる/opt/vault/tls
はオレオレ証明書を作成して格納しているようです
/etc/vault.d
が作成される/etc/vault.d/vault.hcl
が標準の設定ファイルとしてデプロイされる
注意点
-
systemd
設定ファイルが導入されますが、自動起動はしません。自動起動させるにはsudo systemctl enable vault
を自分で実施する必要があります。 -
オレオレ証明書の中身を確認する限り、バーチャルホスト名が「Vault」の時に有効な証明書を作っているようです。
% openssl x509 -text -noout -in /opt/vault/tls/tls.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 7e:28:fd:b0:56:83:69:a9:d0:08:8c:26:f5:18:60:1e:42:17:16:02
Signature Algorithm: sha256WithRSAEncryption
Issuer: O = HashiCorp, CN = Vault
Validity
Not Before: Jun 7 23:23:17 2021 GMT
Not After : Jun 6 23:23:17 2024 GMT
Subject: O = HashiCorp, CN = Vault
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
[…snip…]
セットアップ
セットアップの手順を説明していきます。
設定ファイルの置換
各サーバ上の/etc/vault.d/vault.hcl
を、以下の内容で上書きします。なお、下の例はvault01
サーバの例です。適宜、IPアドレス・ホスト名など読み替えてください。
ui = true
disable_mlock = true
storage "raft" {
path = "/opt/vault/data"
# ノード名はサーバごとに変わりますので置き換えてください
node_id = "vault01"
# 再接続先のIPアドレスもサーバごとに変わりますので置き換えてください
retry_join {
leader_api_addr = "http://192.168.10.143:8200"
}
retry_join {
leader_api_addr = "http://192.168.10.144:8200"
}
}
# ここも変わりますので置き換えてください。
api_addr = "http://192.168.10.142:8200"
cluster_addr = "http://192.168.10.142:8201"
# HTTPS listener
listener "tcp" {
address = "0.0.0.0:8200"
cluster_address = "0.0.0.0:8201"
# SSL通信は今回は使用しない
tls_disable = true
# tls_cert_file = "/opt/vault/tls/tls.crt"
# tls_key_file = "/opt/vault/tls/tls.key"
}
Vault起動 (1台目)
どこでもいいので、以下のコマンドを実行し、どこかのサーバでVaultを起動します。
% sudo systemctl start vault
vault
コマンドに接続先サーバを指示するため、VAULT_ADDR
環境変数を指定します:
% export VAULT_ADDR=http://192.168.10.142:8200
後は通常通り、vault operator init
コマンドを実行します。すると、リカバリーキーとInitial Root Token
が発行されます。vault operator unseal
コマンドでunsealします。
Vault起動 (2台目以降)
それ以外のサーバーでは、sudo systemctl start vault
を実行してから、vault operator unseal
コマンドでunsealします。
動作確認
vault status
コマンドを実行して、storage Type
がraft
、HA Enabled
がtrue
であることを確認します。
% vault status
Key Value
--- -----
Recovery Seal Type shamir
Initialized true
Sealed false
Total Recovery Shares 5
Threshold 3
Version 1.7.3
Storage Type raft
Cluster Name vault-cluster-e2a49833
Cluster ID 08252ea2-3816-419e-7f67-2d8929c438bb
HA Enabled true
HA Cluster https://192.168.10.144:8201
HA Mode active
Active Since 2021-06-26T15:14:28.755516837Z
Raft Committed Index 31294
Raft Applied Index 31294
vault operator raft list-peers
コマンドを実行すると、適切にセットアップされていれば、どこかのサーバーがleader
に、その他がfollower
として表示されます。
kazu634@vault01% vault operator raft list-peers
Node Address State Voter
---- ------- ----- -----
vault01 192.168.10.142:8201 follower true
vault02 192.168.10.143:8201 follower true
vault03 192.168.10.144:8201 leader true
Integrated storage (raft)
を利用している際に、ノードの異常などを検知して、クラスターリーダーの変更などをする機能をautopilot
と呼んでいます。この機能の状態をvault operator raft autopilot state
コマンドで確認できます。Healthy
がtrue
であることを確認します。
kazu634@vault01% vault operator raft autopilot state
Healthy: true
Failure Tolerance: 1
Leader: vault03
Voters:
vault03
vault01
vault02
Servers:
vault01
Name: vault01
Address: 192.168.10.142:8201
Status: voter
Node Status: alive
Healthy: true
Last Contact: 3.880838102s
Last Term: 10
Last Index: 31293
vault02
Name: vault02
Address: 192.168.10.143:8201
Status: voter
Node Status: alive
Healthy: true
Last Contact: 1.404623564s
Last Term: 10
Last Index: 31293
vault03
Name: vault03
Address: 192.168.10.144:8201
Status: leader
Node Status: alive
Healthy: true
Last Contact: 0s
Last Term: 10
Last Index: 31293
その他
その他のセットアップ関連です。
自動起動
sudo systemctl enable vault
コマンドを実行します。