تخطَّ إلى المحتوى

وكيل العمليات السحابية

يراجع قالب Cloud Operations في السوق شيفرة بنيتك التحتية واعتمادياتها، ويقدّم لك قائمة إصلاحات مرتّبة حسب الخطورة: ما هو مكشوف، وما هو معرّض للثغرات، وما يكلّف أكثر مما ينبغي، مع رقم السطر والإصلاح المطلوب بدقة. ويمكنه كذلك فتح تذكرة لكل ملاحظة حرجة أو عالية الخطورة، لتصل المهمة إلى فريقك مباشرة.

المجال ما ينبّه إليه
الأمان منافذ الإدارة (SSH وRDP ومنافذ قواعد البيانات) المفتوحة للإنترنت كله · قواعد البيانات المتاحة من الإنترنت · حاويات التخزين العامة · كلمات المرور والمفاتيح المكتوبة في الشيفرة · التخزين غير المشفّر
الموثوقية تعطيل النسخ الاحتياطي التلقائي · تعطيل الحماية من الحذف · حذف قواعد البيانات دون لقطة نهائية
التكلفة أنواع الخوادم من الأجيال السابقة · أقراص gp2 الأقدم (gp3 أرخص بنحو 20%) · أحجام الخوادم الكبيرة جدًا التي تستحق المراجعة
الثغرات (CVE) الحزم الواردة في requirements.txt وpackage.json التي لها ثغرات معروفة، من قاعدة بيانات OSV العامة، مع الإصدار الذي يعالج كل ثغرة

يقرأ الوكيل ملفات Terraform ‏(.tf) وقوالب البنية التحتية بصيغة YAML أو JSON. ولا يمكن فحص الثغرات إلا للإصدارات المثبّتة بدقة (flask==2.0.1، ‏"lodash": "4.17.20").

