الأمان والأداء

أفضل ممارسات أمان السحابة

18 دقيقة الدرس 25 من 35

مقدمة في أمان السحابة

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

في هذا الدرس الشامل، سنستكشف أساسيات أمان السحابة عبر المنصات الرئيسية (AWS وAzure وGoogle Cloud Platform)، والتي تغطي إدارة الهوية والوصول وأمان الشبكة وإدارة الأسرار والمراقبة ومتطلبات الامتثال. سواء كنت تنشر تطبيق ويب بسيط أو بنية خدمات مصغرة معقدة، ستساعدك هذه المبادئ على بناء تطبيقات سحابية آمنة.

أساسيات أمان السحابة

أساس أمان السحابة يقوم على فهم نموذج المسؤولية المشتركة وتنفيذ استراتيجيات الدفاع في العمق.

نموذج المسؤولية المشتركة

أمان السحابة مقسّم بين مزود السحابة والعميل:

  • مسؤولية المزود: الأمن المادي والعتاد والبنية التحتية للشبكة والهايبرفايزر
  • مسؤولية العميل: نظام التشغيل والتطبيقات والبيانات وإدارة الوصول والتشفير
  • يختلف حسب الخدمة: IaaS (مسؤولية أكثر للعميل)، PaaS (مشتركة)، SaaS (مسؤولية أكثر للمزود)
ملاحظة: فهم هذا النموذج أمر بالغ الأهمية. حتى لو كانت AWS أو Azure أو GCP تؤمن البنية التحتية، فإن التكوينات الخاطئة في سياسات IAM أو حاويات التخزين أو قواعد البيانات يمكن أن تؤدي إلى اختراقات بيانات ضخمة.

الدفاع في العمق

نفذ طبقات متعددة من ضوابط الأمان بحيث إذا فشلت طبقة واحدة، توفر الطبقات الأخرى الحماية:

  • طبقة الشبكة: VPCs ومجموعات الأمان وقوائم ACL للشبكة وجدران الحماية
  • طبقة الهوية: IAM وMFA والوصول بأقل الامتيازات
  • طبقة التطبيق: التحقق من صحة المدخلات والمصادقة والتفويض
  • طبقة البيانات: التشفير أثناء السكون والنقل ومنع فقدان البيانات
  • طبقة المراقبة: التسجيل والتنبيه والاستجابة للحوادث

إدارة الهوية والوصول (IAM)

IAM هو حجر الزاوية في أمان السحابة، حيث يتحكم في من يمكنه الوصول إلى الموارد وما الإجراءات التي يمكنهم القيام بها.

أفضل ممارسات AWS IAM

إدارة الهوية والوصول في AWS توفر تحكماً دقيقاً في الوصول إلى موارد AWS:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "LimitedS3Access",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::my-app-bucket/uploads/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "203.0.113.0/24"
        },
        "StringEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
  ]
}

أفضل ممارسات IAM:

  • لا تستخدم الحساب الجذري أبداً للعمليات اليومية—أنشئ مستخدمين/أدوار IAM بدلاً من ذلك
  • فعّل MFA على جميع الحسابات المميزة والحساب الجذري
  • استخدم أدوار IAM لمثيلات EC2 بدلاً من تضمين بيانات الاعتماد
  • نفذ الامتياز الأدنى—امنح الأذونات المطلوبة فقط
  • قم بتدوير بيانات الاعتماد بانتظام—استخدم AWS Secrets Manager للتدوير التلقائي
  • استخدم شروط السياسة لتقييد الوصول حسب IP أو الوقت أو حالة MFA
تحذير: لا تقم بترميز بيانات اعتماد AWS في الكود الخاص بك. استخدم أدوار IAM لـ EC2/Lambda، أو متغيرات البيئة مع مديري الأسرار. بيانات الاعتماد في الكود هي السبب الأول لاختراقات أمان السحابة.

Azure Active Directory وRBAC

Azure يستخدم Azure Active Directory (AAD) لإدارة الهوية والتحكم في الوصول المبني على الأدوار (RBAC):

