たそ@ITインフラ初心者

taso@初心者エンジニア

新卒2年目 エンジニアが適当に語るブログてす

HashiCorp Vaultを構築してみる

はじめに

こんにちは たそ(@taso_int)です。
12月の寒い季節になりました。体調にはお気を付けください。

今回はHashiCorp Vaultを構築していきたいと思います。
正直内容的には薄いです…

HashiCorp Vaultとは

HashiCorp vaultとはHashiCorpがリリースしたソフトウェアで、
機密データを保護し、それを必要とするアプリケーションに提供することが出来ます。
クラウド運用モデルにおけるシークレットやデータを安全に保護し、
クラウドセキュリティ自動化の基盤を提供を行います。

主な機能としては以下です。

  • key、valueを管理する静的シークレット
  • クラウドSQLなどのアクセス情報を発行し、管理する動的シークレット
  • Encryption as a service(Eaas)によるデータ暗号化
  • PKI(公開鍵基盤)の提供

これらを信頼できる認証接続方式とポリシーによる認可を行うことで、
セキュアに管理することが可能です。

公式情報

vaultの公式

www.vaultproject.io

vaultのinstall

developer.hashicorp.com

vaultのドキュメント

developer.hashicorp.com

環境

AWS EC2
Amazon linux
インスタンスタイプ: t2.medium
ディスク:8GB

Vault
バージョン1.12.2

セキュリティグループはSSH、HTTP、HTTPS、8200、8201を開けることをおすすめします

インストール

今回はyumでインストールを行います。
またVaultはk8sでも構築可能らしいので機会があればやりたいと思います。

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install vault

これにてインストール完了です。

devモードで起動する

Vaultには検証用として利用できるdevモードの起動法があります。
あくまでも検証用なので本番環境では利用を推奨していません。

vault server -dev
=> Vault server configuration:
             Api Address: http://127.0.0.1:8200
                     Cgo: disabled
         Cluster Address: https://127.0.0.1:8201
              Go Version: go1.19.3
              Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
               Log Level: info
                   Mlock: supported: true, enabled: false
           Recovery Mode: false
                 Storage: inmem
                 Version: Vault v1.12.2, built 2022-11-23T12:53:46Z
             Version Sha: 415e1fe3118eebd5df6cb60d13defdc01aa17b03

==> Vault server started! Log data will stream in below:

起動後ターミナルを取られるので、新しいターミナルを開いて、 export VAULT_ADDR='http://127.0.0.1:8200環境変数を設定します。

また起動したプロンプトにUnseal KeyトークンとRootトークンが発行されるのでメモします。
vault loginを実行し、Rootトークンを入力することでloginできます。

ちなみにdevモードでもGUIが利用できますが、クラウド環境だと接続できないと思います。
そのためconfigを作成してproductionモードで起動したいと思います。

productionモードで起動する

productionモードで起動するにはconfigの設定が必要になります。
configファイルを作成します。
vault用のディレクトリも作成することをお勧めします。
vault server -config=ファイル名で起動します。

設定例(storageはお好み 自分もあまりわかってない)

listener "tcp" {
 address = "0.0.0.0:8200"
 tls_disable = 1
}
storage "file" {
  path = "/home/ec2-user/vault/file"
}
disable_mlock = true
api_addr = "http://localhost:8200"
ui=true

問題なく起動できたら今度はhttp://EC2グローバルIP:8200でログインします。
初期状態だとしたのような画面になります。

この状態はseal状態と呼び、まだ機能が有効になっていません。
ここでUnseal用のトークンとrootトークンを発行します。
今回は便宜上どちらにも1を入力します。
CLIで同じことをする場合は、
vault operator init -key-shares=1 -key-threshold=1 を実行してください

エラーがないと下の画面になるので、それぞれのトークンをメモしてください

Continue Unsealをクリックし、先ほどのUnsealトークンを入れます。
成功するとseal状態からUnseal状態になり、statusが緑になり、
機能が有効になりました。

rootトークンでログインします。
問題なくログイン出来れば完了です。

ちなみにVaultを止めると再びseal状態になり、Unsealを再度行う必要があります。

2022-12-03T12:39:47.847Z [INFO]  core: vault is sealed

ちなみにVaultはGUICLIAPIに対応しております。
本当はKVシークレットエンジンの登録までやりたかったのですが、
思ったより長くなってしまったので次やります。
弊社のアドベントカレンダーでAAPとVaultの連携を書くので楽しみに…
他の方も素晴らしい記事を書いているのでぜひチェックしてください。

qiita.com

以上で終わりとなります。ここまで読んでいただきありがとうございました。