Sangfor Athena NGFW มี RESTful API (Web API) ให้ระบบภายนอกเข้ามาอ่านข้อมูลและตั้งค่าอุปกรณ์ได้ โดยรองรับงานอัตโนมัติหลากหลาย เช่น ดึงข้อมูล monitoring เข้าระบบ dashboard/SIEM, สั่งบล็อก IP จากระบบ SOC/SOAR โดยอัตโนมัติ, จัดการ Network Object และ policy object จากสคริปต์ บทความนี้อธิบายตั้งแต่การเปิดสิทธิ์ Web API, ขั้นตอน login รับ token, โครงสร้าง URL, รูปแบบ response ไปจนถึงตัวอย่าง curl ที่ใช้ได้จริง
เปิดสิทธิ์ Web API ให้บัญชีผู้ดูแล
- ล็อกอิน Web UI แล้วไปที่ System > Administrator
- เปิดการแก้ไขบัญชีผู้ดูแลที่จะใช้เรียก API (แนะนำให้สร้างบัญชีแยกเฉพาะสำหรับ API ไม่ใช้บัญชี admin หลัก) แล้วติ๊กเปิดสิทธิ์ Web API
- บันทึกการตั้งค่า — บัญชีนี้จะสามารถเรียก login API เพื่อรับ token ได้
การยืนยันตัวตน: Login รับ Token / Keepalive / Logout
ลำดับการทำงานของ API client เป็นดังนี้
-
Login — ส่ง POST ไปที่
/api/v1/namespaces/public/loginพร้อม username/password ใน body จะได้tokenกลับมา -
เรียก API อื่น ๆ — แนบ token ใน HTTP header:
Cookie: token=<ค่า token>ทุก request -
Session timeout — หากไม่มี request ติดต่อกัน 10 นาที (ค่าเริ่มต้น) token จะหมดอายุ
ต้อง login ใหม่ หรือเรียก
GET /api/v1/namespaces/public/keepaliveเป็นระยะเพื่อต่ออายุ -
Logout — เมื่อจบงาน ส่ง POST ไปที่
/api/v1/namespaces/public/logout
POST https://<ip-อุปกรณ์>/api/v1/namespaces/public/login
Content-Type: application/json
{
"name": "api-user",
"password": "<รหัสผ่าน>"
}
ตัวอย่าง response เมื่อสำเร็จ — token อยู่ที่ data.loginResult.token:
{
"code": 0,
"message": "success",
"data": {
"loginResult": {
"token": "3869A36E56525592B3AD88DADD6E87C0F67A3EAA4DFB3C223541EA10E611761"
},
"role": "ADMINISTRATOR",
"name": "api-user",
"passwdStatus": true
}
}
โครงสร้าง URL และ HTTP Method
<METHOD> /api/<version>/namespaces/<namespace>/<resource>/<name>?<query>
-
METHOD— GET (อ่าน), POST (สร้าง), PUT (แก้ทั้ง object), PATCH (แก้บางฟิลด์), DELETE (ลบ) -
version— ปัจจุบันคือv1 -
namespace— ระบบหลักใช้public(กรณีใช้ Virtual System จะเป็นชื่อ namespace ของระบบนั้น) -
resource— ชื่อทรัพยากร เช่นipgroups(Network Objects),iptraffics(traffic ranking) -
name— ชื่อ object เฉพาะเจาะจง (บาง resource ใช้ UUID)
สำหรับการทำงานเป็นชุด (bulk) ใช้รูปแบบ batch:
/api/batch/v1/namespaces/public/<resource> และบาง endpoint ใช้ query
?_method=GET / ?_method=DELETE ร่วมกับ POST เพื่อส่งเงื่อนไขใน body ได้
รูปแบบ Response และ Return Code
ทุก response มีโครงสร้างเดียวกัน:
{
"code": 0, <- 0 = สำเร็จ, อื่น ๆ = error
"message": "success",
"data": { ... } <- ข้อมูลที่ขอ (ว่างเมื่อไม่สำเร็จ)
}
| Return Code | ความหมาย |
|---|---|
| 0 | Completed — สำเร็จ |
| 1 | Operation not permitted |
| 13 | Permission denied — บัญชีไม่มีสิทธิ์ (ตรวจสิทธิ์ Web API และ role) |
| 22 | Invalid argument — พารามิเตอร์/body ไม่ถูกต้อง |
| 1001 | Schema not matched — โครงสร้าง JSON ไม่ตรงตามที่กำหนด |
| 1003 | Not logined — ยังไม่ได้ login / ไม่ได้แนบ token |
| 1004 | Not found — ไม่พบ resource/object ที่ระบุ |
| 1009 | Object is referenced — ลบไม่ได้เพราะมี policy อื่นอ้างอิงอยู่ |
| 1010 | Password expired |
| 1012 | Login status expired — token หมดอายุ ให้ login ใหม่ |
ตัวอย่างครบวงจรด้วย curl
ตัวอย่าง: login → ดึงข้อมูล traffic ranking ราย IP → logout
(ตัวเลือก -k ใช้ข้ามการตรวจ certificate กรณีอุปกรณ์ยังใช้ self-signed certificate
— เหมาะกับการทดสอบใน lab เท่านั้น บน production ควรติดตั้ง certificate ที่ถูกต้อง)
# 1) Login เก็บ token
TOKEN=$(curl -sk -X POST "https://192.168.1.1/api/v1/namespaces/public/login" \
-H "Content-Type: application/json" \
-d '{"name":"api-user","password":"<รหัสผ่าน>"}' \
| python3 -c "import sys,json;print(json.load(sys.stdin)['data']['loginResult']['token'])")
# 2) เรียก API โดยแนบ token ใน Cookie header
curl -sk "https://192.168.1.1/api/v1/namespaces/public/iptraffics" \
-H "Cookie: token=$TOKEN"
# 3) Logout เมื่อจบงาน
curl -sk -X POST "https://192.168.1.1/api/v1/namespaces/public/logout" \
-H "Cookie: token=$TOKEN" \
-H "Content-Type: application/json" \
-d "{\"loginResult\":{\"token\":\"$TOKEN\"}}"
ข้อควรระวังด้านความปลอดภัย
- สร้างบัญชีเฉพาะสำหรับ API และให้สิทธิ์ (role) เท่าที่จำเป็นเท่านั้น อย่าใช้บัญชี super admin หลัก
- อย่า expose พอร์ตหน้า management ของอุปกรณ์ออก internet — ให้เรียก API จากเครือข่ายภายใน หรือผ่านช่องทางที่ควบคุมแล้วเท่านั้น
- เก็บรหัสผ่าน/token ในระบบจัดการ secret ไม่ hardcode ในสคริปต์ที่แชร์ต่อ
- API ที่เป็นการแก้ไขค่า (POST/PUT/PATCH/DELETE) ควรทดสอบใน lab ก่อนใช้กับ production
ดาวน์โหลดคู่มือฉบับเต็ม
บทความนี้คัดเฉพาะส่วนที่ใช้งานบ่อยมาสรุป หากต้องการรายละเอียดครบทุกคำสั่ง/ทุก endpoint สามารถดาวน์โหลดคู่มือทางการของ Sangfor ได้จาก Sangfor Community โดยตรง:
- Athena NGFW API Userguide (PDF) — คู่มือ REST API ฉบับเต็ม ครอบคลุมทุก endpoint พร้อมโครงสร้าง request/response
ข้อคิดเห็น
0 ข้อคิดเห็น
โปรด ลงชื่อเข้าใช้ เพื่อแสดงข้อคิดเห็น