# Azure CLI: تعيين دور للمستخدم
az role assignment create \
  --assignee user@company.com \
  --role "Storage Blob Data Contributor" \
  --scope "/subscriptions/{subscription-id}/resourceGroups/my-rg/providers/Microsoft.Storage/storageAccounts/mystorageacct"

# إنشاء تعريف دور مخصص
{
  "Name": "Custom App Deployer",
  "Description": "Can deploy web apps but not delete",
  "Actions": [
    "Microsoft.Web/sites/write",
    "Microsoft.Web/sites/restart/Action"
  ],
  "NotActions": [
    "Microsoft.Web/sites/delete"
  ],
  "AssignableScopes": [
    "/subscriptions/{subscription-id}/resourceGroups/production"
  ]
}

أفضل ممارسات IAM في Azure:

  • استخدم الهويات المدارة لأجهزة Azure الظاهرية وخدمات التطبيقات للوصول إلى الموارد
  • نفذ سياسات الوصول المشروط لطلب MFA بناءً على المخاطر
  • فعّل إدارة الهوية المميزة (PIM) للوصول الإداري في الوقت المناسب
  • استخدم مجموعات Azure AD لتعيينات الأدوار بدلاً من المستخدمين الأفراد
  • راجع الوصول بانتظام مع مراجعات الوصول في Azure AD

Google Cloud IAM

GCP يستخدم نموذج IAM هرمي مع أذونات على مستوى المؤسسة والمجلد والمشروع والمورد:

# منح دور على مستوى المشروع
gcloud projects add-iam-policy-binding my-project \
  --member="user:developer@company.com" \
  --role="roles/storage.objectViewer"

# إنشاء دور مخصص
gcloud iam roles create customAppRunner \
  --project=my-project \
  --title="Custom App Runner" \
  --description="Can run Cloud Run services" \
  --permissions=run.services.get,run.services.list \
  --stage=GA

أفضل ممارسات GCP IAM:

  • استخدم حسابات الخدمة للمصادقة من خادم إلى خادم
  • طبق IAM على أدنى مستوى ممكن (مورد > مشروع > مجلد)
  • استخدم الأدوار المحددة مسبقاً عندما يكون ذلك ممكناً—يتم صيانتها بواسطة Google
  • فعّل جرد أصول السحابة لتتبع من لديه وصول إلى ماذا
  • نفذ سياسات المؤسسة لفرض قيود الأمان
نصيحة: استخدم مبدأ الامتياز الأدنى عبر جميع منصات السحابة. ابدأ بصفر أذونات وأضف فقط ما هو مطلوب. من الأسهل منح الوصول لاحقاً من التعافي من اختراق ناتج عن أذونات مفرطة.

أمان الشبكة في السحابة

أمان شبكة السحابة يتضمن عزل الموارد والتحكم في حركة المرور وحماية البيانات أثناء النقل.

تصميم الشبكة الخاصة الظاهرية (VPC)

VPCs توفر عزل الشبكة لموارد السحابة الخاصة بك. صممها مع مراعاة الأمان:

# AWS VPC مع شبكات فرعية عامة وخاصة
VPC CIDR: 10.0.0.0/16

شبكة فرعية عامة (DMZ): 10.0.1.0/24
- NAT Gateway
- Load Balancer
- Bastion Host

شبكة فرعية خاصة (تطبيق): 10.0.10.0/24
- خوادم التطبيقات
- المسارات إلى الإنترنت عبر NAT Gateway

شبكة فرعية خاصة (بيانات): 10.0.20.0/24
- خوادم قاعدة البيانات
- بدون وصول إلى الإنترنت
- نقاط نهاية VPC لخدمات AWS

أفضل ممارسات أمان VPC:

  • استخدم الشبكات الفرعية الخاصة لطبقات التطبيق وقاعدة البيانات
  • انشر NAT Gateway في الشبكة الفرعية العامة للوصول الصادر إلى الإنترنت
  • لا تعرض قواعد البيانات أبداً مباشرة على الإنترنت
  • استخدم نقاط نهاية VPC للوصول إلى خدمات AWS بدون بوابة الإنترنت
  • نفذ تقسيم الشبكة مع شبكات فرعية متعددة

مجموعات الأمان وقوائم ACL للشبكة

