こんにちは、ACS 事業部の埜下です。
先日 6/13 に開催された HashiDays 2023 にて、HCP Vault Secrets というサービスが公開されました! 現時点ではまだパブリックベータになりますが、早速試してみましたのでご紹介します。
HCP Vault Secrets とは
HashiCorp 社が提供する、HashiCorp Vault の新しいマネージドサービス (SaaS) です。
発表時の公式ブログによると、HCP Vault Secrets はシークレット管理に焦点を当てたサービスということで、「開発チームのアジリティを維持したまま、プラットフォームチームが Security Posture*1 の 強化に専念できるように」と開発したようです。
4 月には共同創業者兼 CTO である Armon Dadgar 氏が来日されて Platform Engineering について語られたように、HashiCorp 社では Platform Engineering に対する強い思いをもってプロダクト/サービスを開発されていることが伺えます。
HCP Vault Secrets のサービス内容を見ていく中で「既存の HCP Vault とは何が違うの?」と疑問に思いましたので比較してみました。
項目 | HCP Vault | HCP Vault Secrets |
---|---|---|
Vault クラスタ | Vault Enterprise クラスタがプロビジョニングされる | クラスタはプロビジョニングされない |
クラスタのセットアップ | ポリシー作成や認証方法/シークレットエンジン有効化など | セットアップ不要 |
権限管理 | クラスタ内の設定に従う | HCP のアクセス管理に従う |
シークレットの種類 | 各種シークレット | kv のみ |
操作 | CLI、Web UI、API | CLI、Web UI (HCP ポータル)、API |
このように、同じマネージドサービスと言っても HCP Vault と HCP Vault Secrets では機能に違いがあります。 HCP Vault Secrets は「シークレット管理に焦点を当てた」だけあって、Vault クラスタが不要になることでシークレット管理の運用負荷を大幅に減らすことができそうです。
もちろんメリットだけでなく、「kv 以外のシークレットを格納できない」など機能は絞られている点はありますので、これらの違いはどちらのサービスを採用するかの判断基準になるかと思います。 具体的な採用基準やワークフローへの取り入れ方については今後記事にしていく予定です。
シークレットの登録
ここからは、実際に HCP Vault Secrets をお試しした内容を紹介していきます。
まずは HCP Vault Secrets にシークレットを登録してみます。
HCP (HashiCorp Cloud Platform) にログインしてダッシュボードを表示します。 すると、メニューに「Vault Secrets (Beta)」が表示されていますね。
「Vault Secrets (Beta)」を選択すると、初期状態は以下のような画面が表示されます。
ここで「Create your first application」を選択し、アプリケーション名と説明文を入力したら最初の「アプリケーション」が作成されます。
HCP Vault Secrets は、Vault クラスタにあるようなポリシーなどの概念はなく、「アプリケーション」という単位でシークレットを管理します。
アプリケーション作成後の初期状態はとてもシンプルで、シークレットの作成するボタンしか表示されません。
「Add new secret」からシークレットを作成します。 作成できるシークレットは Key Value 形式のみのようです。
アプリケーション内に作成したシークレットが表示されます。 ここではシークレットの値の参照、コピー、更新、そしてシークレットの削除ができます。
シークレットの登録は以上です。 HCP Vault Secrets はクラスタのセットアップが不要ということもあり、とても短い時間でシークレットを登録できました!
シークレットの参照
次に、作成したシークレットをクライアントから参照します。
HCP Vault Secrets には専用の vlt
という CLI が用意されており、この CLI を通じてシークレットを使用します。
公式ドキュメントに環境毎のインストール方法が載っていますので、利用されている環境に沿った手順で CLI をインストールします。
私の環境では WSL2 (Ubuntu 22.04.1) の環境では CLI は問題なくインストールできましたが、後続のログイン処理で失敗しました……。
そのため、PowerShell を使って Windows 上で vlt
コマンドを実行していくことにします。
$ vlt Usage: vlt [--version] [--help] <command> [<args>] Available commands are: apps Lists the apps in the project config Lists or updates the current config login Login to the Vault Secrets web services logout Log out of the Vault Secrets web services run Run a process while injecting secrets as ENV vars secrets Lists the secrets in an app version Shows the vlt cli version and golang version $ vlt version 0.2.0, git sha (7d87b79512349cfed8dc7420beb3f9ad192153c1), go1.20.4 amd64
CLI のインストールが完了したら vlt login
コマンドでログインします。
ログイン時はブラウザが起動して、HCP にログインされます。
WSL2 環境ではうまくホスト OS (Windows) のブラウザを起動できずにログインに失敗していました。 ブラウザを起動できない環境では、HCP の Service Principal Key を使ったヘッドレスログインもあるため、適した方法を選択してください。
$ vlt login The default web browser has been opened at https://auth.idp.hashicorp.com/oauth2/auth. Please continue the login in the web browser. Success! Successfully logged in
無事にログインできたようです。
次に、vlt config init
コマンドで CLI の初期設定をおこないます。
実行すると HCP Vault Secrets に作成したアプリケーションが表示されました。 CLI で使用するアプリケーションを選択するようです。
$ vlt config init Organization with ID 00000000-0000-0000-0000-000000000000 selected Project with ID 00000000-0000-0000-0000-000000000000 selected Use the arrow keys to navigate: ↓ ↑ → ← ? Select an application name: > vault-secrets-demo
アプリケーションを選択したら、いよいよシークレットを参照します。
vlt secrets
コマンドでは、アプリケーション内のシークレットが一覧表示されます。
$ vlt secrets Name Latest Version Created At PASSWORD 1 2023-06-14T02:01:51.725Z
vlt secrets get <シークレット名>
で、指定したシークレットのバージョンや作成日時を取得できますが、ここではシークレットの値はマスキングされた状態で表示されます。
$ vlt secrets get PASSWORD Name Value Latest Version Created At PASSWORD **************** 1 2023-06-14T02:01:51.725Z
-format
オプションを付与することで、より詳しい情報を指定フォーマットで取得できます。
ここでは JSON を指定して jq
で整形しています。
$ vlt secrets get --format json PASSWORD | jq { "created_at": "2023-06-14T02:01:51.725Z", "created_by": { "email": "hoge@fuga", "name": "hoge@fuga", "type": "TYPE_USER" }, "latest_version": "1", "name": "PASSWORD", "version": { "created_at": "2023-06-14T02:01:51.725Z", "created_by": { "email": "hoge@fuga", "name": "hoge@fuga", "type": "TYPE_USER" }, "type": "kv", "version": "1" } }
シークレットの値を表示する際は --plaintext
オプションをつけて実行します。
$ vlt secrets get --plaintext PASSWORD hoge
CLI を使ったシークレットの参照は以上です。
vlt
コマンドだけでなく、API からもシークレットを参照できるようなので、 CI/CD パイプライン等の要件に併せて組み込むことができそうです。
アクティビティログ
HCP Vault Secrets には、アクティビティログというシークレットに対するアクセス履歴を HCP ポータル上から確認する機能があります。
上記のスクリーンショットは、実際に以下のような操作を記録しているアクティビティログになります。
- アプリケーション作成
- シークレット作成
- ポータルからシークレット参照
- CLI からシークレット参照
今のところ通知機能等はないようですが、不正利用されていないか簡単に HCP ポータルから確認できるのは便利ですね。
外部シークレットマネージャーとの連携
HPC Vault Secrets は外部シークレットマネージャーと連携して、シークレットを同期する機能があります。 現時点 (2023/6/14) で対応している外部シークレットマネージャーは AWS Secret Manager のみとなっており、今回のお試しの中ではスキップさせていただきます。
パブリックベータの後半では他のシークレットマネージャーとの連携機能も公開されるとのことなので、Azure を触っている身としては Azure Key Vault との連携が待ち遠しいですね!
おわりに
今回は、パブリックベータ版として公開されたばかりの HCP Vault Secrets について紹介・お試しをしてみました。 HCP Vault とは異なる機能を持っているため、どのような使い方が適しているか、どのような事例が出てくるのか、今後が楽しみなサービスですね!
また、HashiDays 2023 では HCP Vault Secrets 以外にも今年 3 月にベータ版が公開された Vault Secrets Operator が GA したという発表がされました!
Vault Secrets Operator についても記事を公開していますので、ぜひご覧ください。
ACS事業部のご紹介
私達 ACS 事業部は Azure・AKS などのクラウドネイティブ技術を活用した内製化のご支援をしております。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
*1:「Security Posture」とは Microsoft が提案している「攻撃に強い IT 環境の構築」を表す用語のようです。 Platform Engineering の考えでいうと、プラットフォームチームは「攻撃に強い IT 環境を構築して、開発チームに提供する」ことが目的の一つになるのでしょうか。 まだ Platform Engineering に詳しくないため多くは語れないですが……。