メインコンテンツへスキップ
HashiCorp Vault クラスターを接続して、Oliver(セキュリティプロフェッショナル)が KV シークレットの読み取り、動的なデータベースおよびクラウドクレデンシャルの取得、ポリシー・トークン・監査デバイス・クラスターヘルスの検査を、CloudThinker のセキュアサンドボックス内で動作する vault CLI を通じて行えるようにします。

対応プラットフォーム

プラットフォームサポート
Vault オープンソースセルフホスト、最近のリリース
Vault Enterpriseネームスペース対応
HCP Vault Dedicatedネームスペースを設定(デフォルト admin

前提条件

  1. 到達可能な Vault アドレス — サンドボックスは VAULT_ADDR にネットワーク経由で接続します。ご自身のマシンではありません。localhost やプライベートアドレスではなく、パブリック DNS 名または HCP エンドポイントを使用してください。
  2. クレデンシャル — Vault トークン、または AppRole(role_id + secret_id)。エージェントがクエリしたいパスへの読み取りアクセスを付与したポリシーが必要です。
  3. (Enterprise / HCP のみ) シークレットが存在するネームスペース

セットアップ

デプロイ環境に合った認証方式を選択してください。AppRole は secret_id を長期トークンの置き換えなしにローテーションできるため、本番環境で推奨されます。
1

読み取りポリシーを作成する

CloudThinker がアクセスすべきパスのみに読み取りアクセスを付与します:
vault policy write cloudthinker-read - <<EOF
path "kv/data/*" {
  capabilities = ["read", "list"]
}
path "kv/metadata/*" {
  capabilities = ["list"]
}
EOF
2

トークンを作成する

そのポリシーにトークンをバインドします:
vault token create \
  -policy=cloudthinker-read \
  -ttl=720h \
  -display-name=cloudthinker
出力の token 値をコピーします。
3

CloudThinker に接続を追加する

Connections → HashiCorp Vault に移動し、以下を入力します:
  • VAULT_ADDR:スキームとポートを含む Vault URL(例:https://vault.example.com:8200
  • VAULT_NAMESPACE:オープンソース Vault の場合は空白のまま。HCP(admin)または Enterprise ネームスペースの場合は設定
  • VAULT_AUTH_METHODToken
  • VAULT_TOKEN:前のステップで取得したトークン
Connect をクリックします。CloudThinker は vault token lookup でトークンを検証し、Connected ステータスを表示します。
トークンと secret ID は、CloudThinker がヘルスチェック中に表示するエラーメッセージからは削除されます。

接続詳細

フィールド必須備考
VAULT_ADDR必須スキームを含む完全な URL(例:https://vault.example.com:8200
VAULT_NAMESPACE任意HCP Vault Dedicated(admin)および Vault Enterprise のネームスペースデプロイのみ
VAULT_AUTH_METHOD必須token または approle
VAULT_TOKENToken 認証認証方式が Token の場合に表示
VAULT_ROLE_IDAppRole認証方式が AppRole の場合に表示
VAULT_SECRET_IDAppRole認証方式が AppRole の場合に表示

必要な権限

Oliver がクエリする必要があるシークレットパスに対して readlist を付与するポリシーを、トークンまたは AppRole にアタッチしてください。Vault はデフォルトで拒否するため、Oliver がクレデンシャルに付与されたポリシーを超えることはできません。
最小限の読み取りパスから始め、Oliver に書き込みワークフローを実行させたい場合にのみ create/update を追加してください。

エージェントの機能

Oliver のアクションはトークンまたは AppRole のポリシーによって制限されます。読み取り操作は自動的に実行されますが、Vault を変更する操作やリース発行が必要な操作は CloudThinker での承認が必要です。
機能説明
シークレット読み取りKV v1/v2 シークレットパスと値の読み取り・一覧表示
ヘルス検査シール状態、マウント済みシークレットエンジン、認証メソッドの確認
ポリシー監査ポリシー・監査デバイス・トークンメタデータの一覧表示と読み取り
動的クレデンシャル短期のデータベースおよびクラウドクレデンシャルの生成 — 承認が必要
シークレット書き込みKV シークレットとバージョンの作成・更新・削除 — 承認が必要
リース管理クレデンシャルリースの失効または更新 — 承認が必要

接続を確認する

@oliver #report list all mounted auth methods and check Vault health

プロンプト例

@oliver #report list all secrets under the kv mount and summarize what's there
@oliver #report show Vault health, seal status, and version
@oliver #recommend audit the current token — what policies and TTL does it have

トラブルシューティング

vault CLI は CloudThinker のサンドボックス内で動作し、ご自身のマシン上ではありません。localhost127.0.0.1host.docker.internal はサンドボックス自体に解決され、dial tcp ... no such host または接続拒否で失敗します。VAULT_ADDR にはパブリック DNS 名または HCP Vault Dedicated エンドポイントを指定してください。ファイアウォールや VPN の背後にある Vault は、パブリックエンドポイント・許可されたエグレス・ネットワークブリッジのいずれかで公開する必要があります。
vault にはスキームを含む完全な URL が必要です。vault.example.com:8200(スキームなし)は接続エラーになります。https://vault.example.com:8200、または開発モードのサーバーには http://... を使用してください。
トークンまたは AppRole ポリシーが、要求されたパスへのアクセスを付与していません。vault token lookup でポリシーを確認し、エージェントがクエリするパスをカバーしているか確認してください。たとえば kv/data/production/* を読み取るには、そのパスに capabilities = ["read", "list"] が必要です。
HCP Vault Dedicated および Enterprise のマルチネームスペースデプロイでは VAULT_NAMESPACE が必要です。HCP のデフォルトは admin です。HCP または Enterprise で no handler for route または permission denied が表示される場合は、ネームスペースが設定されているか確認してください。
secret_id には TTL(secret_id_ttl)があります。期限切れになると、invalid secret_id で認証が失敗します。新しい secret_id を生成し、VAULT_SECRET_ID を更新して再接続してください:
vault write -f auth/approle/role/cloudthinker/secret-id
vault statusSealed: true と表示され、操作が一切できません。Vault オペレーターがクラスターをアンシールする(vault operator unseal)必要があります。その後、エージェントは読み書きができるようになります。

セキュリティ

  • 最小権限 — エージェントがユースケースに必要な権限のみを付与します。まず読み取り専用から始め、後から拡張してください。
  • デフォルトで読み取り専用 — エージェントにこの接続で変更を行わせる場合を除き、読み取り専用の認証情報を使用してください。
  • 認証情報のローテーション — 通常のスケジュールに従ってキーとトークンをローテーションしてください。接続を更新すると、CloudThinker が新しい値を自動的に取得します。
  • オフボーディング時に失効 — 接続を削除するか、チームメンバーが退職する際には、プロバイダー側で認証情報を無効化してください。
  • 本番環境では AppRole を推奨 — 長期トークンを置き換えることなく secret_id をローテーションできます。
  • 書き込み操作のゲート — クレデンシャルの発行と変更が常に人間の承認を経るよう、書き込みパスは承認制に保ってください。

関連

Oliver Agent

セキュリティとコンプライアンスエージェント

承認コントロール

書き込み操作を承認制でゲート