アーキテクチャ選定の比較表
直結SSHは早いが許可リストと鍵が散らばりやすい。Jump Hostは入口を一つにし、MFAや記録を集約できる(自動で安全になるわけではない)。
| 観点 | Jump Host | 直結SSH |
|---|---|---|
| 攻撃面 | 入口集約、ノード非公開化しやすい | 各Macが22番等を広く露出しがち |
| 統制 | MFA・許可リスト・記録を集約 | ホスト複製かVPN依存になりがち |
| 遅延 | 1ホップ増、ProxyJumpで緩和 |
経路良好なら最小RTT |
| 侵害時 | バスション侵害は重い、東西監視が要る | 当該ホストに直撃 |
| 向き | 複数リモートMac・監査向き | 単一ノード・強VPN・緊急経路 |
アカウントとロールモデル
共有ログインではなく人/自動化ごとにUnixユーザまたはSSHプリンシパルを分ける。権限分権の例:開発・CI・運用・ブレークグラス。Jump側は command= 等でCIの到達範囲を狭める。
- 開発:対話シェル、sudoは別ロールかチケット制。
- CI:非対話、
PermitOpen/強制コマンドで限定。 - 運用:再起動・ログ閲覧、開発鍵と分離。
- 緊急:オフライン保管・二重承認・短TTL・四半期ドリル。
ノード増減は権限フェイルオーバー、チーム同期と併設。
証明書の発行と配布手順
SSH CA+短命ユーザー証明書で authorized_keys 乱立を抑え、証明書ローテーションを期限とシリアルで回す。CA秘密鍵はHSM/オフライン/ボールト署名に置き、公開Jump上に置かない。
- ユーザCAとホストCAを分離し、Macの
TrustedUserCAKeysにユーザCA公開鍵を配置。 sshd_configで許可プリンシパル(例developers/ci-readonly)を明示。ssh-keygen -sで-V期間を切り、狭ロールはforce-commandを検討。- 配布はIdPや短命チャネル。メールでの長期鍵送付は避ける。
- 本番Jump経路で
ssh -vv確認後、パスワード認証を止める。
ローテーションと失効のフロー
先に新証明書を配りカナリア接続のあと、KRLやCAで旧資格を失効。オフボは「CA失効+KRL+静的鍵削除」を一括で。
| ロール | 有効期限 | ローテ周期 | メモ |
|---|---|---|---|
| 対話開発 | 30~90日 | 月~四半期 | 切替窓は新旧短時間併存可 |
| CI | 7~30日 | リリース列車/週次 | パイプライン秘密と同期、人間転用禁止 |
| Jumpホスト鍵 | ≤365日 | 年次段階更新 | UpdateHostKeys、短期二重提示でTOFU緩和 |
| 静的ユーザ鍵 | — | ≤90日 | 暫定、CAへ移行 |
| ブレークグラス | 24h~7日 | 件ごと+四半期 | 自動失効・全ログ・即失効 |
CA/秘密の責務はシークレット最小権限と同じオーナーに寄せるとよい。
監査と最小権限
記録するのはメタデータ(時刻・送信元IP・プリンシパル・シリアル・接続先・成否)。環境変数やコマンド本文は原則除外。失効後成功・未知プリンシパルをアラート。Mac側はACL・署名鍵分離・CIに管理者を渡さない。共有ビルドノード構成と揃える。
- 集約ログを90日+保持し四半期アクセスレビュー。
- 年2回ランダム失効リハ(5分以内拒否を確認)。
よくある質問(FAQ)
Q: Jumpと直結の線引きは?
A: 入口統制・非公開ノードならJump。強VPN+文書化された同等統制なら直結可。
Q: 証明書と長期鍵?
A: 共有プールはCA署名の短命証明書優先。長期鍵は90日ローテ付きの暫定。
Q: ローテの要点は?
A: 上表の周期。重複窓→失効。緊急は最優先KRL。
Q: 監査で秘密を避けるには?
A: メタデータ中心。全録画はJumpのみ方針で限定。