HashiCorp Vault UI Quick Startをやってみた

2023.04.21

「HashiCorp Vaultの雰囲気を掴みたい」

HashiCorp Vault入門として、UI Quick Startをやってみたレポートです。

HashiCorp Vaultとは

一言で言うと、機密情報を管理するためのソフトウェアです。

詳細は以下のブログを参照ください。

HashiCorp Valut チュートリアル

公式で用意されているVaultのGetting Startedは3種類あります。

今回はUI Quick Startをやってみます。 UI Quick StartはCLIよりステップが少なく、UIがついている分初めて触るにはとっつきやすいと思います。

しかし、Dynamic SecretsやGithub認証などには触れていません。 上記の機能も試したい場合は、CLI Quick Startもやってみてください。

UI Quick Start

ローカルにVaultをインストールして、Vault Server起動後ポリシーや認証の設定を行うチュートリアルです。

  1. Getting Started with Vault UI
  2. Install Vault
  3. Web UI
  4. Create Vault Policies
  5. Manage Authentication Methods
  6. Manage Secrets Engines
  7. API Explorer in Vault UI

やってみた

詳細な手順はチュートリアルを見てもらうとして、ざっくり紹介していきます。

UI Quick Start

Vaultサーバーの起動・ログイン

Vault Serverを起動します。

Vault UIは開発モード以外ではデフォルトで無効になっています。 そのため、設定ファイル(config.hcl)ににui = trueの記述が必要です。

tee config.hcl <<EOF
ui = true
disable_mlock = true

storage "raft" {
  path    = "./vault/data"
  node_id = "node1"
}

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

api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
EOF
vault server -config=config.hcl

ブラウザで「http://127.0.0.1:8200」にアクセスすればVaultのUIを確認できます。

初期設定でUnseal Keyが生成され、VaultをUnsealします。 Unseal KeyはVaultのデータ保護に必要なKeyのため、実際の運用時は機密情報をとして保管する必要があります。

以下では、Unseal Keyを5つ作成して3つ使用すればVaultをUnsealできるように設定しました。

複数人でそれぞれUnseal Keyを1つずつ持てば、Unsealを1人で行えなくなるためセキュリティを強化できます。

設定後Unseal Keyをダウンロードできます。

ダウンロード後にUnseal Keyを使って、ValutをUnsealします。

以下の画面は、Unseal Keyを1つ入力した状態です。(1/3となっている) 3ついれるとUnsealできます。

その後に、Unseal Keyと一緒にダウンロードしたRootトークンを入力することでVaultサーバーにログインできます。

ポリシーの作成

ポリシーを使って、各ユーザーのアクセス制限を行うことができます。

以下はsecret/configsys/mountsをREADできるポリシーを作成している部分です。

最終的には以下のポリシーを割り当てて、このあと作成するユーザーがtransit secretsを操作できるようにします。

# Enable Transit secrets engine
path "sys/mounts/transit" {
    capabilities = ["create", "update"]
}

# Manage Transit secrets engine keys
path "transit/keys" {
    capabilities = ["list"]
}
path "transit/keys/*" {
    capabilities = ["create", "list", "read", "update"]
}
path "transit/keys/+/config" {
    capabilities = ["create", "update"]
}

# Encrypt with any Transit secrets engine key
path "transit/encrypt/*" {
    capabilities = ["create", "update"]
}

# Decrypt with any Transit secrets engine key
path "transit/decrypt/*" {
    capabilities = ["create", "update"]
}

ユーザーの作成

Vaultでは様々な認証方法を使用することができます。

このチュートリアルでは、Username/Passwordの認証情報を作成します。

Secretsの作成

ここからの作業は作成したユーザーで行います。ポリシーで許可している操作以外はできません。

Secretsも多様な選択肢があります。

このチュートリアルではTransitを選択します。 Transitは、セキュアなデータのエンドツーエンドの暗号化を提供するために使用されるSecret Engineです。

作成したSecretのKey Actionsでは暗号化や復号化を試すことができます。 実際にHelloという文字列を暗号化して、復号化してみます。

まずはHelloと入力して、Encryptします。

暗号化後の文字列を得られました。

Decryptに移動して、暗号化後の文字列を入力します。

base64でエンコードされて、平文の文字列が返ってきました。

atob()関数を使って、デコードすることで暗号化前の文字列(Hello)を得られました。

Transit - Secrets Engines | Vault | HashiCorp Developer

Vault UIでAPIエクスプローラーを使用

Vault UIでAPI エクスプローラーを使用することができます。

この機能を使用することで、VaultのAPIエンドポイントに対してUI上でリクエストを送信し、レスポンスを確認できます。

Vault APIを簡単に実行できて、便利です。

実際にAPIを実行してみます。

UI上でレスポンスを確認できます。 今回は、有効なシークレットエンジンのリストを取得しました。

前の手順で有効化したtransitが有効になっていることを確認できました。

おわりに

HashiCorp Vault UI Quick Startをやってみました。

UI初めて使いましたが、直感的に操作できていい感じです。 APIエクスプローラーも便利でした。

CLIは難しそうという方もUIから試して見るといいかもしれません。

CLIチュートリアルのほうが触れる機能(Dynamic SecretsやGithub認証)は多いので、どちらも試してみるのがよさそうです。

以上、AWS事業本部の佐藤(@chari7311)でした。