
2026/03/10 11:43
カーソル・クラウドエージェント向け安全なシークレット管理 (Note: If you prefer a slightly different nuance, e.g., “Cursor Cloud エージェントのための安全なシークレット管理” is also acceptable.)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
要約: Cursor Cloud Agents は起動時にのみシークレットを受け取る必要があり、最適な方法は外部のシークレットマネージャーである Infisical からそれらを取得し、Cursor の Secrets UI には機械認証情報だけを保持することです。組み込みの UI には自動ローテーション、監査トレイル、細粒度アクセス制御といった重要な機能が欠けており、そこでトークンを保存するとスナップショット間で永続化されるハードコード値が露出します。Infisical から起動ごとにシークレットを取得することで、エージェントは常に新鮮で監査可能なデータを使用し、特定のサービスに必要な場合以外は機密情報をディスクに書き込むことがありません。実際には、エージェントは隔離された Ubuntu VM に起動し、リポジトリをクローンして依存関係をインストールした後、
infisical login --method=universal-auth で認証します。その後 infisical run(環境変数を設定)または infisical export(構成ファイルを作成)を実行し、メインタスクを起動します。生成される environment.json はインストール/スタートスクリプトを参照しつつ、ベースのスナップショットからシークレットを除外します。このアプローチは、監査性の向上、ローテーションの容易化、侵害された認証情報の被害範囲の限定によりユーザーのセキュリティを強化し、企業は CI/CD パイプライン保護と本番デプロイメントの堅牢性を高めることができます。
要約骨格
-
本文の主旨(メインメッセージ)
Cursor Cloud Agents は起動時に安全なソースからシークレットを注入する必要があります。Infisical を使用してランタイムでシークレットを取得し、Cursor の Secrets UI には機械認証情報のみを保持します。 -
根拠 / 推論(理由)
Cursor の組み込み Secrets UI はローテーション、監査トレイル、細粒度アクセス制御が欠けており、ハードコードされたトークンが露出します。起動ごとに Infisical からシークレットを取得することで、新鮮で監査可能な値をディスクへ書き込む必要なしに利用できます。 -
関連ケース / 背景(文脈・過去事例)
Cursor エージェントは隔離された Ubuntu VM 上で動作し、リポジトリのクローン、依存関係のインストール、タスク開始を行います。シークレットは VM 起動時に注入される必要があります。既存の慣行ではスナップショット内のベイクドトークンが露出する問題が発生しています。 -
今後起こりうること(将来展開・予測)
エージェントは
により認証し、その後infisical login --method=universal-auth
(環境変数設定)またはinfisical run
(ファイルベースの構成作成)を実行してサービス開始前に準備します。infisical export
はインストール/スタートスクリプトを参照し、シークレットフリーなスナップショットを保持します。environment.json -
影響範囲(ユーザー・企業・業界への効果)
ユーザーは監査性の向上、ローテーションの容易化、機械アイデンティティを環境ごとに限定することで被害拡大を抑制できます。企業は CI/CD パイプラインのセキュリティコントロールを強化し、本番展開をより堅牢に保護できます。
本文
Cursor Cloud エージェントがシークレットを扱う方法 ― 実践ガイド
ざっくり復習:Cursor Cloud エージェントの仕組み
IDE、Slack、GitHub Webhook から Cursor Cloud エージェントタスクを起動すると、そのジョブ専用に新しい Ubuntu VM が起動します。スナップショットから復元し、該当ブランチのリポジトリをクローンしたあと、
.cursor/environment.json に定義された環境ライフサイクルが実行されます。
- install – スナップショット後に一度だけ実行(例:
、npm install
)。pip sync - start – 起動時毎に実行され、エージェントが作業を開始する前にシークレットを取得できる場所です。
Cursor はまた、Secrets UI(
設定 → バックグラウンドエージェント → シークレット)を提供し、ランタイムで暗号化された環境変数としてキー‑バリュー対を注入します。
組み込みシークレットUIの短所
| 問題 | 説明 |
|---|---|
| スナップショットに埋め込まれたシークレット | 等に保存されたトークンがスナップショットされると、永続的に残ってしまう。 |
にハードコードされた値 | ファイルはリポジトリにコミットされるため、そこにある機密情報はリスクになる。 |
| ローテーション・監査履歴がない | UI は値を保存するだけで、アクセス履歴や最近のローテーションを確認できない。 |
| 長期有効な資格情報 | 6か月前に設定したトークンは手動で更新しない限り変更されない。 |
Infisical の解決策
-
Cursor の Secrets UI にマシンアイデンティティだけを保存
各エージェント環境(dev、prod、ci)用に専用の Infisical マシンアイデンティティを作成し、
とINFISICAL_CLIENT_ID
のみを格納。INFISICAL_CLIENT_SECRET -
Universal Auth で非対話型認証
export INFISICAL_TOKEN=$(infisical login \ --method=universal-auth \ --client-id=<identity-client-id> \ --client-secret=<identity-client-secret> \ --silent \ --plain)
- ランタイムでシークレットを取得
環境変数として注入するか、ファイルに書き出すか選択。
オプション A: infisical run
– シークレットを直接注入
infisical run# .cursor/start.sh export INFISICAL_TOKEN=$(infisical login \ --method=universal-auth \ --client-id=$INFISICAL_CLIENT_ID \ --client-secret=$INFISICAL_CLIENT_SECRET \ --silent --plain) infisical run --env=production --projectId=<project-id> -- node server.js
オプション B: infisical export
– ファイルへ書き出し
infisical export# .cursor/install.sh(Node の例) export INFISICAL_TOKEN=$(infisical login \ --method=universal-auth \ --client-id=$INFISICAL_CLIENT_ID \ --client-secret=$INFISICAL_CLIENT_SECRET \ --silent --plain) # プライベートレジストリ用 .npmrc を作成 infisical export \ --env=production \ --projectId=<project-id> \ --path=/npm-config \ --format=dotenv \ --output-file=.npmrc npm install
他のフォーマット:
infisical export --format=json ... --output-file=./config/secrets.json infisical export --format=yaml ... --output-file=./config/secrets.yaml
完全で安全な environment.json
の例
environment.json{ "snapshot": "snapshot-20250309-xxxxxxxx", "install": "bash .cursor/install.sh", "start": "bash .cursor/start.sh" }
.cursor/install.sh
export INFISICAL_TOKEN=$(infisical login \ --method=universal-auth \ --client-id=$INFISICAL_CLIENT_ID \ --client-secret=$INFISICAL_CLIENT_SECRET \ --silent --plain) infisical export --env=production --projectId=<project-id> \ --path=/npm-config --output-file=.npmrc npm install
.cursor/start.sh
export INFISICAL_TOKEN=$(infisical login \ --method=universal-auth \ --client-id=$INFISICAL_CLIENT_ID \ --client-secret=$INFISICAL_CLIENT_SECRET \ --silent --plain) sudo service docker start infisical run --env=production --projectId=<project-id> -- node server.js
Cursor の Secrets UI に格納されるのは
INFISICAL_CLIENT_ID と INFISICAL_CLIENT_SECRET だけです。その他すべてのシークレットは毎回起動時に新鮮な状態で取得でき、完全に監査可能かつローテーションが容易です。
環境別アクセスを分離
| アイデンティティ | 権限 |
|---|---|
| シークレットのみ |
| シークレット(承認必要) |
| シークレット、読み取り専用 |
エージェントが侵害された場合でも、そのアイデンティティがアクセスできる範囲にのみ被害が限定されます。
まとめ
- シークレットをスナップショットや
に埋め込まない。environment.json - Cursor には最小限のマシン認証情報(アイデンティティ)だけを保存。
- その他すべてのシークレットは Infisical からランタイムで取得 –
またはinfisical run
を使用。infisical export
この手法により、毎回起動時に最新のシークレットが確保され、監査履歴も完全に残り、設定を変更せずにローテーションが可能です。Infisical はフルマネージドクラウドサービスとしてもセルフホスト版としても提供されています。5 分以内で始められ、AI エージェントワークフローの基盤をエージェント自体と同じくらい堅固に保護できます。