シークレット
シークレットは、名前のついたキー/値のエントリの束です。HashiCorp Vault の KV エンジンと同じ形で、1 つのパスがキーと値のマップを持ちます。AWS のアクセスキー ID とシークレットアクセスキーのように、まとまって使う資格情報は、2 つのシークレットに分けず 1 つのシークレットの 2 エントリとして持ちます。
管理サイドバーの Secrets を開くと管理できます。レコードは Name、任意の Description、タグ、そして種類を持ちます。
どこで使われるか
- MCP サーバー — ヘッダーの値と環境変数の値には
${secret:name/key}を埋め込めます。展開されるのは接続のときです。 - エージェントスキル — スキルの Auth Password は 1 エントリへの参照で、入力ではなくドロップダウンから選びます。
1 つのエントリは必ず name/key で指します。エントリが 1 つしかないシークレットでもキーは必須です。名前だけではマップを指すことになり、値を指せないからです。キーのない ${secret:name} は文字列としてそのまま渡されるのではなく、解決に失敗します。
2 つの種類
| Local(暗号化) | HashiCorp Vault | |
|---|---|---|
| 保存されるもの | エントリそのもの。値は暗号化されます | KV v2 への参照だけ。Vault Mount と Vault Path |
| 値の取得元 | 暗号化された保存領域 | 解決のたびに Vault から直接読みます |
| 詳細ページの表示 | 保存済みのキーすべてと、空の値 | マウントとパス |
| エントリの編集 | 値を空のままにすると保たれ、入力し直すと置き換わり、行を消すとそのエントリが消えます | Vault の側で行います |
値はどちらの種類でも返されません。平文でも暗号文でも返りません。だから Local の詳細ページは、キーだけを並べて値を空にします。キーだけは読めるので、ピッカーが一覧できます。Local なら保存されたマップから、Vault ならその時点で Vault から読みます。
Vault のシークレットは、そのシークレットが属するテナントの Vault から読まれます。その接続はテナントの admin が Tenant Settings で設定します。接続していないテナントは、テナント自身の資格情報でグローバル Vault から読みます。何を読めるかは、その資格情報に付いた Vault ポリシーが決めます。どちらもなければ、vault 種別のシークレットは解決できません。Local のシークレットを暗号化する鍵は、設定リファレンスで一度だけ設定します。
改名と削除
シークレットは名前で参照され、解決は使うときに行われます。何かから参照されているシークレットを改名したり削除したりしても、その場では失敗しません。次に使われたときに、見つからなかったシークレット名とともに失敗します。参照が切れたエージェントスキルは、次に Pull したときに理由を自分のレコードに記録します。
ただし、参照を保存するときにはチェックが入ります。ヘッダーや環境変数でシークレットを参照する MCP サーバーを保存するとき、スクリプトの Test Run を実行するとき、スキルの Auth Password を保存するときは、そのシークレットが存在し、かつ自分が開けるものでなければなりません。アクセス制御タグで自分から隠されているシークレットは、存在しないものとまったく同じように拒否されます。すでにそうしたシークレットを参照しているレコードを編集する場合も、ほかのフィールドだけを変えるときを含めて同じです。