2026 クラウド Mac:委託先向け SSH 強制コマンドと authorized_keys の監査耐性パターン
Apple Silicon Mac mini をクラウドで共有し、委託先と社員が同じ UNIX アカウントに乗ると、~/.ssh/authorized_keys が「全員フルシェル」へ退化しがちです。2026 年の実務的結論は、鍵ごとに command= と restrict、そして明示的な no-port-forwarding を積み、スクリプト化した負のテストで挙動を固定し、指紋受理ログに CMDB のリース ID を紐付けることです。 本稿ではラッパーと git-shell の比較表、5 列の能力マトリクス、MacLogin の香港・東京・ソウル・シンガポール・米国リージョンを想定した 7 ステップ展開、SOC2 類のエビデンスに転記しやすい FAQ をまとめます。
鍵投入前に 初回 SSH ホスト信頼チェックリスト で接続先を固定し、複数人がまだ対話シェルを必要とするなら 共有セッション統制 と併読してください。接続手順は ヘルプ、リージョン比較は 料金、TCC ダイアログが必要な瞬間だけ VNC を併用し、シェル権限を膨らませない運用が安全です。
クラウド Mac はオンプレの固定端末と異なり、OS アップデートや再イメージの頻度が高いため、authorized_keys の差分レビューを月次で回すチームと四半期でしか見ないチームでは事故確率が桁違いになります。MacLogin のようなレンタル環境では、リージョンごとに同じ plist と同じラッパーバージョンを配布しつつも、委託先ごとに鍵スタンザを分離しておくと、鍵失効時の影響半径が明確になります。
誰がレンタル環境で強制コマンドを必要とするか
CI 専用ボットだけが対象ではありません。四半期内に「1 委託先 1 ホスト」を用意できない調達制約のとき、強制コマンドは最も安価な補償コントロールになります。
- 規制対象 SaaS:読み取り専用 Git が VPC スキャンに転化しないことを示す必要がある。
- モバイルリリース:一時的なアップロード権限と sudo 可能シェルを切り離したい。
- AI オートメーション:デプロイ鍵が単一オーケストレーション以外を起動しないようにしたい。
- MSP:数十台の MacLogin リースを運用し、コメント行にチケット番号を埋め込みたい。
通常シェルが過剰であるサイン
ログに現れる前兆は小さく、監査では大きく見積もられます。次のいずれかが当てはまれば優先度を上げてください。
- 同一鍵が 3 つ以上のホストグループに出現し、ローテ期限が書かれていない。
- 読み取り専用のはずのアカウントから
ssh -Rが観測される。 - ペンテストでローカル転送から内部管理 API に到達したがパスワード認証は無効。
- コンプライアンス設問が「コマンド許可リスト」を要求しているのに答えが「鍵認証のみ」で止まっている。
command="..." のクォート誤りはその鍵を即座に壊します。sudo -e で編集し Git で差分管理し、捨て鍵で本番前に検証してください。パターン表:ラッパー対サブシステム
| シナリオ | 推奨 | 監査で有利な理由 | クラウド Mac の注意 |
|---|---|---|---|
| ベンダー読み取り専用 Git | git-shell 系の強制コマンド | argv 形が文書化されている | リポジトリパスをホーム外に置くポリシーなら分離を忘れずに |
| 単一 CI アーティファクト取得 | argv をホワイトリストする小さなラッパー | Git diff で改ざんが見える | インタプリタ更新で静かに壊れるのでピン留め |
| 48 時間ブレイクグラス | 期限付きコメントの別鍵 | 時間境界が明確 | 期限後は鍵素材ごと廃棄し再発行 |
| バスション越しテレメトリ | 極小シンク(例:cat)+ネットワーク側の横展開遮断 | 攻撃面が最小 | sshd レベルの TCP 転送ポリシー とセット |
能力スコアカード:オプションの積み方
| バンドル | ポート転送 | PTY | scp 風 | エージェント転送 | 残余リスク |
|---|---|---|---|---|---|
restrict のみ | バンドルで抑止 | 多くは抑止 | 明示許可が要る | 抑止 | 低(OpenSSH 版確認は必須) |
command=+手動 | no-port-forwarding 次第 | 調整可 | ラッパー次第 | no-agent-forwarding を推奨 | 中(編集ミス) |
| 無制限 | 許可されがち | 許可 | 許可 | 許可されがち | 高 |
ssh -G の実効オプションを記録し、24 時間で鍵に当たる送信元 IP 数(個人なら多くても 5 未満)、対話セッション中央値(45 分超は調査)を追跡してください。本番 authorized_keys への 7 ステップ
- 棚卸し: コメント付きで鍵をエクスポートし、所有者・期限・チケット欠落を拒否。
- 分類: 人間対話/機械読み取り/ブレイクグラス の三類に限定。
- ドラフト: 機械鍵は
restrict,command="/usr/local/bin/ci-git-bridge.sh"のように束ねる。 - 構文検証: 許可されたら
sshd -Tとテストユーザで起動確認。 - 負のテスト:
RequestTTY、許可外scp、-Rが必ず失敗すること。 - カナリア: まず東京など単一リージョンで 72 時間。
- 証跡: diff・端末ログ抜粋・統合ログ相関を変更記録に添付。
git-shell とカスタムラッパーの早見
Git プロトコルだけなら git-shell が最速です。defaults や Xcode API、複数リポジトリ ACL が混ざる瞬間から署名付きラッパーへ移行し、argv・送信元 IP・リース名を JSON で残します。
ログ実装のコツ
ファイルは 0600、あるいは logger で unified logging へ。リージョンコード HK/JP/KR/SG/US を含めると SIEM ルールが単純化します。
監査で実際に求められるフィールド
| アーティファクト | 最低保持 | オーナー | メモ |
|---|---|---|---|
| authorized_keys diff | 365 日 | プラットフォーム | チケット SSH-FRC-2026 とリンク |
| 負のテストログ | 180 日 | AppSec | 転送拒否を明示 |
| 公開鍵受理ログ | 90 日 | SOC | 名簿更新と突合 |
FAQ
Match User は per-key を置き換えるか? 粗い。同一アカウントに人間と CI が混在するなら per-key が拡張性に勝ちます。
FIDO2 鍵は? ハードウェア認証でも強制コマンドは別レイヤーとして必要です。
VS Code Remote SSH は? 転送と PTY を前提にする別鍵クラスとして設計しない限り危険です。
Mac mini M4 が実験に向く理由
デスクと同じ OpenSSH/launchd スタックをクラウドで再現できるため、東京で検証したラッパー挙動をシンガポールのエビデンス写真と一致させやすいです。M4 の統合メモリは git pack と軽量バリデータを同時にさばき、将来的に端末推論を挟む余地も残ります。MacLogin でリージョン横断コピーしつつ、シェル権限を広げず VNC で TCC だけ突破する運用が現実的です。
負荷が見えたら 料金ページ でステージングと本番を分離し、ラッパーの tarball だけを共有してください。