KMS وACM وأنماط التشفير
أدر مفاتيح التشفير باستخدام AWS KMS، ووفّر شهادات TLS ودوّرها باستخدام ACM، واختر بين التشفير من جهة العميل ومن جهة الخادم وأثناء النقل
KMS وACM وأنماط التشفير درس مجاني في Cloud & IT Cert Prep على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cloud & IT Cert Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
التشفير على AWS: نظرة عامة
يُعد التشفير عنصرًا أساسيًا من عناصر التحكم الأمني، إذ يحمي سرية البيانات حتى في حال اختراق وسائط التخزين أو الحصول على وصول بوسائل أخرى. توفر AWS تشفيرًا للبيانات في حالة السكون (المخزّنة في قواعد البيانات وS3 وEBS) وأثناء النقل (المنقولة عبر الشبكات). وتشمل الخدمات الأساسية ما يلي: تدير AWS Key Management Service (KMS) مفاتيح التشفير المستخدمة لتشفير البيانات في حالة السكون. وتوفّر AWS Certificate Manager (ACM) شهادات TLS وتديرها لتشفير البيانات أثناء النقل. ويُعد فهم وقت تطبيق كل خدمة وكيفية تطبيقها أمرًا أساسيًا في مجال البنية الأمنية ضمن SAA-C03.
# Encryption coverage on AWS:
# At rest (KMS):
# S3, EBS, RDS, DynamoDB, EFS, SQS,
# Lambda env vars, Secrets Manager, SSM Parameter Store
# In transit (ACM/TLS):
# ALB listeners (HTTPS), API Gateway, CloudFront,
# Direct Connect, VPN, inter-service communication
# Both:
# S3 Server-Side Encryption + HTTPS only policyAWS KMS: خدمة إدارة المفاتيح
إن AWS KMS خدمة مُدارة بالكامل لإنشاء مفاتيح التشفير والتحكم فيها. وتستخدم KMS Hardware Security Modules (HSMs) لحماية المفاتيح — إذ لا تغادر مادة المفتاح وحدة HSM مطلقًا بصيغة غير مشفّرة. وتت integration KMS مع معظم خدمات AWS لتوفير التشفير من جهة الخادم. وتشمل أنواع المفاتيح: AWS Managed Keys (مجانية، وتُدار لها عملية تدوير تلقائية سنوية، ولا يمكنكم التحكم فيها مباشرةً)، وCustomer Managed Keys (CMK) ($1 شهريًا لكل مفتاح، مع إمكانية التحكم في التدوير وسياسة المفتاح والحذف). ويستخدم Custom Key Store مجموعة CloudHSM الخاصة بكم لتلبية متطلبات الامتثال التي تفرض استخدام وحدات HSM مخصصة.
# Create a Customer Managed Key (CMK)
aws kms create-key \
--description 'Production database encryption key' \
--key-usage ENCRYPT_DECRYPT \
--origin AWS_KMS \
--tags TagKey=Purpose,TagValue=RDS-Encryption
# Create an alias for the key
aws kms create-alias \
--alias-name alias/prod-db-key \
--target-key-id arn:aws:kms:us-east-1:123:key/abc-def
# CMK costs: $1/month + $0.03 per 10,000 API callsسياسات مفاتيح KMS ومنح الوصول
يمتلك كل مفتاح KMS سياسة مفتاح — وهي سياسة قائمة على المورد تتحكم في الجهات التي يمكنها استخدام المفتاح وإدارته. وعلى خلاف سياسات IAM القائمة على الهوية، تكون سياسات المفاتيح مطلوبة؛ إذ يجب أن تمنح سياسة المفتاح الوصول صراحةً حتى تصبح سياسات IAM سارية المفعول. ومن أفضل الممارسات: فصل إدارة المفتاح (الجهات التي يمكنها إدارة المفتاح) عن استخدام المفتاح (الخدمات والأدوار التي يمكنها التشفير وفك التشفير). استخدموا منح المفاتيح لتوفير وصول مفوّض مؤقت — فعلى سبيل المثال، يمكن منح مجموعة EMR إمكانية استخدام مفتاح KMS مؤقتًا لمهمة معينة من دون تعديل سياسة المفتاح.
# KMS key policy: grant RDS and admin access
{
'Statement': [
{
'Sid': 'Enable root account full access',
'Principal': {'AWS': 'arn:aws:iam::123:root'},
'Action': 'kms:*',
'Effect': 'Allow'
},
{
'Sid': 'Allow RDS to use this key',
'Principal': {'Service': 'rds.amazonaws.com'},
'Action': ['kms:Encrypt','kms:Decrypt','kms:GenerateDataKey'],
'Effect': 'Allow'
}
]
}التشفير بالتغليف في KMS
تستخدم KMS التشفير بالتغليف لحماية كميات كبيرة من البيانات بكفاءة. ولا يمكنكم تشفير أكثر من 4 KB مباشرةً باستخدام مفتاح KMS. وبدلًا من ذلك: تنشئ KMS مفتاح تشفير البيانات (DEK) — وهو مفتاح عشوائي يُستخدم لتشفير بياناتكم الفعلية محليًا. ثم يُشفّر مفتاح KMS مفتاح DEK (وهو مفتاح تشفير المفتاح). وتخزّنون مفتاح DEK المشفّر بجانب البيانات المشفّرة. ولفك التشفير، تستدعون KMS أولًا لفك تشفير DEK، ثم تستخدمون مفتاح DEK بنصه الصريح محليًا لفك تشفير البيانات. هذه هي الآلية التي تعمل بها عملية التشفير في S3 وEBS وRDS داخليًا.
# Generate a Data Key (for envelope encryption)
aws kms generate-data-key \
--key-id alias/my-key \
--key-spec AES_256
# Response contains:
# Plaintext: base64-encoded DEK (use to encrypt data locally)
# CiphertextBlob: KMS-encrypted DEK (store alongside data)
# To decrypt:
# 1. Call kms:Decrypt(CiphertextBlob) -> plaintext DEK
# 2. Use plaintext DEK to decrypt data locally
# 3. Zeroize plaintext DEK from memory
aws kms decrypt --ciphertext-blob fileb://encrypted-dek.binتدوير مفاتيح KMS
يُعد تدوير المفتاح من أفضل الممارسات الأمنية، إذ يستبدل مادة المفتاح المشفّرة دوريًا، مما يحدّ من فترة التعرض في حال اختراق المفتاح. وبالنسبة إلى Customer Managed Keys، يمكنكم تفعيل التدوير التلقائي السنوي؛ حيث تنشئ KMS مادة مفتاح جديدة وتستخدمها لعمليات التشفير الجديدة، مع الاحتفاظ بمادة المفتاح القديمة لفك تشفير البيانات الحالية. وتُدوّر AWS Managed Keys تلقائيًا كل عام. أما مادة المفتاح المستوردة فلا تدعم التدوير التلقائي (ويجب تدويرها يدويًا). وبعد التدوير، تستخدم عمليات KMS الجديدة مادة المفتاح الجديدة تلقائيًا من دون الحاجة إلى إجراء تغييرات على التطبيق.
# Enable automatic annual key rotation
aws kms enable-key-rotation \
--key-id alias/prod-db-key
# Verify rotation is enabled
aws kms get-key-rotation-status \
--key-id alias/prod-db-key
# Manual rotation (for imported key material):
# 1. Create a new CMK
# 2. Update all services to use new key
# 3. Re-encrypt existing data with new key
# 4. Schedule old key for deletion (minimum 7-day waiting period)خيارات التشفير من جهة الخادم في S3
تدعم S3 ثلاثة خيارات للتشفير من جهة الخادم: SSE-S3 — تدير S3 المفاتيح باستخدام AES-256، وهو مجاني ويوفر أقل قدر من التحكم. SSE-KMS — يستخدم مفتاح KMS (تديره AWS أو هو CMK)، ويوفر سجل تدقيق للمفتاح في CloudTrail، ويدعم سياسات المفاتيح، وتُفرض تكلفته لكل استدعاء API إلى KMS. SSE-C — تقدمون مادة المفتاح وتديرونها مع كل طلب؛ ولا تخزّن S3 المفتاح مطلقًا. استخدموا SSE-KMS عندما تحتاجون إلى التحكم التدقيقي في الجهة التي استخدمت المفتاح ووقت استخدامه. واستخدموا SSE-S3 للبيانات منخفضة الحساسية عندما تكون البساطة والتكلفة عاملين مهمين. وفرضوا التشفير باستخدام سياسة حاوية ترفض PutObject الذي لا يتضمن تشفيرًا.
# Enforce SSE-KMS on all new S3 objects
aws s3api put-bucket-policy \
--bucket my-secure-bucket \
--policy '{
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-secure-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
}]
}'
# Set default encryption for bucket
aws s3api put-bucket-encryption \
--bucket my-secure-bucket \
--server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms","KMSMasterKeyID":"alias/my-key"}}]}'AWS Certificate Manager (ACM)
توفّر AWS Certificate Manager (ACM) شهادات SSL/TLS لخدمات AWS وتديرها وتجدّدها تلقائيًا دون تكلفة. ويمكن استخدام شهادات ACM مع ALB وNLB وCloudFront وAPI Gateway وAppSync. وتتعامل ACM تلقائيًا مع دورة حياة الشهادة — فتجدّد الشهادات قبل 60 يومًا من انتهاء صلاحيتها، وتنشر التجديد بشفافية. ويمكنكم طلب شهادات للنطاقات التي تملكونها (مع التحقق عبر DNS أو البريد الإلكتروني) أو استيراد شهادات من جهات خارجية. ولا يمكن تنزيل شهادات ACM — إذ تكون مرتبطة بخدمة AWS التي اقترنت بها.
# Request a public ACM certificate
aws acm request-certificate \
--domain-name app.example.com \
--subject-alternative-names '*.example.com' \
--validation-method DNS
# ACM returns a CNAME record to add to Route 53
# Add the CNAME -> ACM validates domain ownership
# Certificate is issued and auto-renews annually
# Attach to ALB listener (HTTPS:443)
aws elbv2 create-listener \
--load-balancer-arn <ALB-ARN> \
--protocol HTTPS --port 443 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123:certificate/abc \
--default-actions Type=forward,TargetGroupArn=<TG-ARN>هيئة الشهادات الخاصة ACM
تتيح ACM Private CA (هيئة الشهادات) إنشاء تسلسل هرمي مُدار بالكامل لهيئات الشهادات الخاصة، لإصدار الشهادات للموارد الداخلية — مثل مثيلات EC2 والحاويات وواجهات API الداخلية وأجهزة إنترنت الأشياء. وعلى عكس شهادات ACM العامة (المستخدمة مع الخدمات المواجهة للإنترنت)، يمكن إصدار شهادات هيئة الشهادات الخاصة لأي اسم مضيف أو عنوان IP داخلي. استخدموا Private CA من أجل: بروتوكول TLS المتبادل (mTLS) بين الخدمات المصغّرة، والمصادقة المستندة إلى الشهادات لشبكات VPN، ومتطلبات الامتثال الخاصة بالبنية التحتية للمفاتيح العامة (PKI) الداخلية. تبلغ تكلفة Private CA مبلغ 400 دولار شهريًا لهيئة الشهادات، بالإضافة إلى 0.75 دولار لكل شهادة مُصدرة.
# Create ACM Private Certificate Authority
aws acm-pca create-certificate-authority \
--certificate-authority-type ROOT \
--certificate-authority-configuration '{
"KeyAlgorithm": "RSA_2048",
"SigningAlgorithm": "SHA256WITHRSA",
"Subject": {
"Country": "US",
"Organization": "Example Corp",
"CommonName": "Example Corp Internal CA"
}
}'
# Issue certificate from private CA
aws acm request-certificate \
--domain-name internal-service.example.internal \
--certificate-authority-arn arn:aws:acm-pca:us-east-1:123:certificate-authority/xxxتشفير EBS وRDS
بالنسبة إلى تشفير وحدة تخزين EBS، فعّلوا التشفير عند إنشاء وحدة التخزين (أو انسخوا وحدة تخزين موجودة مع تفعيل التشفير). تُشفَّر جميع البيانات الموجودة على وحدة التخزين، بما في ذلك اللقطات، باستخدام مفتاح KMS الذي تحددونه. يكون تشفير EBS شفافًا لنظام التشغيل، ولا يتطلب إجراء أي تغييرات على التطبيق. وبالنسبة إلى تشفير RDS، فعّلوا التشفير عند إنشاء مثيل قاعدة البيانات؛ إذ لا يمكنكم تشفير مثيل RDS غير المشفّر مباشرةً بعد إنشائه. والحل البديل هو إنشاء لقطة مشفّرة من مثيل غير مشفّر، ثم استعادتها إلى مثيل جديد مشفّر. تظل اللقطات المشفّرة لكل من EBS وRDS مشفّرة عند نسخها.
# Enable account-level EBS default encryption
aws ec2 enable-ebs-encryption-by-default
aws ec2 modify-ebs-default-kms-key-id \
--kms-key-id alias/prod-ebs-key
# Encrypt an existing unencrypted RDS instance:
# 1. Create unencrypted snapshot
aws rds create-db-snapshot \
--db-instance-identifier mydb \
--db-snapshot-identifier mydb-plain-snapshot
# 2. Copy snapshot with encryption
aws rds copy-db-snapshot \
--source-db-snapshot-identifier mydb-plain-snapshot \
--target-db-snapshot-identifier mydb-encrypted-snapshot \
--kms-key-id alias/prod-db-keyالتشفير من جانب العميل مقابل التشفير من جانب الخادم
يُعد فهم الفرق بين التشفير من جانب الخادم والتشفير من جانب العميل مهمًا لامتحان SAA-C03. التشفير من جانب الخادم: تشفّر AWS البيانات بعد استلامها وتفك تشفيرها قبل تسليمها، ولذلك تكون البيانات بنص واضح بين تطبيقكم وAWS. التشفير من جانب العميل: تشفّرون البيانات قبل إرسالها إلى AWS، ولذلك لا تخزّن AWS سوى النص المشفّر ولا تطّلع مطلقًا على النص الواضح. استخدموا التشفير من جانب العميل مع البيانات الأعلى حساسية عندما لا يمكنكم الوثوق بموفر الخدمة السحابية في التعامل مع النص الواضح، مثل السجلات الصحية أو البيانات المالية الخاضعة للوائح صارمة.
# Client-side encryption with AWS Encryption SDK
# (conceptual Python example)
# 1. Application encrypts data locally using KMS DEK
# from aws_encryption_sdk import KmsKeyProvider, encrypt
# key_provider = KmsKeyProvider(key_ids=['alias/my-key'])
# ciphertext, _ = encrypt(
# source=b'Sensitive patient data',
# key_provider=key_provider
# )
# 2. Send ciphertext to S3
# s3.put_object(Bucket='hipaa-data', Key='record.enc', Body=ciphertext)
# AWS only stores ciphertext - cannot decrypt without your key policyالوصول إلى KMS عبر الحسابات
يمكن مشاركة مفاتيح KMS بين حسابات AWS في سيناريوهات التشفير عبر الحسابات. على سبيل المثال، إذا كان تطبيق الحساب A يكتب بيانات مشفّرة إلى حاوية S3 يملكها الحساب B، فيجب أن يسمح مفتاح KMS الخاص بالحساب A للكيان الرئيسي في الحساب B باستخدامه. اضبطوا نهج مفتاح KMS في الحساب A لمنح الوصول عبر الحسابات، ثم أنشئوا نهج IAM في الحساب B للسماح للدور باستخدام مفتاح الحساب A. يُستخدم هذا النمط عادةً في معماريات مشاركة البيانات والبيئات متعددة الحسابات، حيث يدير حساب مركزي مفاتيح التشفير.
# KMS key policy: allow cross-account access
# (in Account A's key policy)
{
'Sid': 'Allow Account B to use this key',
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::999999999999:root'
},
'Action': [
'kms:Encrypt',
'kms:Decrypt',
'kms:ReEncrypt*',
'kms:GenerateDataKey*',
'kms:DescribeKey'
],
'Resource': '*'
}
# Account B IAM policy also needed to allow the role to use itتحقق سريع
اختبروا مدى فهمكم لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.
مراجعة الدرس
تعلمتم في هذا الدرس أن: KMS يدير مفاتيح التشفير مع حماية HSM، ويدعم CMKs للتحكم الدقيق في الوصول ومسارات التدقيق، وأن ACM يوفّر شهادات TLS لخدمات AWS ويجدّدها تلقائيًا دون تكلفة، وأن التشفير يمكن تطبيقه من جانب الخادم (KMS) أو من جانب العميل، ويُعد التشفير من جانب الخادم النمط الأكثر شيوعًا لأحمال العمل الأصلية في AWS. افرضوا التشفير باستخدام سياسات الحاويات التي تمنع العمليات غير المشفّرة. سنتناول بعد ذلك GuardDuty وInspector وMacie.
الأسئلة الشائعة
هل درس «KMS وACM وأنماط التشفير» مجاني؟
نعم — نص درس «KMS وACM وأنماط التشفير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cloud & IT Cert Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
ماذا ستتعلم في «KMS وACM وأنماط التشفير»؟
أدر مفاتيح التشفير باستخدام AWS KMS، ووفّر شهادات TLS ودوّرها باستخدام ACM، واختر بين التشفير من جهة العميل ومن جهة الخادم وأثناء النقل تتمرن على Cloud & IT Cert Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cloud & IT Cert Prep؟
لا تُشترط خبرة سابقة. Cloud & IT Cert Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «KMS وACM وأنماط التشفير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cloud & IT Cert Prep هذا؟
نعم. كل درس في Cloud & IT Cert Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- KMS وACM وأنماط التشفير
- GuardDuty وInspector وMacie
- Secrets Manager وParameter Store
- WAF وShield وNetwork Firewall