مجموعات الأمان تعمل كجدران حماية افتراضية لمثيلاتك:

# مجموعة أمان AWS (حالة ذات حالة)
قواعد واردة:
- Allow TCP 443 from 0.0.0.0/0 (HTTPS من أي مكان)
- Allow TCP 22 from 203.0.113.50/32 (SSH من IP المكتب فقط)
- Allow TCP 3306 from sg-app-servers (MySQL من خوادم التطبيقات)

قواعد صادرة:
- Allow all traffic to 0.0.0.0/0 (افتراضي، يمكن تقييده)

# قائمة ACL للشبكة (بدون حالة، مستوى الشبكة الفرعية)
قواعد واردة:
100: Allow TCP 443 from 0.0.0.0/0
110: Allow TCP 80 from 0.0.0.0/0
120: Allow TCP 1024-65535 from 0.0.0.0/0 (منافذ مؤقتة)
*: Deny all

قواعد صادرة:
100: Allow TCP 443 to 0.0.0.0/0
110: Allow TCP 1024-65535 to 0.0.0.0/0
*: Deny all
ملاحظة: مجموعات الأمان ذات حالة (حركة المرور العائدة مسموح بها تلقائياً)، بينما قوائم ACL للشبكة بدون حالة (يجب السماح صراحةً بحركة المرور العائدة). استخدم مجموعات الأمان للتحكم على مستوى المثيل وNACLs للدفاع على مستوى الشبكة الفرعية.

جدار حماية تطبيقات الويب (WAF)

WAF يحمي تطبيقات الويب من الهجمات الشائعة مثل SQL injection وXSS:

# مثال قاعدة AWS WAF
{
  "Name": "BlockSQLInjection",
  "Priority": 1,
  "Statement": {
    "OrStatement": {
      "Statements": [
        {
          "SqliMatchStatement": {
            "FieldToMatch": {
              "QueryString": {}
            },
            "TextTransformations": [
              {"Priority": 0, "Type": "URL_DECODE"}
            ]
          }
        },
        {
          "SqliMatchStatement": {
            "FieldToMatch": {
              "Body": {}
            },
            "TextTransformations": [
              {"Priority": 0, "Type": "HTML_ENTITY_DECODE"}
            ]
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  }
}

ميزات WAF التي يجب تمكينها:

  • مجموعات القواعد المدارة: OWASP Top 10، المدخلات السيئة المعروفة، التحكم في الروبوتات
  • تحديد المعدل: منع هجمات DDoS والقوة الغاشمة
  • الحظر الجغرافي: حظر حركة المرور من دول معينة إذا لزم الأمر
  • القواعد المخصصة: حظر الأنماط الخاصة بتطبيقك

إدارة الأسرار

لا تخزن الأسرار في الكود أبداً أو متغيرات البيئة أو ملفات التكوين. استخدم خدمات إدارة الأسرار المخصصة.

AWS Secrets Manager

// Node.js: استرجاع السر من AWS Secrets Manager
const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager({ region: 'us-east-1' });

async function getSecret(secretName) {
  try {
    const data = await secretsManager.getSecretValue({
      SecretId: secretName
    }).promise();
    
    if ('SecretString' in data) {
      return JSON.parse(data.SecretString);
    } else {
      const buff = Buffer.from(data.SecretBinary, 'base64');
      return buff.toString('ascii');
    }
  } catch (err) {
    console.error('Error retrieving secret:', err);
    throw err;
  }
}

// الاستخدام
const dbCreds = await getSecret('prod/database/credentials');
const connection = await mysql.createConnection({
  host: dbCreds.host,
  user: dbCreds.username,
  password: dbCreds.password,
  database: dbCreds.dbname
});

Azure Key Vault

// C# .NET: استرجاع السر من Azure Key Vault
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

var kvUri = "https://myvault.vault.azure.net";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());

// استرجاع السر
KeyVaultSecret secret = await client.GetSecretAsync("DatabasePassword");
string secretValue = secret.Value;

// استخدام السر
var connectionString = $"Server=myserver;Database=mydb;User Id=admin;Password={secretValue};";

Google Cloud Secret Manager

# Python: الوصول إلى السر من GCP Secret Manager
from google.cloud import secretmanager

def access_secret(project_id, secret_id, version_id="latest"):
    client = secretmanager.SecretManagerServiceClient()
    name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"
    response = client.access_secret_version(request={"name": name})
    return response.payload.data.decode("UTF-8")

# الاستخدام
db_password = access_secret("my-project", "database-password")
connection = psycopg2.connect(
    host="localhost",
    database="myapp",
    user="admin",
    password=db_password
)
أفضل ممارسة: فعّل التدوير التلقائي للأسرار في مدير الأسرار الخاص بك. AWS Secrets Manager يمكنه تدوير كلمات مرور RDS تلقائياً. للأسرار المخصصة، نفذ وظائف Lambda لتدويرها حسب جدول زمني.

تشفير البيانات

شفّر البيانات أثناء السكون والنقل لحماية المعلومات الحساسة من الوصول غير المصرح به.

التشفير أثناء السكون

جميع مزودي السحابة يوفرون التشفير لخدمات التخزين:

# AWS S3: تمكين التشفير الافتراضي
aws s3api put-bucket-encryption \
  --bucket my-bucket \
  --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "arn:aws:kms:us-east-1:123456789:key/abc"}}]}'

