معرفی gNSI: احراز هویت، مجوز و حسابرسی (AAA) مبتنی بر gRPC برای Cisco IOS XR
مشکل
برای CLI، NETCONF و SNMP، امنیت یک مسئله حلشده است. AAA (احراز هویت (Authentication)، مجوزدهی (Authorization) و حسابرسی (Accounting)) به همراه TACACS+ و Syslog هر سه رکن اصلی را پوشش میدهند. اما زمانی که صفحه مدیریت (Management Plane) به سمت gRPC و gNMI حرکت کرد، همان داستان امنیتی به همراه آن منتقل نشد.Aاحراز هویت (Authentication)،Aمجوزدهی (Authorization) وAحسابرسی (Accounting) با استفاده از TACACS+ و Syslog هر سه رکن اصلی را پوشش میدهد. اما زمانی که صفحه مدیریت (Management Plane) به سمت gRPC و gNMI حرکت کرد، همان رویکرد امنیتی به همراه آن منتقل نشد.
پروتکل TLS احراز هویت (Authentication) را مدیریت میکند، اما هیچ استاندارد واحدی برای نحوه «مدیریت» گواهیها (Certificates) وجود ندارد؛ مواردی نظیر صدور، تمدید، ابطال، و چرخش دستههای اعتماد (Trust Bundles) و لیستهای ابطال گواهی (CRLs). اکثر اپراتورها در نهایت به کپی کردن فایلهای PEM یا استفاده از ابزارهای اختصاصی هر فروشنده (Vendor-specific tools) روی میآورند.
احراز هویت (Authorization) بدتر شد، نه بهتر. gRPC به کنترل در سطح سرویس (Service-level control) نیاز دارد («آیا این کلاینت میتواند gNMI Set را فراخوانی کند؟») در حالی که gNMI به کنترل در سطح مسیر (Path-level control) نیاز دارد («آیا این کلاینت میتواند در مسیر /system/ بنویسد؟»). یک نقش (Role) واحد و گسترده، هیچکدام از این موارد را به خوبی پوشش نمیدهد./system/?”). یک نقش کلی و گسترده، هیچکدام از این موارد را به خوبی پوشش نمیدهد.
حسابرسی (Accounting) — همان «A» که گزارش میدهد دقیقاً چه اتفاقی افتاده است — برای نشستهای CLI و NETCONF به خوبی کار میکند، اما ترافیک gRPC را بهطور خودکار پوشش نمیدهد.
و سپس نوبت به چرخش اعتبارنامه (Credential Rotation) میرسد. گواهیهای gRPC TLS وکلیدهای میزبان (Host Keys) SSH در مسیرهای کاملاً متفاوتی قرار دارند. یکی از آنها میتواند بدون اینکه کسی متوجه شود دیگری سالم است، منقضی شود.کلیدهای میزبان (Host Keys) در مسیرهای کاملاً متفاوتی قرار دارند. یکی از آنها ممکن است بدون اینکه کسی متوجه سلامت دیگری شود، منقضی (Stale) شود.
همه اینها را کنار هم بگذارید: وضعیت امنیتی (Security Posture) ناهماهنگ و اتوماسیونی که به شیوههایی دچار اختلال میشود که عیبیابی (Debug) آنها دشوار است.
gNSI چیست؟
gNSIمخففرابط امنیت شبکه gRPC (gRPC Network Security Interface). این مجموعهای از سرویسهای gRPC است که توسط OpenConfig تعریف شده است — همان جامعهای که پشت gNMI، gNOI و gRIBI قرار دارد. در حالی که تمرکز آنها بر پیکربندی (Config)، عملیات (Operations) و مسیریابی (Routing) است، تمرکز gNSI برامنیت (Security):
این پنج سرویس مستقیماً با مدل AAA — احراز هویت (Authentication)، تعیین سطح دسترسی (Authorization) و حسابرسی (Accounting) — به همین ترتیب مطابقت دارند:
- چگونهگواهیهای TLS و بستههای اعتماد (Trust Bundles) چرخش (Rotate) میشوند — که این همان Certz(احراز هویت – Authentication)
- چگونهاعتبارنامههای SSH چرخش (Rotate) میشوند — که این همان Credentialz(احراز هویت – Authentication)
- چه کسیمیتواند کدام RPCها را فراخوانی کند — که این همان Authz(مجوزدهی – Authorization)
- کداممسیرهای gNMI را یک فراخواننده میتواند تغییر دهد — که این همان Pathz(مجوزدهی – Authorization)
- چه چیزیروی دستگاه رخ داده است (ردپای حسابرسی – Audit Trail) — که این همان Acctz(حسابرسی – Accounting)
هر سرویس دارای یکProtobuf(Protocol Buffers — فرمت سریالسازی که gRPC استفاده میکند) تعریف در مخزن OpenConfig gNSI است. هر نسخه از IOS XR به نسخه API خاصی از این تعاریف متصل است.
چرا gNSI اهمیت دارد
بدون استفاده از gNSI، پیکربندی امنیتی در دستورات CLI و کپی دستی فایلها باقی میماند که خودکارسازی (Automation)، بازگردانی (Roll back) و تأیید آن در مقیاس بزرگ را دشوار میسازد.
با استفاده از gNSI، کنترلرها میتوانندمرحلهبندی (Stage)یک خطمشی یا گواهی جدید،اعتبارسنجی (Validate)آن، واعمال (Commit)— همگی از طریق یک API مبتنی بر gRPC. اگر مشکلی پیش بیاید،بازگشت (Rollback)در مشخصات فنی تعبیه شده است. این قابلیت مستقیماً بهZTP(Zero-Touch Provisioning) /Bootz(Bootstrap) متصل میشود و وضعیت از طریقYANG Telemetry(مشاهده مدلهای عمومی OpenConfig — gNSI).
به طور خلاصه: عملیات امنیتی تکرارپذیر و برنامهپذیر (Programmable) به جای اصلاحات موردی.
قبل و بعد از gNSI
چرخش (Rotating) گواهی TLS در gRPC — روش قدیمی:
1. Generate key + CSR on a workstation
2. Get it signed by the CA
3. SCP the PEM files to the router's /misc/config/grpc/
4. Hope the filenames and paths are correct
5. Reload the gRPC server (or wait for a process restart)
6. If it breaks, SSH in and manually fix the files
7. No audit trail of what changed or who did it
همان عملیات با استفاده از gNSI Certz:
1. Generate key + CSR (or let the router generate it)
2. Get it signed by the CA
3. grpcurl → Certz.Rotate: upload cert + key + trust bundle
4. Router validates the material before committing
5. grpcurl → Certz.Rotate: finalize (or cancel to roll back)
6. New cert takes effect for new connections — zero downtime
7. Acctz streams an audit record of the rotation
همان الگوی مرحلهبندی-اعتبارسنجی-نهاییسازی (stage-validate-finalize) برای سیاستهای احراز مجوز (Authorization Policies یا Authz و Pathz) و اعتبارنامههای SSH (Credentialz) نیز اعمال میشود.
نگاهی اجمالی به سرویسهای gNSI
در اینجا عملکرد هر سرویس شرح داده شده است. IOS XR پشتیبانی از این موارد را در نسخههای مختلف اضافه میکند — همیشه مستندات برنامهپذیری (Programmability Documentation) IOS XR را برای پلتفرم مقصد بررسی کنید.
| سرویس | آنچه کنترل میکند | مثال | |
|---|---|---|---|
| احراز هویت (Authentication) | Certz | چرخه حیات گواهی TLS | چرخش (Rotate) گواهی سرور gRPC و بسته اعتماد (Trust Bundle) بدون قطعی (Zero downtime) |
| Credentialz | چرخش اعتبارنامههای SSH | جایگزینی کلیدهای میزبان SSH یا کلیدهای مجاز کاربر (Authorized Keys) بدون نیاز به راهاندازی مجدد | |
| مجوزدهی (Authorization) | Authz | مجوزدهی در سطح سرویس gRPC | اجازه به یک کنترلر برای فراخوانی gNMI Set اما مسدود کردن RPCهای gNOI |
| Pathz | مجوزدهی در سطح مسیر (Path) gNMI | اجازه عملیات Subscribe روی/interfaces/اما مسدود کردن عملیات Set روی/system/ |
|
| حسابرسی (Accounting) | Acctz | استریم کردن حسابرسی و بازرسی (Audit) | استریم کردن سوابق تمامی اقدامات gRPC، CLI و NETCONF به یک جمعکننده (Collector) |
نحوه عملکرد و یکپارچگی این پنج سرویس با یکدیگر
gNSI یک چارچوب (Framework) احراز هویت، مجوزدهی و حسابرسی (AAA) مبتنی بر gRPC است. پنج سرویس آن شامل موارد زیر است:احراز هویت (Authentication), مجوزدهی (Authorization)وحسابرسی (Accounting)— و ترتیب آنها اهمیت دارد. یک درخواست ابتدا باید هویت خود را اثبات کند، سپس از بررسیهای کنترل دسترسی (Access-control) عبور کرده و در نهایت ثبت شود. نمودار زیر این جریان را از چپ به راست نشان میدهد.
┌─────────────────────────────────────────────────────────────────┐
│ gRPC Management Plane │
│ │
│ AUTHENTICATION AUTHORIZATION ACCOUNTING │
│ ────────────── ───────────── ────────── │
│ ┌──────────────┐ ┌───────────┐ │
│ │ Certz │ │ Authz │ ┌───────────┐ │
│ │ (TLS certs │ ──────▶ │ (who can │ ──────▶ │ Acctz │ │
│ │ + trust) │ │ call │ │ (audit │ │
│ └──────────────┘ │ what) │ │ trail) │ │
│ └───────────┘ └───────────┘ │
│ ┌──────────────┐ ┌───────────┐ │
│ │ Credentialz │ │ Pathz │ │
│ │ (SSH keys + │ │ (which │ │
│ │ passwords) │ │ gNMI │ │
│ └──────────────┘ │ paths) │ │
│ └───────────┘ │
└─────────────────────────────────────────────────────────────────┘
جریان AAA بر روی شبکه (Wire):
- احراز هویت (Authentication) — ابتدا هویت را تعیین کنید.Certz مدیریت گواهیهای TLS و بستههای اعتماد (Trust Bundles) — هر اتصال gRPC از اینجا آغاز میشود. Credentialz همین کار را برای کلیدهای میزبان SSH و اعتبارنامههای (Credentials) کاربر انجام میدهد.
- مجوزدهی (Authorization) — تعیین کنید که هویت احراز هویت شده چه کاری میتواند انجام دهد.Authz کنترل میکند که هر کلاینت اجازه فراخوانی کدام سرویسهای gRPC را دارد. Pathz یک سطح عمیقتر عمل کرده و کنترل میکند که کدام مسیرهای gNMI قابل خواندن یا نوشتن هستند.
- حسابرسی (Accounting) — ثبت وقایع رخ داده.Acctz سوابق حسابرسی (Accounting Records) را برای هر عملیات gRPC، CLI و NETCONF استریم میکند و مسیر حسابرسی (Audit Trail) را تکمیل مینماید.
پشتیبانی از نسخه IOS XR
| سرویس | اولین پشتیبانی از IOS XR | بهبودهای کلیدی بعدی | |
|---|---|---|---|
| احراز هویت (Authentication) | Certz | 24.1.1— چرخش (Rotate) در RPC، پروفایلهای SSL،شناسه پروفایل SSL برای سرویس grpc gnsi certz |
24.1.1— نام مشترک (CN) قابل تنظیم برای dial-in؛24.4.1— پروتکل TLS 1.3؛25.4.1— مسیرهای قدیمی (legacy) در /misc/config/grpc منسوخ شدهاند، پروفایلهای SSL مسیر پیش رو هستندCredentialz— چرخش (Rotate) در RPCها برای چرخش اعتبارنامههای SSH |
| — مستندسازی دامنه اعتبارنامهها در سطح حساب کاربری و سطح میزبان | 24.2.1مجوزدهی (Authorization) | 24.2.11Authz | |
| — چرخش (Rotate) / بررسی (Probe) / دریافت (Get) در RPCها، | سرویس بارگذاری خطمشی مجوزدهی gnsi | 7.11.1رابط خط فرمان (CLI)— پوشش گستردهتر سری 8000 (8200، 8700، 8800/P100)؛ نگاشت SPIFFE-ID به نام کاربریPathz |
24.4.1— فقط gNMI Set، فقط مدلهای OpenConfig |
| نسخههای بعدی ممکن است RPCها و خانوادههای مدل بیشتری اضافه کنند؛ پیشفرض ACCEPT_ALL است | 24.2.1تا زمانی که یک خطمشی (Policy) بارگذاری شود | حسابرسی (Accounting)Acctz— جریان حسابرسی gRPC (سری 8000 / NCS 5500) | |
| 24.4.x | — افزونههای مختص پلتفرم؛ یادداشتهای انتشار (Release Notes) هدف را بررسی کنید | 24.3.1— جریان حسابداری (Accounting Stream) gRPC (8000 / NCS 5500) | 24.4.x— افزونههای مختص پلتفرم (platform-specific extensions)؛ یادداشتهای انتشار (Release Notes) نسخه هدف را بررسی کنید |
بررسیهای عمیق (Deep Dives) در XRdocs
این مقالات مراحل عملی کار با IOS XR را به ترتیب جریان AAA بررسی میکنند. باCertzبرای برقراری احراز هویت TLS شروع کنید، سپس لایه مجوزدهی (Authorization) را باAuthzوPathzاضافه کنید و در نهایت باAcctzبرای حسابرسی (Accounting) کار را به پایان برسانید.
| سرویس (Service) | مقاله XRdocs | |
|---|---|---|
| احراز هویت (Authentication) | Certz | gNSI Certz — چرخه حیات گواهی TLS در Cisco IOS XR |
| Credentialz | gNSI Credentialz — چرخش اعتبارنامههای SSH در Cisco IOS XR | |
| مجوزدهی (Authorization) | Authz | مجوزدهی gRPC با Authz |
| Pathz | امنسازی gNMI با Pathz | |
| حسابرسی (Accounting) | Acctz | gNSI Acctz — حسابرسی سطح مدیریت (Management Plane) در Cisco IOS XR |
پیشنیازها و راهاندازی
ساختار راهاندازی (Setup) به چه صورت است
┌──────────────────┐ port 57400 ┌──────────────┐
│ Workstation │ ────────── gRPC ───────────▶ │ IOS XR │
│ │ (plaintext in lab, │ Router │
│ grpcurl │ TLS in production) │ │
│ gnmic │ │ EMSd runs │
│ openssl │ │ gNSI RPCs │
│ jq │ │ │
└──────────────────┘ └──────────────┘
▲
│ The.proto files from the cloned
│ openconfig/gnsi repo tell grpcurl
│ how to encode/decode gRPC messages.
ابزارها
| ابزار | عملکرد | نصب |
|---|---|---|
| grpcurl | کلاینت gRPC خط فرمان (Command-line) — مشابهcurlاما برای gRPC |
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latestیا دانلود فایل باینری (Binary) |
| gnmic | کلاینت gNMI CLI (برای نمونههای تلهمتری YANG) | bash -c "$(curl -sL https://get.gnmic.openconfig.net) |
| jq | پردازشگر JSON (برای قالببندی سیاستهای احراز هویت یا Authz Policy) | brew install jq / apt install jq |
| OpenSSL | عملیات TLS PKI (گواهیها یا Certz) | از پیش نصب شده روی اکثر سیستمها |
فایلهای پروتو (Proto files)
ابزار grpcurl برای دانستن نحوه کدگذاری (Encode) و رمزگشایی (Decode) پیامهای gRPC به فایلهای.protoنیاز دارد. آنها را یکبار کلون (Clone) کنید:
git clone --depth 1 https://github.com/openconfig/gnsi.git openconfig-gnsi
cd openconfig-gnsi
export GNSI_IMPORT="$PWD"
معنای فلگهای grpcurl
هر دستور عملی در این سری از این پرچمها (Flags) استفاده میکند:
| پرچم (Flag) | عملکرد |
|---|---|
-plaintext |
اتصال بدون TLS.فقط برای محیط آزمایشگاهی (Lab only)— به هشدار زیر مراجعه کنید. |
-import-path "$GNSI_IMPORT |
مسیری که grpcurl در آن به دنبال فایلهای.protoمیگردد (ریشه مخزن کلون شده) |
-proto "authz/authz.proto |
فایلی که.protoسرویس مورد فراخوانی را تعریف میکند |
-H "username:... / -H "password:... |
احراز هویت مبتنی بر متادیتا در IOS XR (ارسال شده به عنوان هدرهای gRPC) |
-d '{...} |
بدنه درخواست (Payload) به صورت JSON (که grpcurl آن را به protobuf تبدیل میکند) |
-d '@ |
خواندن بدنه درخواست از ورودی استاندارد (stdin) (استفاده شده برای RPCهای جریانی) |
فقط برای محیط آزمایشگاهی:تمام مثالهای عملی در این سری از
-plaintextبرای نادیده گرفتن TLS استفاده میکنند — این کار راهاندازی آزمایشگاه را سادهتر میکند امارمزنگاری و احراز هویت سرور را غیرفعال میکند. در محیط عملیاتی (Production)، جایگزین کنید-plaintextبا-cacert,-certو-keyفلگهایی که به فایلهای TLS واقعی اشاره دارند. مقاله Certz نحوه راهاندازی آن فایلها را پوشش میدهد.
الزامات روتر (Router)
- روتر IOS XRبا قابلیت gRPC فعال — مشاهده کنید در راهنمای پیکربندی برنامهپذیری (Programmability Configuration Guide)
- حداقل نسخه IOS XR بستگی به سرویس دارد (مشاهده کنید در پشتیبانی از نسخه (Release Support))
هر مقاله خدماتی شامل بلوک تنظیمات محیطی (Environment Setup) مخصوص به خود است.
راهنمای شروع سریع: تأیید gNSI روی روتر
پیشنیازها
- روتر IOS XR با قابلیت gRPC فعال (نسخه 7.11.1 یا بالاتر برای Authz — مشاهده کنید پشتیبانی از نسخه (Release Support))
- grpcurl نصب شده
- پروتکلهای OpenConfig gNSI کلون شده (مشاهده کنید فایلهای پروتو (Proto files) در بالا)
اجرای بررسی (Run the check)
پس از نصب grpcurl و کلون کردن (Cloning) فایلهای protos، این دستور را اجرا کنید تا تأیید شود که روتر (Router) سرویسهای Authz RPCs را ارائه میدهد.
مهم:جایگزین کنید
198.51.100.1:57400با IP واقعی روتر و پورت gRPC. رمز عبور را با رمز عبور روتر جایگزین کنید.
export GNSI_IMPORT="${GNSI_IMPORT:-$PWD}"
export XR="${XR:-198.51.100.1:57400}" # ← replace with router IP:port
export XR_USER="${XR_USER:-cisco}"
export XR_PASS="${XR_PASS:-}" # ← replace with password
GRPC_MD=(-H "username:${XR_USER}" -H "password:${XR_PASS}")
grpcurl -plaintext \
-import-path "$GNSI_IMPORT" \
-proto "authz/authz.proto" \
"${GRPC_MD[@]}" \
"${XR}" \
list gnsi.authz.v1.Authz
لطفاً متن ورودی خود را برای ترجمه ارسال کنید تا طبق قوانین و دستورالعملهای تعیینشده، ترجمه آن را انجام دهم.
gnsi.authz.v1.Authz.Get
gnsi.authz.v1.Authz.Probe
gnsi.authz.v1.Authz.Rotate
اگر این مورد کار کند، روتر آماده است. به مقاله Certz مراجعه کنید تا ابتدا احراز هویت TLS را تنظیم کنید، یا به مقاله Authz بروید تا یک خطمشی مجوز (Authorization Policy) بارگذاری کنید.
ارجاعات OpenConfig
- پروتکلها و مستندات هر سرویس:github.com/openconfig/gnsi
- مدلهای YANG / تلهمتری (Telemetry):github.com/openconfig/public — release/models/gnsi
gNSI در سری IOS XR:بررسی اجمالی (Overview) · گواهیها (Certz) · اعتبارنامهها (Credentialz) · مجوزدهی (Authz) · مسیرها (Pathz) · حسابرسی (Acctz)
شروع مطالعه →Certz — چرخه حیات گواهی TLS (احراز هویت (authentication) در اولویت است)· سپس Credentialz برای عملیات SSH.