Cloud & IT Cert Prep · درس

التفويض: IAM وLambda Authorizers وCognito

أمّنوا نقاط نهاية API باستخدام توقيعات IAM SigV4 أو مفوّضي Lambda مخصصين أو مفوّضي Amazon Cognito User Pool.

الدرس 3 من 413 خطوة

التفويض: IAM وLambda Authorizers وCognito درس مجاني في Cloud & IT Cert Prep على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cloud & IT Cert Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.

أهمية تفويض الوصول إلى API

من دون ضوابط التفويض، يمكن لأي عميل على الإنترنت استدعاء نقاط نهاية API Gateway والوصول إلى البيانات أو تعديلها. توفر API Gateway ثلاث آليات تفويض أصلية: IAM (SigV4) ومخوّلات Lambda ومخوّلات Amazon Cognito User Pool. وتخدم كل آلية حالات استخدام مختلفة: IAM لاستدعاءات الخدمة إلى الخدمة داخل AWS، ومخوّلات Lambda لمنطق المصادقة المخصص القائم على الرموز أو الطلبات، وCognito لمصادقة مستخدمي الويب والهواتف المحمولة.

تفويض IAM باستخدام SigV4

يتطلب تفويض IAM من المستدعين توقيع الطلبات باستخدام AWS Signature Version 4 (SigV4). ويجب أن يمتلك المستدعي بيانات اعتماد AWS (مفتاح وصول مع مفتاح سري، أو بيانات اعتماد مؤقتة من STS)، كما يجب أن تسمح سياسة IAM بالإجراء execute-api:Invoke على ARN الخاص بواجهة API. وهذا مثالي للاستدعاءات بين الأجهزة أو الخدمات (من خادم إلى خادم) داخل AWS، مثل استدعاء Lambda لواجهة API أخرى، أو استدعاء EC2 لواجهة API داخلية، أو وصول خدمة من حساب آخر. ولا يمكن لعملاء المتصفحات استخدام SigV4 بسهولة.

# IAM policy to allow invoking a specific API endpoint
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Action': 'execute-api:Invoke',
    'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/prod/GET/orders'
  }]
}

مخوّلات Lambda: القائمة على الرموز

مخوّل Lambda (المعروف سابقًا باسم المخوّل المخصص) هو دالة Lambda تكتبها وتستدعيها API Gateway قبل استدعاء تكامل النظام الخلفي. بالنسبة إلى المخوّلات القائمة على الرموز، تستخرج API Gateway رمزًا (JWT أو OAuth أو مفتاح API) من ترويسة Authorization وتمرره إلى Lambda الخاصة بك. وتتحقق Lambda من صحة الرمز، مثل التحقق من توقيع JWT باستخدام مفتاح عام أو استدعاء موفر هوية خارجي، ثم تعيد مستند سياسة IAM يسمح بالطلب أو يرفضه.

def lambda_handler(event, context):
    token = event['authorizationToken']
    # Validate token (JWT verification, introspect OAuth, etc.)
    if is_valid_token(token):
        return {
            'principalId': 'user123',
            'policyDocument': {
                'Version': '2012-10-17',
                'Statement': [{'Effect': 'Allow', 'Action': 'execute-api:Invoke',
                                'Resource': event['methodArn']}]
            },
            'context': {'userId': 'user123', 'role': 'admin'}
        }
    raise Exception('Unauthorized')

مخوّلات Lambda: القائمة على الطلبات

بالنسبة إلى مخوّلات Lambda القائمة على الطلبات، تمرر API Gateway سياق الطلب بالكامل، بما في ذلك الترويسات وسلاسل الاستعلام ومتغيرات المرحلة ومعاملات المسار، إلى Lambda الخاصة بك، وليس رمزًا فقط. ويفيد ذلك في التفويض الذي يعتمد على عدة سمات للطلب، مثل قوائم السماح لعناوين IP أو مجموعات الترويسات أو عمليات التحقق من المصادقة متعددة العوامل. وتدعم كل من REST API وHTTP API المخوّلات القائمة على الطلبات.

تخزين نتائج مخوّل Lambda مؤقتًا

