وكيل العمليات السحابية
يراجع قالب Cloud Operations في السوق شيفرة بنيتك التحتية واعتمادياتها، ويقدّم لك قائمة إصلاحات مرتّبة حسب الخطورة: ما هو مكشوف، وما هو معرّض للثغرات، وما يكلّف أكثر مما ينبغي، مع رقم السطر والإصلاح المطلوب بدقة. ويمكنه كذلك فتح تذكرة لكل ملاحظة حرجة أو عالية الخطورة، لتصل المهمة إلى فريقك مباشرة.
ما الذي يفحصه
Section titled “ما الذي يفحصه”| المجال | ما ينبّه إليه |
|---|---|
| الأمان | منافذ الإدارة (SSH وRDP ومنافذ قواعد البيانات) المفتوحة للإنترنت كله · قواعد البيانات المتاحة من الإنترنت · حاويات التخزين العامة · كلمات المرور والمفاتيح المكتوبة في الشيفرة · التخزين غير المشفّر |
| الموثوقية | تعطيل النسخ الاحتياطي التلقائي · تعطيل الحماية من الحذف · حذف قواعد البيانات دون لقطة نهائية |
| التكلفة | أنواع الخوادم من الأجيال السابقة · أقراص gp2 الأقدم (gp3 أرخص بنحو 20%) · أحجام الخوادم الكبيرة جدًا التي تستحق المراجعة |
| الثغرات (CVE) | الحزم الواردة في requirements.txt وpackage.json التي لها ثغرات معروفة، من قاعدة بيانات OSV العامة، مع الإصدار الذي يعالج كل ثغرة |
يقرأ الوكيل ملفات Terraform (.tf) وقوالب البنية التحتية بصيغة YAML أو JSON. ولا يمكن فحص الثغرات إلا للإصدارات المثبّتة بدقة (flask==2.0.1، "lodash": "4.17.20").
1. أضف أدواتك
Section titled “1. أضف أدواتك”يقرأ الوكيل شيفرتك عبر أداة من فئة Developer (مطلوبة)، ويفتح التذاكر عبر أداة من فئة Ticketing (اختيارية). أضف كلتيهما من الأدوات ثم إضافة أداة، في المنطقة التي ستثبّت فيها الوكيل.
GitHub (Developer)
Section titled “GitHub (Developer)”- اختر نموذج GitHub الجاهز. عنوان URL الأساسي هو
https://api.github.com. - بيانات الاعتماد: مفتاح API في ترويسة باسم
AuthorizationوبالبادئةBearer. استخدم رمزًا دقيق الصلاحيات يقتصر على مستودع البنية التحتية، بصلاحية Contents: Read. وأضف Issues: Read and write إن أردت فتح المسائل (Issues) هناك. - الصق ما يلي في 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" } } } } }}Jira (Ticketing، اختيارية)
Section titled “Jira (Ticketing، اختيارية)”- اختر نموذج Jira الجاهز، مع عنوانك الخاص (
https://your-company.atlassian.net). - بيانات الاعتماد: مفتاح API في ترويسة باسم
AuthorizationوبالبادئةBasic. والقيمة هيyour-email:your-api-tokenبترميز base64. أنشئ الرمز من id.atlassian.com. - الصق ما يلي في 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" } } } } }}2. التثبيت
Section titled “2. التثبيت”افتح السوق ثم Cloud Operations ثم Install. اختر أداة GitHub لخانة المستودع، وأداة Jira لخانة التذاكر. يُنشر الوكيل مرة واحدة والأداتان مرفقتان به. المزيد عن التثبيت.
3. اطلب منه
Section titled “3. اطلب منه”من صفحة الوكيل، حدّد له أين يبحث:
راجِع الفرع
mainفي المستودعacme/infrastructure، وافحص جميع ملفات Terraform وجميع ملفات requirements.txt وpackage.json.
ستحصل على عدد الملاحظات حسب الخطورة، وجدول بكل ملاحظة (الملف والسطر، والمورد، والمشكلة، والإصلاح)، والحزم المعرّضة للثغرات مع الإصدار الذي يعالجها، وقسم Do first: أهم ثلاثة إجراءات وسبب أهمية كل منها.
ولفتح التذاكر، اطلب ذلك صراحةً وحدّد المشروع:
…وافتح تذكرة Jira في المشروع OPS (من نوع Task) لكل ملاحظة حرجة أو عالية الخطورة.
يبحث الوكيل أولًا عن تذكرة مفتوحة بالعنوان نفسه، فلا تتكرر التذاكر عند تشغيله مرة أخرى.
4. أضف سياسة
Section titled “4. أضف سياسة”من السياسات ثم سياسة جديدة، أضف ضمن إجراءات يُحظر على الوكيل القيام بها بأدواته مثلًا:
- دمج طلبات السحب
- حذف المستودعات أو الفروع أو الملفات
- إغلاق التذاكر أو حذفها
ثم اختر السياسة للوكيل. وإن كان الرمز الذي منحته لا يملك صلاحية كتابة إلا على المسائل، فلن يستطيع الوكيل تغيير الشيفرة أصلًا، لكن السياسة تجعل ذلك صريحًا، وتشمل أي أداة ترفقها لاحقًا.
5. شغّله كل أسبوع
Section titled “5. شغّله كل أسبوع”من صفحة الوكيل ← Schedules & webhooks ← + Schedule:
- الطلب: راجِع الفرع main في المستودع acme/infrastructure، وافتح تذكرة Jira في المشروع OPS لكل ملاحظة جديدة حرجة أو عالية الخطورة.
- التوقيت:
0 7 * * 0(أيام الأحد الساعة 07:00)، بالمنطقة الزمنية Asia/Riyadh.
وبذلك يبدأ فريقك كل أسبوع بقائمة إصلاحات موجزة وخالية من التكرار. ويمكنك أيضًا إضافة خطاف ويب واستدعاؤه من خط التكامل المستمر (CI) بعد كل دمج في الفرع الرئيسي.
معلومات مفيدة
Section titled “معلومات مفيدة”- يراجع الوكيل الشيفرة، لا حسابك السحابي المباشر. فإن عُدّل شيء يدويًا خارج الشيفرة، فلن يراه.
- كل تشغيل طلبٌ عادي يستهلك الأرصدة. وكلما كبر المستودع زاد عدد الملفات المقروءة، وزادت الأرصدة المستهلكة. لذا وجّهه إلى المجلدات المهمة (“المجلد
prod/فقط”). - أصبح الوكيل وكيلك. افتح Edit لإضافة قواعدك الخاصة إلى شيفرته، أو تغيير تعليماته، أو اختيار نموذج أقوى للمراجعات الكبيرة. ولا تؤثر تحديثات قالب السوق في وكيل ثبّتّه من قبل.