APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

シークレット管理に焦点を当てたマネージドサービス HCP Vault Secrets が発表されました

こんにちは、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 に対する強い思いをもってプロダクト/サービスを開発されていることが伺えます。

www.hashicorp.com

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)」が表示されていますね。

HCP ダッシュボード

「Vault Secrets (Beta)」を選択すると、初期状態は以下のような画面が表示されます。

Vault Secrets トップ画面

ここで「Create your first application」を選択し、アプリケーション名と説明文を入力したら最初の「アプリケーション」が作成されます。

アプリケーション作成

HCP Vault Secrets は、Vault クラスタにあるようなポリシーなどの概念はなく、「アプリケーション」という単位でシークレットを管理します。

引用: https://www.hashicorp.com/blog/announcing-hcp-vault-secrets-public-beta

アプリケーション作成後の初期状態はとてもシンプルで、シークレットの作成するボタンしか表示されません。

アプリケーション初期状態

「Add new secret」からシークレットを作成します。 作成できるシークレットは Key Value 形式のみのようです。

シークレット作成

アプリケーション内に作成したシークレットが表示されます。 ここではシークレットの値の参照、コピー、更新、そしてシークレットの削除ができます。

シークレット一覧

シークレットの登録は以上です。 HCP Vault Secrets はクラスタのセットアップが不要ということもあり、とても短い時間でシークレットを登録できました!

シークレットの参照

次に、作成したシークレットをクライアントから参照します。

HCP Vault Secrets には専用の vlt という CLI が用意されており、この CLI を通じてシークレットを使用します。 公式ドキュメントに環境毎のインストール方法が載っていますので、利用されている環境に沿った手順で CLI をインストールします。

developer.hashicorp.com

私の環境では 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 のみとなっており、今回のお試しの中ではスキップさせていただきます。

引用: https://www.hashicorp.com/blog/announcing-hcp-vault-secrets-public-beta

パブリックベータの後半では他のシークレットマネージャーとの連携機能も公開されるとのことなので、Azure を触っている身としては Azure Key Vault との連携が待ち遠しいですね!

おわりに

今回は、パブリックベータ版として公開されたばかりの HCP Vault Secrets について紹介・お試しをしてみました。 HCP Vault とは異なる機能を持っているため、どのような使い方が適しているか、どのような事例が出てくるのか、今後が楽しみなサービスですね!

また、HashiDays 2023 では HCP Vault Secrets 以外にも今年 3 月にベータ版が公開された Vault Secrets Operator が GA したという発表がされました!

www.hashicorp.com

Vault Secrets Operator についても記事を公開していますので、ぜひご覧ください。

techblog.ap-com.co.jp

techblog.ap-com.co.jp

ACS事業部のご紹介

私達 ACS 事業部は Azure・AKS などのクラウドネイティブ技術を活用した内製化のご支援をしております。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: 埜下 太一
AKS/ACA をメインにインフラ系のご支援を担当しています。
個人ブログ

*1:「Security Posture」とは Microsoft が提案している「攻撃に強い IT 環境の構築」を表す用語のようです。 Platform Engineering の考えでいうと、プラットフォームチームは「攻撃に強い IT 環境を構築して、開発チームに提供する」ことが目的の一つになるのでしょうか。 まだ Platform Engineering に詳しくないため多くは語れないですが……。