# Azure Storage: تمكين التشفير (ممكّن افتراضياً)
az storage account create \
  --name mystorageaccount \
  --resource-group myResourceGroup \
  --encryption-services blob file

# GCP Cloud Storage: تمكين التشفير
gsutil kms encryption \
  -k projects/my-project/locations/us/keyRings/my-ring/cryptoKeys/my-key \
  gs://my-bucket

تشفير قاعدة البيانات:

  • AWS RDS: تمكين التشفير عند الإنشاء، يستخدم AWS KMS
  • Azure SQL: تشفير البيانات الشفاف (TDE) ممكّن افتراضياً
  • GCP Cloud SQL: مشفر افتراضياً بمفاتيح مُدارة من Google

التشفير أثناء النقل

استخدم دائماً TLS/SSL لنقل البيانات:

// Node.js: إجبار HTTPS فقط
const express = require('express');
const helmet = require('helmet');

const app = express();

// إعادة توجيه HTTP إلى HTTPS
app.use((req, res, next) => {
  if (req.header('x-forwarded-proto') !== 'https' && process.env.NODE_ENV === 'production') {
    res.redirect(`https://${req.header('host')}${req.url}`);
  } else {
    next();
  }
});

// رؤوس الأمان مع HSTS
app.use(helmet({
  hsts: {
    maxAge: 31536000, // سنة واحدة
    includeSubDomains: true,
    preload: true
  }
}));

المراقبة والتسجيل في السحابة

المراقبة والتسجيل الشاملان ضروريان للكشف عن حوادث الأمان والاستجابة لها.

AWS CloudWatch وCloudTrail

# تمكين CloudTrail لجميع المناطق
aws cloudtrail create-trail \
  --name my-security-trail \
  --s3-bucket-name my-cloudtrail-bucket \
  --is-multi-region-trail \
  --enable-log-file-validation

# إنشاء تنبيه CloudWatch لمحاولات تسجيل الدخول الفاشلة
aws cloudwatch put-metric-alarm \
  --alarm-name "HighFailedLogins" \
  --alarm-description "Alert on 5+ failed login attempts" \
  --metric-name UnauthorizedAPICalls \
  --namespace AWS/CloudTrail \
  --statistic Sum \
  --period 300 \
  --threshold 5 \
  --comparison-operator GreaterThanThreshold

Azure Monitor ومركز الأمان

# تمكين إعدادات التشخيص
az monitor diagnostic-settings create \
  --name "SecurityLogs" \
  --resource "/subscriptions/{sub-id}/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM" \
  --logs '[{"category": "Security", "enabled": true}]' \
  --workspace "/subscriptions/{sub-id}/resourceGroups/myRG/providers/Microsoft.OperationalInsights/workspaces/myWorkspace"

Google Cloud Logging والمراقبة