يؤدي استدعاء مخوّل Lambda مع كل طلب إلى إضافة زمن انتقال وتكلفة. فعّل التخزين المؤقت لنتيجة المخوّل: إذ يمكنك تخزين سياسة IAM التي يعيدها المخوّل مؤقتًا لمدة TTL قابلة للضبط (من 0 إلى 3600 ثانية)، ويُستخدم رمز مميز القيمة كمفتاح. وتتجاوز الطلبات اللاحقة التي تستخدم الرمز نفسه استدعاء Lambda وتستخدم السياسة المخزنة مؤقتًا. اضبط TTL بما يتوافق مع مدة انتهاء صلاحية الرمز؛ فإذا كان الرمز صالحًا لمدة ساعة واحدة، فخزّن نتيجة المخوّل مؤقتًا للمدة نفسها. يتوفر التخزين المؤقت في REST API، بينما تتضمن مخوّلات JWT في HTTP API التخزين المؤقت مدمجًا.

مخوّل Amazon Cognito User Pool

تتحقق مخوّلات Cognito User Pool من صحة رموز JWT الصادرة عن Cognito مباشرةً في API Gateway دون استخدام دالة Lambda. عندما يصادق مستخدم عبر Cognito، سواء من خلال Hosted UI أو SDK أو موفر هوية متحد، يصدر Cognito رمز هوية أو رمز وصول. ويدرج العميل هذا الرمز في ترويسة Authorization. وتتحقق API Gateway من توقيع الرمز وانتهاء صلاحيته مقابل Cognito User Pool. إذا كان صالحًا، يتابع الطلب؛ وإلا تعيد API Gateway الاستجابة 401.

aws apigateway create-authorizer \
  --rest-api-id 'abc123' \
  --name 'CognitoAuthorizer' \
  --type COGNITO_USER_POOLS \
  --provider-arns 'arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_XXXXXXX' \
  --identity-source 'method.request.header.Authorization'

مخوّل JWT في HTTP API

تدعم HTTP API مخوّل JWT أصليًا دون Lambda. تحدد عنوان URL لمُصدر JWT (مثل Cognito أو Auth0 أو Okta) والجمهور، وتتحقق API Gateway من صحة رموز JWT تلقائيًا. ويشبه ذلك أساسًا مخوّل Cognito User Pool، لكنه يعمل أيضًا مع أي موفر OIDC متوافق مع المعايير. وتجري API Gateway داخليًا عملية التحقق من الرمز، بما في ذلك التوقيع وانتهاء الصلاحية والجمهور، ما يحقق زمن انتقال أقل من مخوّلات Lambda ودون تكلفة Lambda.

aws apigatewayv2 create-authorizer \
  --api-id 'abc123' \
  --authorizer-type JWT \
  --name 'JWTAuthorizer' \
  --identity-source '$request.header.Authorization' \
  --jwt-configuration '{
    "Issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXX",
    "Audience": ["your-client-id"]
  }'

مجموعات هوية Cognito مقابل مجموعات المستخدمين

لتفويض الوصول إلى API، استخدم Cognito User Pools، فهي تدير مصادقة المستخدمين وتصدر رموز JWT. أما Cognito Identity Pools (الهويات المتحدة) فهي مختلفة؛ إذ تستبدل الرموز الخارجية، الصادرة من User Pools أو عمليات تسجيل الدخول الاجتماعي أو SAML، ببيانات اعتماد AWS مؤقتة عبر STS AssumeRoleWithWebIdentity. وتُستخدم Identity Pools عندما يحتاج تطبيقك إلى الوصول إلى خدمات AWS مباشرةً، مثل S3 وDynamoDB، من العميل. وبالنسبة إلى مصادقة API Gateway، فإن رموز User Pool JWT هي الخيار الصحيح؛ أما بيانات اعتماد Identity Pool فتُستخدم لاستدعاءات AWS SDK المباشرة من المتصفح أو الهاتف المحمول.

سياسات الموارد في API Gateway

