代替手段
代替手段との比較
SSH-FrontièreはSSHアクセスを制御する唯一の方法ではありません。このページでは、既存のアプローチを比較し、最適なソリューションの選択を支援します。
比較表
| 基準 | authorized_keys command= | SSH-Frontière | Teleport | Boundary |
|---|---|---|---|---|
| 種類 | OpenSSHオプション | ログインシェル | SSH踏み台サーバー | SSH踏み台サーバー |
| 対象 | 鍵ごとに1つのスクリプト | サービスアカウント | 人間のユーザー | 人間のユーザー |
| 粒度 | 鍵ごとに1コマンド | 3段階RBAC、ドメイン、アクション、引数 | ロール、ラベル、RBAC | IAMポリシー |
| ログ | 非構造化 | コマンドごとの構造化JSON | フルセッション(リプレイ) | 監査証跡 |
| デプロイ | ネイティブ(OpenSSH) | バイナリ1つ+TOMLファイル1つ | クラスター(認証サーバー、プロキシ、ノード) | クラスター(コントローラー、ワーカー) |
| 依存関係 | なし | システム依存関係なし | データベース、証明書 | データベース |
| サイズ | — | 約1 MB(静的バイナリ) | 約100 MB | 約100 MB |
| インジェクション対策 | スクリプトの責任 | 構造的(文法パーサー) | 該当なし(対話セッション) | 該当なし(対話セッション) |
| LLM対応 | いいえ | はい(JSON、help、ディスカバリ) | いいえ | いいえ |
| ライセンス | OpenSSH(BSD) | EUPL-1.2 | AGPL-3.0(OSS)/ 商用 | BSL 1.1 |
authorized_keysのcommand=
authorized_keysのcommand=オプションは、各接続でスクリプトの実行を強制します。最もシンプルで広く使われているソリューションです。
利点
- インストール不要:OpenSSHのネイティブ機能
- 単一ユースケースにはシンプル(1つの鍵=1つのコマンド)
制限事項
- 鍵ごとにスクリプト1つ:細かい粒度なし。N個の異なるアクションにはN個の鍵、または
$SSH_ORIGINAL_COMMANDをパースするbashスクリプトが必要 - 引数の検証なし:スクリプトが生の文字列を受け取り、自身で検証する必要がある — 不適切な場合はインジェクションの原因に
- アクセスレベルなし:すべての鍵が同じ権限(スクリプト内でコーディングする必要あり)
- 構造化ログなし:ログはスクリプトに依存
- 脆弱:コマンド検証付きのbashスクリプトはセキュアな維持管理が困難
command=を選ぶべき場合
- シンプルなニーズ:1つのSSH鍵、1つの固定コマンド、パラメータなし
- 監査やRBACの要件なし
Teleport
Teleportは、セッション記録、SSO、証明書、監査証跡を備えた完全なSSH踏み台サーバーです。
利点
- セッション記録:すべてのSSHセッションの完全なリプレイ
- 統合SSO:GitHub、OIDC、SAML
- 証明書:SSH鍵管理が不要
- 完全な監査:誰が、いつ、どこから接続し、何を行ったか
制限事項
- デプロイが複雑:認証サーバー、プロキシ、ノードエージェント、データベース、証明書
- 人間向けに設計:対話セッション、マシン間プロトコルなし
- サービスアカウントには過大:CIランナーにセッション記録やSSOは不要
- デュアルライセンス:コミュニティ版(AGPL-3.0)には機能制限あり
Teleportを選ぶべき場合
- サーバーフリートへの人間のアクセス管理
- セッション記録とSSOの必要性
- クラスターのデプロイと保守のリソースを持つインフラストラクチャ
HashiCorp Boundary
Boundaryは接続の詳細を抽象化し、外部のアイデンティティソースを統合するアクセスプロキシです。
利点
- インフラストラクチャの抽象化:ユーザーはIPではなく論理的なターゲットに接続
- IAM統合:Active Directory、OIDC、LDAP
- 資格情報の注入:シークレットが動的に注入され、共有されない
制限事項
- 複雑:コントローラー、ワーカー、データベース、IAM統合
- 人間向け:自動スクリプト向けに設計されていない
- BSL 1.1ライセンス:コミュニティエディションに商用制限
- コマンドレベルの制御なし:Boundaryはホストへのアクセスを制御し、特定のコマンドは制御しない
Boundaryを選ぶべき場合
- 集中型アイデンティティ管理を持つ大規模サーバーフリート
- インフラストラクチャの抽象化の必要性(ユーザーがIPを知らない)
- HashiCorp製品の専門知識を持つチーム(Vault、Terraformなど)
sudo単体
sudoはシステムコマンドの権限昇格を制御します。サービスアカウントのアクションを制限するために単独で使用されることが多いです。
利点
- ネイティブ:すべてのLinuxシステムに存在
- 粒度が細かい:ユーザー、コマンド、引数ごとの詳細なルール
制限事項
- SSH入力を制御しない:
sudoがエスカレーションをブロックしても、SSH経由であらゆるコマンドを要求できる - プロトコルなし:構造化レスポンスなし、統合JSONログなし
- 複雑な設定:コマンドが増えるとsudoersルールの保守が困難に
sudo単体を選ぶべき場合
- リスクが低いシンプルな環境
- SSH入力が別のメカニズム(踏み台サーバー、VPN)で既に制御されている
SSH-Frontièreを選ぶべき場合
SSH-Frontièreは特定のユースケースのために設計されています:サービスアカウント(人間ではない)がSSH経由で実行できる内容の制御。
SSH-Frontièreを選ぶべき場合:
- SSH接続が自動スクリプト(CI/CD、AIエージェント、cron)である
- 粒度が必要:ドメイン、アクション、引数、アクセスレベル
- 監査と可観測性のための構造化JSONログが必要
- シンプルなデプロイが必要:バイナリ1つ、TOMLファイル1つ
- LLM対応が必要:JSONレスポンス、
help/listによるディスカバリ - クラスター(Teleport、Boundary)のデプロイと保守を望まない
SSH-Frontièreを選ぶべきでない場合:
- ユーザーが豊富で完全な対話セッションを必要とする人間である
- 他のサーバーへのSSHプロキシが必要
- SSOが必要