# إنشاء مصرف سجل لتصدير سجلات الأمان
gcloud logging sinks create security-logs-sink \
  storage.googleapis.com/my-security-logs-bucket \
  --log-filter='protoPayload.methodName:"iam.googleapis.com"'
حرج: فعّل تسجيل التدقيق على جميع موارد الإنتاج. معظم اختراقات الأمان يتم اكتشافها بعد أسابيع أو أشهر من حدوثها. السجلات الشاملة ضرورية للتحليل الجنائي والاستجابة للحوادث.

الامتثال والشهادات

مزودو السحابة يحافظون على شهادات امتثال مختلفة، لكن يجب عليك تكوين مواردك لتلبية متطلبات الامتثال الخاصة بك.

أطر الامتثال الشائعة

  • SOC 2: الأمان والتوفر وسلامة المعالجة والسرية والخصوصية
  • ISO 27001: أنظمة إدارة أمن المعلومات
  • PCI DSS: معيار أمان بيانات صناعة بطاقات الدفع
  • HIPAA: قانون قابلية نقل التأمين الصحي والمساءلة (الرعاية الصحية)
  • GDPR: اللائحة العامة لحماية البيانات (خصوصية البيانات في الاتحاد الأوروبي)
  • FedRAMP: برنامج إدارة المخاطر والتفويض الفيدرالي (حكومة الولايات المتحدة)

أدوات الامتثال

# AWS Config: التحقق من الموارد المتوافقة
aws configservice describe-compliance-by-config-rule \
  --config-rule-names encrypted-volumes

# Azure Policy: فرض الامتثال
az policy assignment create \
  --name "RequireEncryption" \
  --display-name "Require storage account encryption" \
  --policy "/providers/Microsoft.Authorization/policyDefinitions/xxx" \
  --scope "/subscriptions/{sub-id}"
تمرين: راجع البنية التحتية السحابية الحالية الخاصة بك باستخدام أدوات الامتثال للمزود (AWS Config وAzure Policy وGCP Security Command Center). حدد ثلاثة تكوينات أمنية خاطئة على الأقل وقم بإصلاحها. وثق النتائج والخطوات المتخذة لإصلاحها.

الاستجابة للحوادث في السحابة

احصل على خطة للاستجابة لحوادث الأمان في بيئة السحابة الخاصة بك:

  1. التحضير: وثّق دليل الإجراءات، عيّن الأدوار، قم بتكوين التنبيهات
  2. الكشف: راقب السجلات، أعد التنبيهات للنشاط المشبوه
  3. الاحتواء: اعزل الموارد المتأثرة، ألغِ بيانات الاعتماد
  4. الاستئصال: أزل البرامج الضارة، أصلح الثغرات، قم بتدوير جميع الأسرار
  5. الاسترداد: استعد من النسخ الاحتياطية، تحقق من السلامة
  6. الدروس المستفادة: أجرِ تشريح ما بعد الوفاة، حدّث ضوابط الأمان

الملخص وأفضل الممارسات

تأمين البنية التحتية السحابية يتطلب نهجاً شاملاً:

  • نفذ IAM بدقة: استخدم الامتياز الأدنى وMFA وحسابات الخدمة/الهويات المدارة
  • أمّن شبكتك: استخدم VPCs ومجموعات الأمان وWAF للتحكم في حركة المرور
  • لا تقم بترميز الأسرار أبداً: استخدم مديري الأسرار مع التدوير التلقائي
  • شفّر كل شيء: فعّل التشفير أثناء السكون وفرض TLS أثناء النقل
  • راقب باستمرار: فعّل تسجيل التدقيق وأعد التنبيهات للشذوذ
  • أتمتة الامتثال: استخدم محركات السياسات لفرض معايير الأمان
  • مارس الاستجابة للحوادث: اختبر إجراءات حوادث الأمان بانتظام
  • ابق محدثاً: أمان السحابة يتطور باستمرار—تابع نشرات أمان المزود
نصيحة محترف: استخدم البنية التحتية كرمز (Terraform وCloudFormation وقوالب ARM) لتعريف ضوابط الأمان. هذا يضمن أماناً متسقاً عبر البيئات، ويمكّن التحكم في الإصدار، ويسهل مراجعة تكوين الأمان الخاص بك.