الدرس 10 من 24

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

التشفير في الراحة والنقل

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

التشفير غير قابل للتفاوض في أمان السحابة. كل إطار امتثال رئيسي يتطلبه، ومزودو السحابة الحديثون يجعلونه سهلاً تقريباً—ومع ذلك العديد من المؤسسات لا تزال تخطئ فيه.

التشفير في الراحة

خيارات تشفير AWS S3

الخيار إدارة المفاتيح حالة الاستخدام
SSE-S3 مُدار من AWS (مجاني) افتراضي، حماية أساسية
SSE-KMS مُدار من العميل في KMS مسار تدقيق، تدوير المفاتيح
SSE-C يوفره العميل متطلبات تحكم صارمة بالمفاتيح
من جانب العميل مُدار من العميل تشفير من طرف لطرف

تفعيل التشفير الافتراضي:

# تفعيل تشفير SSE-KMS الافتراضي على الـ bucket
aws s3api put-bucket-encryption --bucket my-bucket \
    --server-side-encryption-configuration '{
        "Rules": [{
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "aws:kms",
                "KMSMasterKeyID": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
            },
            "BucketKeyEnabled": true
        }]
    }'

سياسة مفتاح KMS لـ S3:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3Service",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:CallerAccount": "123456789012"
        }
      }
    }
  ]
}

خيارات تشفير Azure

الخيار إدارة المفاتيح حالة الاستخدام
مُدار من Microsoft مُدار من Azure افتراضي
مفتاح مُدار من العميل (CMK) Azure Key Vault متطلبات الامتثال
تشفير مزدوج بنية تحتية + خدمة أمان عالي

تكوين تشفير CMK:

# إنشاء Key Vault ومفتاح
az keyvault create --name myKeyVault --resource-group myRG --location eastus
az keyvault key create --vault-name myKeyVault --name storageKey --protection software

# تكوين حساب التخزين مع CMK
az storage account update \
    --name mystorageaccount \
    --resource-group myRG \
    --encryption-key-name storageKey \
    --encryption-key-vault "https://myKeyVault.vault.azure.net/" \
    --encryption-key-source Microsoft.Keyvault

خيارات تشفير GCP

الخيار إدارة المفاتيح حالة الاستخدام
مُدار من Google مُدار من Google افتراضي
مُدار من العميل (CMEK) Cloud KMS الامتثال
يوفره العميل (CSEK) العميل يحمل المفاتيح تحكم صارم

تكوين CMEK لـ Cloud Storage:

# إنشاء حلقة مفاتيح ومفتاح
gcloud kms keyrings create my-keyring --location=global
gcloud kms keys create my-key \
    --location=global \
    --keyring=my-keyring \
    --purpose=encryption

# إنشاء bucket مع CMEK
gcloud storage buckets create gs://my-encrypted-bucket \
    --default-encryption-key=projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key

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

متطلبات TLS

جميع خدمات السحابة الحديثة تفرض TLS، لكن يجب التأكد من أن العملاء يحترمونه:

AWS S3 - فرض HTTPS فقط:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "DenyHTTP",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:*",
    "Resource": [
      "arn:aws:s3:::my-bucket",
      "arn:aws:s3:::my-bucket/*"
    ],
    "Condition": {
      "Bool": {
        "aws:SecureTransport": "false"
      }
    }
  }]
}

Azure - طلب نقل آمن:

az storage account update \
    --name mystorageaccount \
    --resource-group myRG \
    --https-only true \
    --min-tls-version TLS1_2

GCP - TLS مفروض دائماً لـ Cloud Storage.

تجنب عبور الإنترنت العام تماماً:

AWS VPC Endpoint:

# Terraform - S3 VPC Gateway Endpoint
resource "aws_vpc_endpoint" "s3" {
  vpc_id       = aws_vpc.main.id
  service_name = "com.amazonaws.us-east-1.s3"

  route_table_ids = [
    aws_route_table.private.id
  ]

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect    = "Allow"
      Principal = "*"
      Action    = "s3:*"
      Resource  = ["arn:aws:s3:::my-bucket/*"]
    }]
  })
}

Azure Private Endpoint:

az network private-endpoint create \
    --name myStoragePrivateEndpoint \
    --resource-group myRG \
    --vnet-name myVNet \
    --subnet mySubnet \
    --private-connection-resource-id "/subscriptions/.../storageAccounts/mystorageaccount" \
    --group-id blob \
    --connection-name myConnection

أفضل ممارسات إدارة المفاتيح

تدوير المفاتيح

المزود التدوير الافتراضي التوصية
AWS KMS تلقائي (سنوي) تفعيل التدوير التلقائي
Azure Key Vault يدوي افتراضياً تكوين التدوير التلقائي
GCP Cloud KMS يدوي جدولة التدوير

التدوير التلقائي لـ AWS KMS:

aws kms enable-key-rotation --key-id 12345678-1234-1234-1234-123456789012

تدقيق الوصول للمفاتيح

# AWS - عرض استخدام مفتاح KMS في CloudTrail
aws cloudtrail lookup-events \
    --lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::KMS::Key

# Azure - تشخيصات Key Vault
az monitor diagnostic-settings create \
    --name KeyVaultDiagnostics \
    --resource "/subscriptions/.../vaults/myKeyVault" \
    --logs '[{"category": "AuditEvent", "enabled": true}]'

مصفوفة قرار التشفير

السيناريو في الراحة في النقل إدارة المفاتيح
بيانات عامة SSE-S3/افتراضي HTTPS مُدار من المزود
PII/PHI SSE-KMS/CMK HTTPS + VPC مُدار من العميل
بيانات مالية SSE-KMS/CMK Private Link مُدار من العميل + HSM
سري للغاية من جانب العميل Private Link يوفره العميل

التالي، سنستكشف أنماط سياسة الوصول وكيفية منع الكشف العام العرضي. :::

اختبار

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

خذ الاختبار