2021-06-28 04:51:08 +00:00
|
|
|
+++
|
|
|
|
title = "VaultをIntegrated Storage (raft)でセットアップ"
|
2021-06-28 04:54:50 +00:00
|
|
|
date = 2021-06-28T13:49:43+09:00
|
2021-06-28 04:51:08 +00:00
|
|
|
description = "VaultをIntegrated Storage (raft)でセットアップしてみました。"
|
|
|
|
tags = ["Vault", "Linux"]
|
2021-11-17 13:56:35 +00:00
|
|
|
categories = ["インフラ", "HashiCorp"]
|
2021-06-28 04:51:08 +00:00
|
|
|
author = "kazu634"
|
2022-08-21 08:25:55 +00:00
|
|
|
images = ["ogp/2021-06-28-vault-with-raft-install-and-setup.webp"]
|
2021-06-28 04:51:08 +00:00
|
|
|
+++
|
|
|
|
|
|
|
|
Vaultをインストール・セットアップしてみたので、そのときのメモになります。
|
|
|
|
|
|
|
|
## 想定する環境
|
|
|
|
想定する環境を説明します。Vaultについては、`Integrated Storage (Raft)`を利用して、クラスターを構成します。
|
|
|
|
|
|
|
|
### ダイアグラム
|
|
|
|
3台のサーバでクラスターを構成してみます。
|
|
|
|
|
|
|
|
![Diagram](https://farm66.staticflickr.com/65535/51275717613_7dfe3a9d11_c.jpg)
|
|
|
|
|
|
|
|
### サーバのOS・CPUアーキテクチャーとか
|
|
|
|
`Ubuntu 20.04 LTS`にインストールします。
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% cat /etc/lsb-release
|
|
|
|
DISTRIB_ID=Ubuntu
|
|
|
|
DISTRIB_RELEASE=20.04
|
|
|
|
DISTRIB_CODENAME=focal
|
|
|
|
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"
|
|
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% arch
|
|
|
|
x86_64
|
|
|
|
```
|
|
|
|
|
|
|
|
## インストール
|
|
|
|
`apt`リポジトリがあるので、そこからインストールします。公式解説ページは[こちら](https://learn.hashicorp.com/tutorials/vault/getting-started-install)。
|
|
|
|
|
|
|
|
### HashiCorp GPGキーの追加
|
|
|
|
以下のコマンドを実行して、GPGキーを追加します。
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% 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`のインストールを行います。
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% 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」の時に有効な証明書を作っているようです。
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% openssl x509 -text -noout -in /opt/vault/tls/tls.crt
|
2021-11-17 13:56:35 +00:00
|
|
|
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)
|
2021-06-28 04:51:08 +00:00
|
|
|
[…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を起動します。
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% sudo systemctl start vault
|
|
|
|
```
|
|
|
|
|
|
|
|
`vault`コマンドに接続先サーバを指示するため、`VAULT_ADDR`環境変数を指定します:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% 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`であることを確認します。
|
|
|
|
|
|
|
|
```bash
|
|
|
|
% 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`であることを確認します。
|
|
|
|
|
|
|
|
```bash
|
|
|
|
kazu634@vault01% vault operator raft autopilot state
|
2021-11-17 13:56:35 +00:00
|
|
|
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
|
2021-06-28 04:51:08 +00:00
|
|
|
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`コマンドを実行します。
|
|
|
|
|