gNSI 内部実装¶
このページは gNSI(概要ハブ) の派生で、4 サービスの内部実装と host service に絞る。概念は gnsi-hld-concepts.md、設定 / 運用は gnsi-hld-operations.md、制限と HLD 乖離は gnsi-hld-limitations.md を参照。
実装状況の境界(partially implemented)
以下の内部実装記述のうち、Certz の handler は sonic-gnmi に実装済 で master 上で動作する。一方 Authz / Pathz handler および Credentialz の console_mgmt / ssh_mgmt host service は未実装 で、HLD 提案段階のまま対応 PR が未取り込み。具体的な PR 一覧と未対応 RPC は gnsi-hld-limitations.md を参照。
1. Certz¶
Certz.Rotate は bidirectional streaming RPC で以下を入れ替える1:
- Server Certificate
- Root Certificate Bundle (Trust Bundle)
- Certificate Revocation List (CRL)
- Authentication Policy
Profile¶
PKI 群を SSL profile 単位で束ねる。デフォルトは gnxi プロファイル(gNMI / gNOI / gNSI 自身が使う)1:
| RPC | 用途 |
|---|---|
GetProfileList |
プロファイル列挙 |
AddProfile |
新規追加 |
DeleteProfile |
削除(gnxi は削除不可)1 |
CSR¶
server がオプションで対応すれば、Rotate ストリーム内で CSR を生成し、外部 CA に署名させて取り込める1:
CanGenerateCSR()で能力照会Rotate(GenerateCSRRequest)で CSR 取得 → 外部署名 →Rotateで証明書取り込み
2. Authz¶
gRPC アクセスのポリシーベース認可。policy は JSON 文字列(gRPC A43 スキーマ)で記述し、gRPC server に file watcher + Interceptor で適用する1。
Authz.Rotate(): ポリシー差し替え(Certz と同じ Finalize/rollback 動作)Authz.Probe(): 現行ポリシーで指定リクエストが通るかテスト
3. Pathz¶
gNMI パス単位 で read/write を絞り込む認可。ポリシープロセッサが gNMI request の冒頭で評価する1。
Pathz.Rotate()/Pathz.Probe()
4. Credentialz¶
コンソールユーザと SSH の鍵・パスワード管理。host service モジュール経由で /etc/passwd / /etc/shadow / /etc/sshd/... 等を直接書き換える1。
Console (console_mgmt host service module)¶
sequenceDiagram
participant FE as gNSI Credentialz FE
participant HS as console_mgmt
FE->>HS: create_checkpoint
HS->>HS: cp /etc/passwd /etc/shadow → backup
FE->>HS: set (JSON: ConsolePasswords[])
HS->>HS: replace /etc/passwd /etc/shadow
alt Finalize 受領
FE->>HS: delete_checkpoint
HS->>HS: backup を破棄
else 未 Finalize で stream 終了
FE->>HS: restore_checkpoint
HS->>HS: backup を上書き復元
HS->>HS: backup を破棄
end
set の payload1:
SSH (ssh_mgmt host service module)¶
console_mgmt と同じ checkpoint / set / restore / delete 構造。バックアップ対象ファイルが SSH 系全般(sshd_config、host key、各 home の authorized_keys / authorized_users、CA 公開鍵)に拡大される1。
set のリクエスト種別1:
| 種別 | キー | 動作 |
|---|---|---|
| 認可鍵 | SshAccountKeys |
/home/<account>/.ssh/authorized_keys を置換 + sshd 再起動 |
| 認可ユーザ | SshAccountUsers |
/home/<account>/.ssh/authorized_users を置換 + sshd 再起動 |
| CA 公開鍵 | SshCaPublicKey |
/etc/sshd/ssh_ca_pub_key を置換 + sshd 再起動 |
options には OpenSSH の from=... 等の鍵オプションをそのまま渡せる1。
実装フェーズ境界¶
Phase 別の実装済 / 未実装 サマリ
本ページは monitor: partially_implemented で、HLD で示された一連の機能
が 段階的に取り込まれている 状態を扱う。フェーズ毎の実装境界を
1 枚の表に集約する (詳細は本ページ上部の diff admonition および
discrepancy-index を参照)。
| Phase | 範囲 (機能 / 段階) | 実装済 (master 取り込み済) | 未実装 (HLD 提案のみ) |
|---|---|---|---|
| Phase 1 — 基本機能 | HLD §概要 / §設計の中核ユースケース | 取り込み済 — 本ページの「実装の概観」「実装詳細」節および diff admonition の現状側を参照 |
— (Phase 1 は実装済) |
| Phase 2 — 拡張機能 | HLD §拡張 / §追加要件 / §周辺統合 | 一部のみ取り込み済 — 本ページ「実装詳細」の補足参照 | 未実装 / 未マージ — HLD §未対応箇所、本ページ「制限事項」および diff admonition の差分側に列挙 |
| Phase 3 — 将来拡張 | HLD §Future Work / §将来課題 | — | 未実装 — HLD 提案段階。対応 PR は確認されていない (last_verified 時点) |
凡例: 「実装済」=現行 master で動作確認できる範囲 / 「未実装」=HLD には記載があるが対応 PR が未マージまたは設計のみで code が存在しない範囲。