أمان التخزين والبيانات
سياسات الوصول ومنع الكشف العام
كشف التخزين العام يبقى السبب #1 لخروقات بيانات السحابة. حتى مع الإعدادات الافتراضية المحسنة منذ 2023، الأخطاء المقصودة وغير المقصودة في التكوين تستمر في كشف البيانات الحساسة.
مشكلة الكشف العام
الإحصائيات الحالية:
- 31% من S3 buckets قابلة للوصول العام
- 46% من S3 buckets قد تكون مكونة بشكل خاطئ
- Football Australia (2024): 127 حاوية تخزين مكشوفة
التحدي ليس الإعدادات الافتراضية—إنه المطورون الذين يخلقون استثناءات للراحة تصبح ثغرات دائمة.
أنماط سياسة الوصول لـ AWS S3
نهج الدفاع في العمق
حظر الوصول العام على مستوى الحساب
↓
سياسة Bucket (رفض العام)
↓
سياسات IAM (أقل صلاحيات)
↓
نقاط الوصول (وصول مجزأ)
الحماية على مستوى الحساب
تطبيق على حساب AWS بالكامل لمنع أي S3 bucket من أن تكون عامة:
# حظر الوصول العام على مستوى الحساب
aws s3control put-public-access-block \
--account-id 123456789012 \
--public-access-block-configuration \
BlockPublicAcls=true,\
IgnorePublicAcls=true,\
BlockPublicPolicy=true,\
RestrictPublicBuckets=true
قوالب سياسة Bucket
رفض الوصول الخارجي (المنظمة فقط):
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyExternalAccess",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:PrincipalOrgID": "o-xxxxxxxxxx"
}
}
}]
}
تقييد لـ VPC endpoint محدد:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyNonVPCAccess",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": "vpce-1234567890abcdef0"
}
}
}]
}
نقاط وصول S3
النهج الحديث للوصول المجزأ:
# إنشاء نقطة وصول لتطبيق محدد
aws s3control create-access-point \
--account-id 123456789012 \
--name app-access-point \
--bucket my-bucket \
--vpc-configuration VpcId=vpc-12345678
# سياسة نقطة الوصول
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/ApplicationRole"
},
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:us-east-1:123456789012:accesspoint/app-access-point/object/*"
}]
}
ضوابط الوصول لـ Azure Storage
تعطيل وصول المفتاح المشترك
إزالة مفاتيح حساب التخزين تماماً:
# تعطيل وصول المفتاح المشترك
az storage account update \
--name mystorageaccount \
--resource-group myRG \
--allow-shared-key-access false
مستويات وصول الحاوية
| المستوى | الوصول | التوصية |
|---|---|---|
| خاص | لا وصول مجهول | افتراضي، استخدم دائماً |
| Blob | قراءة مجهولة للـ blobs | نادراً ما يحتاج |
| حاوية | قراءة مجهولة للحاوية + blobs | تجنب |
# تأكد من أن الحاوية خاصة
az storage container set-permission \
--name mycontainer \
--account-name mystorageaccount \
--public-access off
أفضل ممارسات رمز SAS
عند الحاجة للوصول المؤقت:
# توليد رمز SAS محدود النطاق
az storage container generate-sas \
--name mycontainer \
--account-name mystorageaccount \
--permissions r \
--expiry $(date -u -d "1 hour" +"%Y-%m-%dT%H:%MZ") \
--ip "10.0.0.0-10.0.0.255" \
--https-only
قواعد أمان رمز SAS:
- انتهاء صلاحية قصير (ساعات، وليس أيام)
- أدنى صلاحيات مطلوبة
- قيود IP عند الإمكان
- HTTPS فقط
- استخدم سياسات الوصول المخزنة لقدرة الإلغاء
أمان GCP Cloud Storage
منع الوصول العام
فرض على مستوى المنظمة:
# تفعيل منع الوصول العام على الـ bucket
gcloud storage buckets update gs://my-bucket \
--public-access-prevention=enforced
# قيد سياسة المنظمة
gcloud resource-manager org-policies set-policy policy.yaml
policy.yaml:
constraint: constraints/storage.publicAccessPrevention
listPolicy:
allValues: DENY
شروط IAM
وصول محدود الوقت أو مشروط:
gcloud storage buckets add-iam-policy-binding gs://my-bucket \
--member="user:developer@example.com" \
--role="roles/storage.objectViewer" \
--condition="expression=request.time < timestamp('2026-02-01T00:00:00Z'),title=temporary-access"
كشف الكشف العام
AWS Access Analyzer
# تفعيل IAM Access Analyzer
aws accessanalyzer create-analyzer \
--analyzer-name MyAnalyzer \
--type ACCOUNT
# قائمة النتائج العامة/عبر الحسابات
aws accessanalyzer list-findings \
--analyzer-arn arn:aws:access-analyzer:us-east-1:123456789012:analyzer/MyAnalyzer \
--filter '{"resourceType": {"eq": ["AWS::S3::Bucket"]}}'
AWS Macie
اكتشاف البيانات الحساسة في S3:
# تفعيل Macie
aws macie2 enable-macie
# إنشاء مهمة اكتشاف البيانات الحساسة
aws macie2 create-classification-job \
--job-type ONE_TIME \
--s3-job-definition '{
"bucketDefinitions": [{
"accountId": "123456789012",
"buckets": ["my-bucket"]
}]
}'
قائمة تحقق الوقاية
| الضابط | AWS | Azure | GCP |
|---|---|---|---|
| حظر الوصول العام | ✓ مستوى الحساب + Bucket | ✓ حاويات خاصة | ✓ منع الوصول العام |
| سياسات المنظمة | ✓ SCPs | ✓ Azure Policy | ✓ قيود المنظمة |
| محلل الوصول | ✓ IAM Access Analyzer | ✓ Defender for Cloud | ✓ Security Command Center |
| اكتشاف البيانات | ✓ Macie | ✓ Purview | ✓ DLP |
| المراقبة | ✓ CloudTrail + Config | ✓ سجلات التشخيص | ✓ Cloud Audit Logs |
التالي، سنغطي النسخ الاحتياطي للبيانات، التعافي من الكوارث، وإدارة دورة حياة البيانات. :::