أفضل ممارسات أمان السحابة
مقدمة في أمان السحابة
الحوسبة السحابية أحدثت ثورة في كيفية بناء ونشر التطبيقات، حيث توفر قابلية التوسع والمرونة وكفاءة التكلفة. ومع ذلك، فإن نموذج المسؤولية المشتركة لأمان السحابة يعني أنه بينما يؤمن مقدمو السحابة البنية التحتية، فأنت مسؤول عن تأمين تطبيقاتك وبياناتك وضوابط الوصول. فهم أمان السحابة ضروري لحماية المعلومات الحساسة والحفاظ على الامتثال للوائح.
في هذا الدرس الشامل، سنستكشف أساسيات أمان السحابة عبر المنصات الرئيسية (AWS وAzure وGoogle Cloud Platform)، والتي تغطي إدارة الهوية والوصول وأمان الشبكة وإدارة الأسرار والمراقبة ومتطلبات الامتثال. سواء كنت تنشر تطبيق ويب بسيط أو بنية خدمات مصغرة معقدة، ستساعدك هذه المبادئ على بناء تطبيقات سحابية آمنة.
أساسيات أمان السحابة
أساس أمان السحابة يقوم على فهم نموذج المسؤولية المشتركة وتنفيذ استراتيجيات الدفاع في العمق.
نموذج المسؤولية المشتركة
أمان السحابة مقسّم بين مزود السحابة والعميل:
- مسؤولية المزود: الأمن المادي والعتاد والبنية التحتية للشبكة والهايبرفايزر
- مسؤولية العميل: نظام التشغيل والتطبيقات والبيانات وإدارة الوصول والتشفير
- يختلف حسب الخدمة: IaaS (مسؤولية أكثر للعميل)، PaaS (مشتركة)، SaaS (مسؤولية أكثر للمزود)
الدفاع في العمق
نفذ طبقات متعددة من ضوابط الأمان بحيث إذا فشلت طبقة واحدة، توفر الطبقات الأخرى الحماية:
- طبقة الشبكة: 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
Azure Active Directory وRBAC
Azure يستخدم Azure Active Directory (AAD) لإدارة الهوية والتحكم في الوصول المبني على الأدوار (RBAC):
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 توفر عزل الشبكة لموارد السحابة الخاصة بك. صممها مع مراعاة الأمان:
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 للشبكة
مجموعات الأمان تعمل كجدران حماية افتراضية لمثيلاتك:
قواعد واردة:
- 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
جدار حماية تطبيقات الويب (WAF)
WAF يحمي تطبيقات الويب من الهجمات الشائعة مثل SQL injection وXSS:
{
"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
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
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
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 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 لنقل البيانات:
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
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 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}"
الاستجابة للحوادث في السحابة
احصل على خطة للاستجابة لحوادث الأمان في بيئة السحابة الخاصة بك:
- التحضير: وثّق دليل الإجراءات، عيّن الأدوار، قم بتكوين التنبيهات
- الكشف: راقب السجلات، أعد التنبيهات للنشاط المشبوه
- الاحتواء: اعزل الموارد المتأثرة، ألغِ بيانات الاعتماد
- الاستئصال: أزل البرامج الضارة، أصلح الثغرات، قم بتدوير جميع الأسرار
- الاسترداد: استعد من النسخ الاحتياطية، تحقق من السلامة
- الدروس المستفادة: أجرِ تشريح ما بعد الوفاة، حدّث ضوابط الأمان
الملخص وأفضل الممارسات
تأمين البنية التحتية السحابية يتطلب نهجاً شاملاً:
- نفذ IAM بدقة: استخدم الامتياز الأدنى وMFA وحسابات الخدمة/الهويات المدارة
- أمّن شبكتك: استخدم VPCs ومجموعات الأمان وWAF للتحكم في حركة المرور
- لا تقم بترميز الأسرار أبداً: استخدم مديري الأسرار مع التدوير التلقائي
- شفّر كل شيء: فعّل التشفير أثناء السكون وفرض TLS أثناء النقل
- راقب باستمرار: فعّل تسجيل التدقيق وأعد التنبيهات للشذوذ
- أتمتة الامتثال: استخدم محركات السياسات لفرض معايير الأمان
- مارس الاستجابة للحوادث: اختبر إجراءات حوادث الأمان بانتظام
- ابق محدثاً: أمان السحابة يتطور باستمرار—تابع نشرات أمان المزود