تدعم REST APIs سياسات الموارد، وهي سياسات JSON مرفقة بواجهة API وتتحكم في الوصول استنادًا إلى عنوان IP أو نقطة نهاية VPC أو الحساب المصدر أو ARN. استخدم سياسات الموارد للسماح لنطاقات IP محددة فقط باستدعاء واجهة API، أو لتقييد الوصول على الطلبات الواردة عبر نقطة نهاية VPC محددة (واجهة API خاصة)، أو للسماح بالاستدعاءات من حسابات أخرى. وتعمل سياسات الموارد بالإضافة إلى المخوّلات على مستوى الطريقة؛ إذ يجب أن تسمح كلتاهما بالطلب حتى ينجح.

# Allow only specific IP range to call the API
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': '*',
    'Action': 'execute-api:Invoke',
    'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/*',
    'Condition': {'IpAddress': {'aws:SourceIp': '203.0.113.0/24'}}
  }]
}

المصادقة المتبادلة باستخدام TLS

تتطلب المصادقة المتبادلة باستخدام TLS (mTLS) من العميل والخادم تقديم شهادات أثناء عملية مصافحة TLS. وتدعم API Gateway استخدام mTLS مع REST APIs وHTTP APIs عند إعداد أسماء نطاقات مخصصة. ويجب على العملاء تقديم شهادة صالحة موقعة من مرجع مصادقة (CA) تحمّله إلى مخزن ثقة في S3. ويُستخدم mTLS في الخدمات المالية، ومصادقة أجهزة IoT، وتكاملات B2B التي تتطلب تحققًا قويًا من هوية العميل يتجاوز المصادقة القائمة على الرموز.

اختيار نوع المخوّل المناسب

اختيار المخوّل في اختبار SAA-C03: IAM (SigV4) ← استدعاءات الخدمة إلى الخدمة داخل الحساب نفسه أو عبر حسابات مختلفة؛ Cognito User Pool ← مستخدمو تطبيقات الويب والهواتف المحمولة الذين تمت مصادقتهم عبر Cognito؛ مخوّل Lambda ← منطق مصادقة مخصص، مثل موفري الهوية الخارجيين وتنسيقات الرموز القديمة وفحص OAuth وتجميع IP مع الرمز؛ مخوّل JWT (HTTP API) ← رموز OIDC/OAuth2 مع أي موفر متوافق مع المعايير، وبتكلفة أقل من مخوّلات Lambda. عدم استخدام مخوّل ← واجهة API عامة.

تحقق سريع

اختبر مدى استيعابك لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس أن تفويض IAM (SigV4) مخصص لاستدعاءات الخدمة إلى الخدمة باستخدام بيانات اعتماد AWS؛ وأن مخوّلات Cognito User Pool تتحقق أصليًا من صحة رموز JWT الصادرة عن Cognito لتطبيقات الويب والهواتف المحمولة؛ وأن مخوّلات Lambda تنفذ التحقق المخصص من الرموز لموفري الهوية الخارجيين أو منطق التفويض المعقد، مع إمكانية التخزين المؤقت للنتائج. بعد ذلك سنستكشف تقييد المعدل والتخزين المؤقت وخطط الاستخدام في API Gateway.

البدء مجانًا

تعلم Cloud & IT Cert Prep مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
150
الدروس
600

الأسئلة الشائعة

هل درس «التفويض: IAM وLambda Authorizers وCognito» مجاني؟

نعم — نص درس «التفويض: IAM وLambda Authorizers وCognito» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cloud & IT Cert Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.

ماذا ستتعلم في «التفويض: IAM وLambda Authorizers وCognito»؟

أمّنوا نقاط نهاية API باستخدام توقيعات IAM SigV4 أو مفوّضي Lambda مخصصين أو مفوّضي Amazon Cognito User Pool. تتمرن على Cloud & IT Cert Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cloud & IT Cert Prep؟

لا تُشترط خبرة سابقة. Cloud & IT Cert Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «التفويض: IAM وLambda Authorizers وCognito»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cloud & IT Cert Prep هذا؟

نعم. كل درس في Cloud & IT Cert Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. REST API مقابل HTTP API مقابل WebSocket API
  2. التكاملات: Lambda وHTTP وMock
  3. التفويض: IAM وLambda Authorizers وCognito
  4. التقييد والتخزين المؤقت وخطط الاستخدام
← العودة إلى Cloud & IT Cert Prep