الدرس 11 من 24

أمان التخزين والبيانات

سياسات الوصول ومنع الكشف العام

4 دقيقة للقراءة

كشف التخزين العام يبقى السبب #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

التالي، سنغطي النسخ الاحتياطي للبيانات، التعافي من الكوارث، وإدارة دورة حياة البيانات. :::

اختبار

الوحدة 3: أمان التخزين والبيانات

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.