المقدمة
يوضح هذا المستند كيفية تكوين ميزة تدفق الأحداث واستهلاكها للحماية المتقدمة من البرامج الضارة (AMP) لنقاط النهاية.
المتطلبات الأساسية
المتطلبات
توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:
- AMP لنقاط النهاية
- معرفة أساسية ببرمجة بايثون
المكونات المستخدمة
تستند المعلومات الواردة في هذا المستند إلى Python 3.7 مع المكتبات الخارجية Pika (الإصدار 1.1.0) والطلبات (الإصدار 2.22.0).
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.
التكوين
الرسم التخطيطي للشبكة
تقدم هذه الصورة مثالا لتسلسل تدفق الأحداث:
التكوينات
إنشاء بيانات اعتماد API
- انتقل إلى AMP الخاص بك للوصول إلى مدخل نقاط النهاية وتسجيل الدخول
- تحت الحسابات، أختر مسوغات API
- انقر فوق بيانات اعتماد واجهة برمجة تطبيقات (API) جديدة
- أدخل قيمة في حقل اسم التطبيق
- حدد قراءة وكتابة ل النطاق
- انقر على إنشاء
- قم بتخزين بيانات الاعتماد هذه في ملف مشفر أو مدير كلمة مرور
إنشاء تدفق حدث
- افتح طبقة Python واستورد مكتبات json وssl وpika وطلبات.
import json
import pika
import requests
import ssl
- قم بتخزين قيم عنوان url و client_id و api_key. يمكن أن يختلف عنوان URL الخاص بك إذا لم تكن تستخدم سحابة أمريكا الشمالية. كما أن كلا من client_id و api_key خاصتان ببيئتك.
url = "https://api.amp.cisco.com/v1/event_streams"
client_id = "d16aff14860af496e848"
api_key = "d01ed435-b00d-4a4d-a299-1806ac117e72"
- قم بإنشاء كائن البيانات لتمريره إلى الطلب. يجب أن يتضمن هذا الاسم، ويمكن أن يتضمن event_type و group_guid لتقييد الأحداث والمجموعات المضمنة في الدفق. في حالة عدم تمرير GROUP_GUID أو EVENT_TYPE، سيتضمن تدفق الأحداث كافة المجموعات وأنواع الأحداث.
data = {
"name": "Event Stream for ACME Inc",
"group_guid": ["5cdf70dd-1b14-46a0-be90-e08da14172d8"],
"event_type": [1090519054]
}
- قم بإجراء إستدعاء طلب POST، وقم بتخزين القيمة في متغير.
r = requests.post(
url = url,
data = data,
auth = (client_id, api_key)
)
- قم بطباعة رمز الحالة. تأكد من أن الرمز هو 201.
print(r.status_code)
- قم بتحميل محتوى الاستجابة إلى كائن json، وقم بتخزين ذلك الكائن في متغير.
j = json.loads(r.content)
- راجع محتويات بيانات الاستجابة.
for k, v in j.items():
print(f"{k}: {v}")
- بيانات بروتوكول خدمة "وضع الرسائل في قائمة انتظار" (AMQP) المتقدمة موجودة داخل الاستجابة. إستخراج البيانات في متغيرات خاصة.
user_name = j["data"]["amqp_credentials"]["user_name"]
queue_name = j["data"]["amqp_credentials"]["queue_name"]
password = j["data"]["amqp_credentials"]["password"]
host = j["data"]["amqp_credentials"]["host"]
port = j["data"]["amqp_credentials"]["port"]
proto = j["data"]["amqp_credentials"]["proto"]
- قم بتحديد وظيفة رد اتصال باستخدام هذه المعلمات. في هذا الإعداد، تقوم بطباعة نص الحدث على الشاشة. ومع ذلك، يمكنك تغيير محتوى هذه الوظيفة لتلائم أهدافك.
def callback(channel, method, properties, body):
print(body)
- قم بإعداد عنوان URL AMQP من المتغيرات التي قمت بإنشائها.
amqp_url = f"amqps://{user_name}:{password}@{host}:{port}"
- إعداد سياق SSL
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
amqp_ssl = pika.SSLOptions(context)
- إعداد دفق AMQP باستخدام أساليب مكتبة Pika.
params = pika.URLParameters(amqp_url)
params.ssl_options = amqp_ssl
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.basic_consume(
queue_name,
callback,
auto_ack = False
)
- ابدأ الدفق.
channel.start_consuming()
- الدفق الآن حي وينتظر الأحداث.
التحقق من الصحة
قم بتشغيل حدث على نقطة نهاية في بيئتك. على سبيل المثال، ابدأ مسح ضوئي بفلاش. لاحظ أن الدفق يطبع بيانات الحدث على الشاشة.
اضغط على Ctrl+C (في Windows) أو Command-C (في Mac) لمقاطعة الدفق.
استكشاف الأخطاء وإصلاحها
رموز الحالة
- يشير رمز الحالة 401 إلى وجود مشكلة في التفويض. تحقق من client_id وapi_key، أو قم بإنشاء مفاتيح جديدة.
- يشير رمز الحالة 400 إلى وجود مشكلة طلب غير صحيحة. تأكد من عدم وجود دفق أحداث تم إنشاؤه بهذا الاسم، أو أنه لا يوجد لديك أكثر من 5 تدفقات أحداث تم إنشاؤها.
- وثمة علاج آخر ممكن لقانون الحالة رقم 400 هو إضافة المتغير التالي:
headers = {
'content-type': 'application/json'
}
وتحديث طلب النشر الخاص بك ليعكس تصريح الرأس:
r = requests.post(
url = url,
headers = headers,
data = data,
auth = (client_id, api_key)
)