はじめに
こんにちは たそ(@taso_int)です。
12月の寒い季節になりました。体調にはお気を付けください。
今回はHashiCorp Vaultを構築していきたいと思います。
正直内容的には薄いです…
HashiCorp Vaultとは
HashiCorp vaultとはHashiCorpがリリースしたソフトウェアで、
機密データを保護し、それを必要とするアプリケーションに提供することが出来ます。
クラウド運用モデルにおけるシークレットやデータを安全に保護し、
クラウドセキュリティ自動化の基盤を提供を行います。
主な機能としては以下です。
- key、valueを管理する静的シークレット
- クラウドやSQLなどのアクセス情報を発行し、管理する動的シークレット
- Encryption as a service(Eaas)によるデータ暗号化
- PKI(公開鍵基盤)の提供
これらを信頼できる認証接続方式とポリシーによる認可を行うことで、
セキュアに管理することが可能です。
公式情報
vaultの公式
vaultのinstall
vaultのドキュメント
環境
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はGUI、CLI、APIに対応しております。
本当はKVシークレットエンジンの登録までやりたかったのですが、
思ったより長くなってしまったので次やります。
弊社のアドベントカレンダーでAAPとVaultの連携を書くので楽しみに…
他の方も素晴らしい記事を書いているのでぜひチェックしてください。
以上で終わりとなります。ここまで読んでいただきありがとうございました。