بصمة — منصة عربية لتعليم البرمجة والشبكات والإلكترونيات

الـ APIs بتاعة Catalyst Center وvManage — وأمان الـ REST API

بنجهّز الشبكة…
01 / ملخص التجربة

الـ APIs بتاعة Catalyst Center وvManage — وأمان الـ REST API

هتكتب Python scripts تكلّم Catalyst Center بالـ intent API ‏(token ثم X-Auth-Token، inventory، command runner async بالـ task والـ file) وvManage بالـ session والـ XSRF token، وتثبت عمليًا أمان الـ REST API: ‏HTTPS، الـ tokens، الـ RBAC ‏(401 مقابل 403).

مدة التجربة 40 دقيقة · 4 مهام

الأجهزة في بداية التجربة

  • DEV — كمبيوتر
  • SW — سويتش
  • DNAC — Catalyst Center
  • VMANAGE — vManage
  • R1 — راوتر

التوصيلات

  • DEV eth0 ↔ SW Fa0/1
  • DNAC eth0 ↔ SW Fa0/2
  • VMANAGE eth0 ↔ SW Fa0/3
  • R1 Gi0/0/0 ↔ SW Fa0/4

العناوين المضبوطة مسبقًا

  • R1 g0/0/0: 10.10.10.1/24
  • R1 loopback0: 10.255.0.1/32
02 / المهام التي ستطبقها
  1. 01
    اكتب dnac_inventory.py على DEV: ‏token من Catalyst Center ‏(netops) وبعدين اطبع كل جهاز في الـ inventory ‏(hostname + managementIpAddress)
    تلميح / الحل المقترح
    POST https://10.10.10.100/dna/system/api/v1/auth/token بـ HTTP Basic ‏(auth=HTTPBasicAuth(...)) بيرجّع {"Token": ...} — الـ token ده (JWT) صالح ساعة. كل نداء بعد كده لازم الـ header ‏X-Auth-Token: <token> — من غيره 401. GET /dna/intent/api/v1/network-device ← r.json()["response"] ليستة أجهزة. شغّل: python dnac_inventory.py
  2. 02
    أمان الـ REST API: ‏rbac_test.py يثبت إن من غير token = ‏401، وإن الـ auditor ‏(OBSERVER-ROLE) يقرأ (200) بس مايقدرش يكتب (403)
    تلميح / الحل المقترح
    الـ REST API security في Catalyst Center: ‏HTTPS بس (جرّب http:// ← connection refused)، authentication بـ token قصير العمر بدل ما تبعت الباسورد في كل نداء، authorization بالـ roles ‏(RBAC: ‏SUPER-ADMIN / NETWORK-ADMIN / OBSERVER)، وrate limiting ‏(429 Too Many Requests). اطبع: no token: 401 ← auditor GET: 200 ← auditor POST: 403
  3. 03
    Command Runner بالـ API: ‏cmd_runner.py يشغّل show ip interface brief على R1 ويطبع الناتج
    تلميح / الحل المقترح
    الـ APIs اللي بتاخد وقت async: ‏POST /dna/intent/api/v1/network-device-poller/cli/read-request {commands, deviceUuids} بيرجّع taskId ← GET /task/<id> لحد ما الـ progress يبقى فيه fileId ← GET /file/<fileId> ← [0]["commandResponses"]["SUCCESS"][<command>]. الـ deviceUuid من network-device?hostname=R1. أوامر الـ config بتترفض (BLACKLISTED) — الـ command runner للقراية بس
  4. 04
    الـ vManage API: ‏vmanage.py يعمل login ويجيب الـ XSRF token ويطبع الأجهزة من /dataservice/device
    تلميح / الحل المقترح
    الـ vManage بيستخدم session مش token: ‏POST /j_security_check بـ form ‏(j_username, j_password) ← لو الـ login فشل بيرجّع 200 بصفحة HTML (مش 401!) فاختبر r.text. بعدين GET /dataservice/client/token = الـ XSRF token ← حطه في header ‏X-XSRF-TOKEN (لازم لأي POST/PUT/DELETE). GET /dataservice/device ← r.json()["data"] فيه host-name وsystem-ip. الفرق: Catalyst Center ‏(X-Auth-Token) مقابل vManage ‏(JSESSIONID + X-XSRF-TOKEN)