يقرأ الوكيل شيفرتك عبر أداة من فئة Developer (مطلوبة)، ويفتح التذاكر عبر أداة من فئة Ticketing (اختيارية). أضف كلتيهما من الأدوات ثم إضافة أداة، في المنطقة التي ستثبّت فيها الوكيل.

  1. اختر نموذج GitHub الجاهز. عنوان URL الأساسي هو https://api.github.com.
  2. بيانات الاعتماد: مفتاح API في ترويسة باسم Authorization وبالبادئة Bearer. استخدم رمزًا دقيق الصلاحيات يقتصر على مستودع البنية التحتية، بصلاحية Contents: Read. وأضف Issues: Read and write إن أردت فتح المسائل (Issues) هناك.
  3. الصق ما يلي في OpenAPI schema. وهو يمنح الوكيل ثلاث عمليات فقط: سرد الملفات، وقراءة ملف، وفتح مسألة.
{
"openapi": "3.0.0",
"info": { "title": "GitHub", "version": "1" },
"servers": [{ "url": "https://api.github.com" }],
"paths": {
"/repos/{owner}/{repo}/git/trees/{branch}": {
"get": {
"operationId": "listFiles",
"summary": "List every file in a repository branch",
"parameters": [
{ "name": "owner", "in": "path", "required": true, "schema": { "type": "string" } },
{ "name": "repo", "in": "path", "required": true, "schema": { "type": "string" } },
{ "name": "branch", "in": "path", "required": true, "schema": { "type": "string" } },
{ "name": "recursive", "in": "query", "required": true, "schema": { "type": "string", "enum": ["1"] } }
],
"responses": { "200": { "description": "The file tree" } }
}
},
"/repos/{owner}/{repo}/git/blobs/{sha}": {
"get": {
"operationId": "readFile",
"summary": "Read one file by the sha listFiles gave it (its content is base64-encoded)",
"parameters": [
{ "name": "owner", "in": "path", "required": true, "schema": { "type": "string" } },
{ "name": "repo", "in": "path", "required": true, "schema": { "type": "string" } },
{ "name": "sha", "in": "path", "required": true, "schema": { "type": "string" } }
],
"responses": { "200": { "description": "The file" } }
}
},
"/repos/{owner}/{repo}/issues": {
"post": {
"operationId": "createIssue",
"summary": "Open an issue",
"parameters": [
{ "name": "owner", "in": "path", "required": true, "schema": { "type": "string" } },
{ "name": "repo", "in": "path", "required": true, "schema": { "type": "string" } }
],
"requestBody": {
"required": true,
"content": { "application/json": { "schema": { "type": "object", "required": ["title"], "properties": { "title": { "type": "string" }, "body": { "type": "string" } } } } }
},
"responses": { "201": { "description": "The issue" } }
}
}
}
}
  1. اختر نموذج Jira الجاهز، مع عنوانك الخاص (https://your-company.atlassian.net).
  2. بيانات الاعتماد: مفتاح API في ترويسة باسم Authorization وبالبادئة Basic. والقيمة هي your-email:your-api-token بترميز base64. أنشئ الرمز من id.atlassian.com.
  3. الصق ما يلي في OpenAPI schema، مع وضع عنوانك في servers:
{
"openapi": "3.0.0",
"info": { "title": "Jira", "version": "1" },
"servers": [{ "url": "https://your-company.atlassian.net" }],
"paths": {
"/rest/api/3/search/jql": {
"get": {
"operationId": "searchTickets",
"summary": "Find tickets with a JQL query, e.g. project = OPS AND statusCategory != Done",
"parameters": [
{ "name": "jql", "in": "query", "required": true, "schema": { "type": "string" } },
{ "name": "fields", "in": "query", "required": false, "schema": { "type": "string", "default": "summary,status" } }
],
"responses": { "200": { "description": "Matching tickets" } }
}
},
"/rest/api/2/issue": {
"post": {
"operationId": "createTicket",
"summary": "Open a ticket",
"requestBody": {
"required": true,
"content": { "application/json": { "schema": { "type": "object", "properties": { "fields": { "type": "object", "properties": {
"project": { "type": "object", "properties": { "key": { "type": "string" } } },
"issuetype": { "type": "object", "properties": { "name": { "type": "string" } } },
"summary": { "type": "string" },
"description": { "type": "string" }
} } } } } }
},
"responses": { "201": { "description": "The ticket" } }
}
}
}
}

افتح السوق ثم Cloud Operations ثم Install. اختر أداة GitHub لخانة المستودع، وأداة Jira لخانة التذاكر. يُنشر الوكيل مرة واحدة والأداتان مرفقتان به. المزيد عن التثبيت.

من صفحة الوكيل، حدّد له أين يبحث:

راجِع الفرع main في المستودع acme/infrastructure، وافحص جميع ملفات Terraform وجميع ملفات requirements.txt وpackage.json.

ستحصل على عدد الملاحظات حسب الخطورة، وجدول بكل ملاحظة (الملف والسطر، والمورد، والمشكلة، والإصلاح)، والحزم المعرّضة للثغرات مع الإصدار الذي يعالجها، وقسم Do first: أهم ثلاثة إجراءات وسبب أهمية كل منها.

ولفتح التذاكر، اطلب ذلك صراحةً وحدّد المشروع:

…وافتح تذكرة Jira في المشروع OPS (من نوع Task) لكل ملاحظة حرجة أو عالية الخطورة.

يبحث الوكيل أولًا عن تذكرة مفتوحة بالعنوان نفسه، فلا تتكرر التذاكر عند تشغيله مرة أخرى.

من السياسات ثم سياسة جديدة، أضف ضمن إجراءات يُحظر على الوكيل القيام بها بأدواته مثلًا:

  • دمج طلبات السحب
  • حذف المستودعات أو الفروع أو الملفات
  • إغلاق التذاكر أو حذفها

ثم اختر السياسة للوكيل. وإن كان الرمز الذي منحته لا يملك صلاحية كتابة إلا على المسائل، فلن يستطيع الوكيل تغيير الشيفرة أصلًا، لكن السياسة تجعل ذلك صريحًا، وتشمل أي أداة ترفقها لاحقًا.

من صفحة الوكيل ← Schedules & webhooks ← + Schedule:

  • الطلب: راجِع الفرع main في المستودع acme/infrastructure، وافتح تذكرة Jira في المشروع OPS لكل ملاحظة جديدة حرجة أو عالية الخطورة.
  • التوقيت: 0 7 * * 0 (أيام الأحد الساعة 07:00)، بالمنطقة الزمنية Asia/Riyadh.

وبذلك يبدأ فريقك كل أسبوع بقائمة إصلاحات موجزة وخالية من التكرار. ويمكنك أيضًا إضافة خطاف ويب واستدعاؤه من خط التكامل المستمر (CI) بعد كل دمج في الفرع الرئيسي.

  • يراجع الوكيل الشيفرة، لا حسابك السحابي المباشر. فإن عُدّل شيء يدويًا خارج الشيفرة، فلن يراه.
  • كل تشغيل طلبٌ عادي يستهلك الأرصدة. وكلما كبر المستودع زاد عدد الملفات المقروءة، وزادت الأرصدة المستهلكة. لذا وجّهه إلى المجلدات المهمة (“المجلد prod/ فقط”).
  • أصبح الوكيل وكيلك. افتح Edit لإضافة قواعدك الخاصة إلى شيفرته، أو تغيير تعليماته، أو اختيار نموذج أقوى للمراجعات الكبيرة. ولا تؤثر تحديثات قالب السوق في وكيل ثبّتّه من قبل.