地方在住IT系ニート

bkds

HashiCorp Vaultのインストールと設定メモ【シークレット管理ツール】

Vaultとは

HashiCorp Vaultは、パスワード・APIキー・証明書などの機密情報(シークレット)を安全に管理するためのオープンソースツールです。

主な特徴は以下のとおりです。

インストール

Vaultのインストールは公式リポジトリから行います。

# GPGキーのダウンロード
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg

# リポジトリの登録
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

# インストール
sudo apt update && sudo apt install vault

設定ファイルの作成

config.hclを作成します。

storage "file" {
  path = "vault-data"
}

listener "tcp" {
  address     = "10.10.10.10:8200"
  tls_disable = "true"
}

api_addr = "http://10.10.10.10:8200"
ui       = true

各項目の説明です。

キー説明
storageシークレットの保存先(fileはローカルファイル)
listenerVaultがリッスンするアドレスとTLS設定
api_addrクラスタ構成時のAPIアドレス
uiWeb UIの有効化

起動と初期化

# サーバの起動
vault server -config=config.hcl

# Vaultの初期化(初回のみ)
vault operator init

初期化後、以下のキーが生成されます。必ず安全な場所に保存してください。

Unseal Key 1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Unseal Key 2: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Unseal Key 3: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Unseal Key 4: dddddddddddddddddddddddddddddddddddddddddddd
Unseal Key 5: llllllllllllllllllllllllllllllllllllllllllll

Initial Root Token: hvs.uuuuuuuuuuuuuuuuuuuuuuuu

デフォルトでは5つのUnseal Keyのうち3つが必要です(threshold=3)。 Root Tokenはすべての操作が可能な強力なトークンです。通常運用では使用せず、AdminポリシーのTokenを別途発行することを推奨します。

Unsealとログイン

Vaultは起動するたびにSealされた状態になります。 使用可能にするにはUnseal操作が必要です。

# Unseal(3回実行が必要)
vault operator unseal

# ログイン(Root Tokenで)
vault login

シークレットの追加

KV(Key-Value)v2型のシークレットエンジンを有効化してシークレットを追加します。

# KV v2型のシークレットエンジンを有効化
vault secrets enable -path=secret kv-v2

# 有効化されているエンジンの確認
vault secrets list

# シークレットの追加
vault kv put -mount=secret myapp username=admin password=mypassword

# シークレットの確認
vault kv get secret/myapp

Policyの設定

Policyでアクセス権限を制御します。 以下はsecret/配下の読み取りのみ許可するPolicyの例です。

vault policy write app-policy - << EOF
path "secret/data/*" {
  capabilities = ["read"]
}
EOF

# Policyの確認
vault policy read app-policy

AppRoleの設定

AppRoleはアプリケーションがVaultに認証するための仕組みです。 role_idsecret_idの2つを使って認証します。

# AppRoleの有効化
vault auth enable approle

# AppRoleを追加してPolicyを紐付け
vault write auth/approle/role/my-app policies="app-policy"

# role_idの確認
vault read auth/approle/role/my-app/role-id

# secret_idの発行
vault write -f auth/approle/role/my-app/secret-id

アプリケーションはこのrole_idsecret_idを使ってVaultにログインし、シークレットを取得します。

# AppRoleでログイン
vault write auth/approle/login \
  role_id=<role_id> \
  secret_id=<secret_id>

CIDRによるアクセス制限

特定のIPアドレスからのみアクセスを許可したい場合はsecret_id_bound_cidrsを設定します。

vault write auth/approle/role/my-app/ \
  secret_id_bound_cidrs="10.10.10.0/24"

# 設定の確認
vault read auth/approle/role/my-app

まとめ

HashiCorp Vaultを使うことで、アプリケーションのシークレットを安全に一元管理できます。 AppRoleを使えばアプリケーションがVaultから動的にシークレットを取得できるため、設定ファイルへの直書きを避けることができます。

<-- Back to home
にほんブログ村 IT技術ブログ IT技術メモへ PVアクセスランキング にほんブログ村