見えないデフォルトの危険
チュートリアルの断片をそのままチーム共通ssh_configへ貼ると、人手デバッグと無人Runnerが同じForwardAgent方針を共有する。ノートPCのagentに個人用GitHubや別会社の鍵が混ざれば攻撃面は一覧しきれない。
OpenSSHが転送するagentはリモート側でUNIXドメインソケットとして現れる。同一Unixユーザー文脈で動くプロセスは署名要求を繰り返し試せる。launchdやcron、npmフックが同居すると露出時間がバーストする。
ラップトップ→バスション→リース済みMac→社内Gitという鎖では、どこかでsudo権を持つ管理者が転送経路を観察できる。これは ControlMaster が握る性能問題とは別軸の話だ。
成果物アップロード用SFTPユーザーとソース取得を同一Unixアカウントに載せると、ForwardAgentの乱用がリポジトリ鍵と成果物ディレクトリを同時に汚染する。
脅威モデル:署名判断を誰に委ねるか
単一テナントのリースMacと多チームバスションでは前提が違う。後者ではForwardAgentを既定で閉じる。
読み取り専用deploy keyやGitHub Apps、短期PATとOIDC連携はグローバル転送より証跡が残りやすい。
バスション運用が「どの指紋がいつ署名したか」をSOCに説明できないなら転送を許可しない。
rm-dev と rm-ci を分け、それぞれに別鍵と転送方針を割り当てる。
ForwardAgentはプロトコルの欠陥ではなく、署名という判断そのものを外部へ丸投げする機能だ。
測れる実験計画
RTTが120〜400msでもForwardAgentが削るのは帯域ではなく「鍵配布やレビューの会合の回数」である。ノート直結Git・deploy keyのみのMac・ForwardAgentありの三条件で復旧時間と監査チケット数を比較せよ。
deploy keyやOIDCでほぼ賄えるならForwardAgentは例外承認制へ降格する。
鍵ローテーションは チェックサムゲート と同じ変更票に載せ、レビュー担当とセキュリティ連絡先を固定する。
多地域チームではバスション地域とGitホスト地域がズレたときのデータ所在地要件とForwardAgentは無関係ではない(サブ処理者フローとして扱う)。
緊急時に無効化できるHost別名をRunbookへ書き、四半期ごとにssh -vで鍵提示順を点検する。
演習:侵害時の鍵失効(転送あり/なし)、deploy keyロテ後のサブモジュールgrep、SIEM三問、協力会社向け期限付きHost——いずれもチケットに残す。
Apple SiliconではbrewとシステムOpenSSHでIdentityFileがずれることがある。転送やrunner議論の前にssh -Gで揃える。やむを得ず転送するならバスション記録とCIパイプラインIDを突合し、規制領域では承認境界がエージェント内で混ざる点に留意する。
マトリクス
| 状況 | ForwardAgent | 利点 | リスク | 代替 |
|---|---|---|---|---|
| 専用リースMacの単独開発者 | 短期のみ可 | 鍵コピー省略 | ノートPCagent混在 | 短期証明書 |
| 共有バスション | 原則禁止 | — | ログ欠落 | ProxyJump+分割鍵 |
| セルフホストRunner | 非推奨 | 楽に見える | 奪取で集約 | OIDC+deploy key |
| SFTPのみ | 禁止 | — | 文脈混線 | Unix分割 |
| 深いサブモジュール | 慎重 | 鍵削減 | 監査困難 | ミラー/vendor |
| 高コンプラ | 通常禁止 | — | 否認困難 | SSH CA |
表はオンボーディングのチェックリスト。「共有バスション」は転送拒否寄り、「専用リースMac」だけ狭い例外。
どれにも当てはまらない場合は、まずアカウント棚卸しとサブモジュールから。
How-to
Host rm-dev
ForwardAgent yes
IdentitiesOnly yes
Host rm-ci
ForwardAgent no
IdentitiesOnly yes
Host bastion
ForwardAgent no
手順1:ヒューマン/自動化/SFTPを別Hostへ。
手順2:OIDC 優先。
手順3:転送後はSSH_AUTH_SOCKを解放。
手順4:IdentitiesOnly と単一IdentityFile。
手順5:known_hosts を固定。
手順6:成果物パイプライン と分割。
手順7:ControlMaster と同様に緊急別名を用意。
関連
ProxyJump → OIDC → known_hosts → 並列SFTP → ホーム / 料金 / ヘルプ
読む順序はトポロジ優先:転送が経路に載る理由を説明できるまでProxyJumpを読み切る。OIDCで短命資格を先に敷けば、エージェント前提のssh_config肥大を避けられる。
FAQ
TCP転送との差は?
署名権の移動対バイトの移動。
FIDO2 skは?
触確認が不安定、CI鍵へ。
IdentitiesOnlyで遅い?
ホスト側ロックより安い。
サブモジュールにForwardAgentは必要?
稀。ミラーとモノレポで上流を一点化できればdeploy keyとOIDCで足りることが多い。
転送ありでSOC2を説明できる?
記録とCI IDを突合できることが前提。
まとめ:ForwardAgentは署名の一時委譲。共有経路では既定で閉じる。
限界:悪性ドットファイルには勝てない。
対比:SFTPMACのリースMacは隔離とSLAを契約へ。
例外承認と鍵ローテを同じ台帳へ。
