تسجيل SSH وإدارة الجلسة باستخدام AWS SSM

نشرت: 2022-03-11

يمكن أن يكون إعداد أدوات أو نصوص مخصصة للاحتفاظ بسجل SSH على Linux أمرًا مملًا وعرضة للخطأ.

يمكن للمهندسين استخدام rootsh أو الشاشة أو أداة مساعدة أخرى لتسجيل نشاط المستخدم ولكن إذا لم يتم تعيين أذونات المستخدم بشكل صحيح ، يمكن للمستخدم الماهر محو سجلات التدقيق لتغطية مساراتهم. قد يكون الخيار الآخر هو إعداد التسجيل على مستوى النواة ، لكن الخبرة اللازمة لذلك ليست شائعة جدًا.

لحسن الحظ ، هناك طريقة لتسجيل نشاط المستخدم دون كتابة أمر Linux واحد! سنحتاج هذه الخدمات:

  • EC2
  • IAM (إدارة الهوية والوصول)
  • KMS (خدمة إدارة المفاتيح)
  • سجلات CloudWatch (و / أو S3)
  • AWS Systems Manager (المعروف سابقًا باسم SSM)

دعونا نرى كيفية إعداد كل منهم.

EC2 و IAM

عادةً ما يكون بدء تشغيل مثيل EC2 أمرًا سهلاً إلى حد ما ، ولكن هناك مهمة رئيسية واحدة يجب القيام بها أثناء الإطلاق: نحتاج إلى إرفاق دور IAM بمثيلنا ، وإلا فلن نتمكن من تحقيق النتائج المتوقعة المفصلة في نهاية هذا شرط.

يجب أن يكون لدور IAM الذي نربطه بمثيل EC2 الخاص بنا سياسة AmazonSSManagedInstanceCore المضمنة ، بالإضافة إلى هذه السياسة (المرفقة على أنها مضمنة أو يديرها العميل):

 { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:PutLogEvents" ], "Effect": "Allow", "Resource": "*" } ] }

بصرف النظر عن دور IAM ، نستخدم بشكل عام تكوين مثيل EC2 هذا:

  • نظام التشغيل هو Amazon Linux 2 ، لأنه يأتي مع AWS Systems Manager Agent (SSM Agent) بشكل افتراضي. (وكذلك توزيعات Ubuntu ، والتي تعد أيضًا خيارًا).
  • نوع المثيل هو t3.micro (لكن أي نوع سيفي بالغرض).
  • ستعمل مجموعة الأمان الافتراضية التي تعيّنها AWS إلى VPC ، لأننا لا نحتاج إلى فتح منفذ SSH لهذا التمرين.

يمكننا البدء في إعداد KMS دون انتظار تشغيل مثيل EC2.

KMS

نحتاج إلى مفتاح KMS إذا أردنا تخزين جميع سجلات الجلسات التي يتم تسليمها إلى CloudWatch بشكل مشفر. دعنا نتوجه إلى خدمة KMS وننشئ مفتاحًا.

لقطة شاشة لـ AWS مع مسارات التنقل "KMS" و "مفاتيح يديرها العميل" و "إنشاء مفتاح" حاليًا في الخطوة 1: "مفتاح التكوين". يمكن تعيين "نوع المفتاح" على "متماثل" (محدد) أو "غير متماثل". ضمن "الخيارات المتقدمة" ، يمكن أن يكون إعداد "أصل المادة الرئيسية" هو "KMS" (محدد) أو "خارجي" أو "مخزن مفاتيح مخصص (CloudHSM)."
الخطوة 1: اختيار نوع المفتاح المتماثل.

لقطة شاشة لـ AWS بنفس مسارات التنقل ، الآن في الخطوة 2: "إضافة ملصقات". يتم تعيين حقل الاسم المستعار على "cwlg" ، ويتم ترك حقل الوصف الاختياري فارغًا ، ولا يحتوي حقل العلامات الاختياري على علامات مضافة.
الخطوة الثانية: تسمية مفتاحنا.

لقطة شاشة لـ AWS بنفس مسارات التنقل ، الآن في الخطوة 3: "تحديد الأذونات الإدارية الرئيسية". يحتوي الحقل الأول ، "المسؤولون الرئيسيون" ، على مربع بحث فارغ به 10 صفوف من النتائج (الصفحة 1 من 3) مع الأعمدة الاسم والمسار والنوع. تم تحديد مربع الاختيار المقابل في الصف الأول فقط (مع قيم الأعمدة ذات الصلة "admin" و "/" و "User"). يحتوي الحقل الآخر ، "حذف المفتاح" ، على خيار واحد ، "السماح للمسؤولين الرئيسيين بحذف هذا المفتاح" ، والذي تم تحديد خانة الاختيار الخاصة به أيضًا.
الخطوة 3 (اختياري): تعيين مسؤول.

نوصي بتعيين مسؤول بحيث يمكن إدارة المفتاح بواسطة مستخدمين بخلاف المستخدم الجذر لحساب AWS ، ولكن إذا لم يحتاج الآخرون إلى الوصول ، فيمكننا تخطي الخطوة 3.

هنا اخترنا "admin" مستخدم IAM كمسؤول رئيسي ، لكننا أحرار في اختيار أي مستخدم أو دور. يمكننا أيضًا اختيار تعطيل إذن حذف المفتاح للمسؤول.

لقطة شاشة لـ AWS بنفس مسارات التنقل ، الآن في الخطوة 4: "تحديد أذونات استخدام المفتاح." يحتوي الحقل الأول ، "هذا الحساب" ، على نفس نتائج البحث كما في الخطوة 3 ، ولكن لم يتم التحقق من أي منها. الحقل الآخر ، "حسابات AWS الأخرى" ، لم يضف إليه أي شيء.
الخطوة 4: تخطي صفحة تعيين المستخدم.

لن نقوم بتعيين أي مستخدمين لهذا المفتاح لأننا نريد أن يتم استخدام هذا المفتاح فقط بواسطة خدمة CloudWatch Logs لعمليات تشفير وفك تشفير سجل SSH.

لقطة شاشة لـ AWS بنفس مسارات التنقل ، الآن في الخطوة 5: "مراجعة". يسرد الحقل الأول ، "تكوين المفتاح" ، "نوع المفتاح" كـ "متماثل" ، و "مواصفات المفتاح" مثل "SYMMETRIC_DEFAULT" ، و "استخدام المفتاح" كـ "تشفير وفك تشفير" ، و "الأصل" كـ "AWS_KMS . " يسرد الحقل التالي "الاسم المستعار والوصف" اسمًا مستعارًا واحدًا ، "cwlg" بدون وصف. لا يعرض الحقل التالي ، "العلامات ،" أي بيانات. يتضمن الحقل الأخير ، "سياسة المفتاح" ، مربع نص مملوءًا مسبقًا بسياسة بتنسيق JSON.
الخطوة 5: قم بمراجعة التكوين الخاص بنا وقم بتبديل سياسة المفتاح الافتراضي.

في صفحة المراجعة ، سنحتاج إلى تغيير سياسة المفاتيح التي تم إنشاؤها بواسطة KMS لأنها لا تتضمن أذونات لـ CloudWatch Logs لاستخدام المفتاح. سنقوم باستبدالها بهذه السياسة:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow access to CloudWatch Log", "Effect": "Allow", "Principal": { "Service": "logs.REGION.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT_ID:*" } } } ] }

تأكد من استبدال جميع العناصر النائبة:

  • يصبح ACCOUNT_ID معرّف حساب AWS الخاص بنا.
  • يصبح USERNAME هو اسم مستخدم المسؤول المحدد في الخطوة 3. إذا اخترنا عدم المشاركة في هذه الخطوة ، فنحن هنا نزيل كتلة العبارة الثانية (التي تحتوي على "Sid": "Allow access for Key Administrators" ).
  • تصبح REGION رمز المعرف الإقليمي الذي ننشر الخدمات إليه (على سبيل المثال ، us-west-1 ).

مع ذلك ، KMS جاهز للذهاب.

مجموعة سجل CloudWatch

بعد ذلك ، نحتاج إلى مجموعة CloudWatch Log (و / أو حاوية S3 - انظر أدناه) حيث يمكن لوكيل SSM إرسال سجلات جلسة SSH. دعونا ننشئه.

لقطة شاشة لـ AWS مع مسارات التنقل "CloudWatch" و "CloudWatch Logs" و "مجموعات السجل" و "إنشاء مجموعة السجل". لا يوجد شريط جانبي متعدد الخطوات. يحتوي الحقل الأول ، "تفاصيل مجموعة السجل" ، على ثلاثة حقول فرعية: "اسم مجموعة السجل" (تم ضبطه على "ssm-session-demo") ، و "إعداد الاحتفاظ" (تم تعيينه على "عدم انتهاء الصلاحية أبدًا" من القائمة المنسدلة) ، و "مفتاح KMS ARN - اختياري" (يتم ضبطه على قيمة مبتورة تبدأ بـ "arn: aws: kms"). الحقل الثاني ، "العلامات ،" ليس له علامات.
إنشاء مجموعة سجل "CloudWatch Logs".

لاحظ حقل ARN الخاص بمفتاح KMS: تزودنا AWS بالقيمة المطلوبة هنا بعد إنشاء المفتاح في الخطوة 5 من قسم KMS.

(إذا لم نقم بربط السياسة الصحيحة بمفتاح KMS الخاص بنا سابقًا ، مما يسمح لخدمة CloudWatch Logs باستخدام المفتاح ، فسوف نتلقى خطأً متعلقًا بمفتاح KMS في هذه المرحلة.)

تخزين سجلات SSH في حاوية S3

لتخزين سجلات النشاط مع S3 بدلاً من - أو بالإضافة إلى - سجلات CloudWatch ، نحتاج إلى إضافة هذه الأذونات إلى ملف تعريف مثيل EC2 الخاص بنا كسياسة منفصلة (أو دمجها يدويًا مع أذونات أخرى قد نحتاج إلى ربطها):

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::BUCKET_NAME/*" }, { "Effect": "Allow", "Action": [ "s3:GetEncryptionConfiguration" ], "Resource": "*" }, { "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": "*" } ] }

في المقتطف أعلاه ، تأكد من استبدال العنصر النائب BUCKET_NAME .

الآن بعد أن أعددنا مكانًا ما لتخزين السجلات - سجلات CloudWatch أو حاوية S3 أو كليهما - نحن مستعدون للاستفادة من جلسات SSH.

AWS Systems Manager Session Manager

هذه هي الخطوة الأساسية الأخيرة ، حيث نقوم بتهيئة الوصول الآمن إلى جهاز Linux الخاص بنا لمراقبة جلسة SSH وتسجيلها. سنبدأ من لوحة معلومات مدير الجلسة.

لقطة شاشة للوحة معلومات AWS Session Manager مع أقسام ، "كيف تعمل" ، "لماذا تستخدم Session Manager؟" ، "البدء" ، "المزيد من الموارد" ، وفي الزاوية العلوية اليمنى ، "ابدأ جلسة". يحتوي القسم الأخير على زر برتقالي "ابدأ الجلسة" وزر أبيض "تكوين التفضيلات".
الخطوة 1: الشروع في استخدام لوحة القيادة.

في لوحة القيادة ، انقر على الزر الأبيض "تكوين التفضيلات" في أعلى يمين مربع "بدء جلسة" لتمكين تسجيل الجلسة.

في صفحة التفضيلات ، سنجد أقسامًا متعددة يمكننا استكشافها ، ولكن سينصب تركيزنا على دفق سجلات جلسة SSH إلى CloudWatch أو S3 للسماح لنا برؤية ما يحدث بسرعة داخل جهاز Linux الخاص بنا.

لقطة شاشة لقسم AWS بعنوان "تسجيل CloudWatch." إعداده الأول ، والذي يُطلق عليه أيضًا "تسجيل CloudWatch" ، يحتوي على مربع اختيار يسمى تمكين تم تحديده. الإعداد التالي ، "اختر خيار التسجيل المفضل لديك" ، تم تحديد "سجلات جلسة البث (مستحسن)" بدلاً من "تحميل سجلات الجلسة". يحتوي الإعداد التالي ، "فرض التشفير" ، على مربع اختيار بعنوان "السماح فقط لمجموعات سجل CloudWatch المشفرة" والذي تم تحديده. الإعداد النهائي ، "مجموعة سجل CloudWatch" ، حدد "اختر اسم مجموعة سجل من القائمة" بدلاً من "أدخل مجموعة سجل في مربع النص". تحتها قائمة ، "مجموعات سجل CloudWatch" مع تحديد "ssm-session-demo". يحتوي على أعمدة مقابلة "تشفير" (تم ضبطه على "مشفر") ، و "أحداث تنتهي صلاحيتها بعد" (تم الضبط على "عدم انتهاء الصلاحية أبدًا") ، و "فلاتر متري" (تم ضبطها على 0) ، و "وحدات بايت مخزنة" (تم ضبطها على 0) ، و الطابع الزمني "وقت الإنشاء".
الخطوة 2 أ: تمكين تسجيل CloudWatch.

بعد قسم "تسجيل CloudWatch" ، يوجد قسم "تسجيل S3" حيث يمكننا تحديد الحاوية.

لقطة شاشة لقسم AWS بعنوان "S3 logging". إعدادها الأول ، "إرسال سجلات الجلسة إلى S3" ، يحتوي على مربع اختيار يسمى "تمكين" يتم تحديده. إعداده التالي ، "فرض التشفير" ، يحتوي على مربع اختيار بعنوان "السماح فقط لحاويات S3 المشفرة" التي تم تحديدها. الإعداد التالي ، "اختر حاوية S3" ، تم تحديد "اختيار اسم مجموعة من القائمة" بدلاً من "أدخل اسم مجموعة في مربع النص." أسفل ذلك ، يتم تحديد "ssm-session-demo" من القائمة المنسدلة. الحقل الأخير ، "بادئة مفتاح S3 - اختياري" ، فارغ.
الخطوة 2 ب: تمكين تسجيل S3.

بمجرد تكوين SSH logging ، يمكننا SSH في جهاز Linux الخاص بنا وتنفيذ بعض الأوامر لمعرفة ما إذا كان يتم التقاط النشاط أم لا.

لذا ، لنبدأ جلسة. في نفس الصفحة ، سنجد علامة تبويب "الجلسات" حيث يمكننا بدء الجلسة. سيؤدي النقر فوق الزر "بدء الجلسة" إلى منحنا قائمة بأجهزة EC2 التي يمكننا من خلالها بدء جلسة:

لقطة شاشة لـ AWS مع مسارات التنقل AWS Systems Manager ، ومدير الجلسة ، وابدأ جلسة. لم يتم ملء استعلام مربع بحث "مثيلات الهدف" وظهرت نتيجة واحدة فقط ، مع تعيين "اسم المثيل" على "عرض SSM".
الخطوة 3: تحديد مثيل EC2 الخاص بنا لبدء جلسة SSH مع.

إذا لم نرى مثيل EC2 Linux الخاص بنا في القائمة ، فيجب علينا التحقق مما إذا كان في حالة تشغيل ولديه أذونات IAM المرتبطة به التي وصفناها سابقًا.

التعامل مع وكيل SSM خطأ "لا يدعم سجلات البث"

في حال تلقينا خطأً يفيد بأن إصدار وكيل SSM المثبت على جهاز EC2 الخاص بنا لا يدعم تدفق سجلات CloudWatch ، فلا داعي للقلق. هناك طريقة غير مؤلمة لإصلاح هذا.

لقطة شاشة لرسالة خطأ AWS بنص أبيض على خلفية حمراء. توجد علامة X محاطة بدائرة بجوار الرسالة ، "إصدار وكيل SSM المثبت على هذا المثيل لا يدعم سجلات التدفق إلى CloudWatch. إما تحديث وكيل SSM إلى أحدث إصدار ، أو تعطيل خيار سجلات البث في تفضيلاتك."
خطأ "إصدار وكيل SSM قديم" محتمل.

لتحديث وكيل SSM ، نحتاج إلى الانتقال إلى Run Command في اللوحة اليمنى لخدمة AWS Systems Manager .

لقطة شاشة للوحة معلومات AWS Systems Manager Run Command مع أقسام ، "كيف تعمل" ، "الميزات والفوائد" ، "وقائع الاستخدام ومدونات المدونة" ، "التوثيق" ، وفي الزاوية العلوية اليمنى ، "إدارة مثيلاتك". يحتوي هذا القسم على زر "تشغيل أمر" برتقالي اللون فقط.
الخطوة 1: البدء بلوحة القيادة "Run Command".

بمجرد أن نكون هناك ، يمكننا النقر فوق الزر البرتقالي "تشغيل أمر" ، مما يؤدي إلى صفحة جديدة حيث يمكننا ملء بعض المعلمات.

لقطة شاشة لـ AWS مع مسارات التنقل AWS Systems Manager و Run Command وتشغيل أمر. يسرد مربع البحث المسمى "مستند الأمر" 10 صفوف (الصفحة 4 من أكثر من 5) ، مع تحديد واحد يسمى "AWS-UpdateSSMAgent". لديها "أمازون" في عمود "المالك" و "Windows ، Linux" في عمود "أنواع النظام الأساسي". يوجد حقل في الجزء السفلي ، "إصدار المستند" ، به "1 (افتراضي)" محدد من القائمة المنسدلة.
الخطوة 2: تحديد مستند الأمر.

سنبدأ بتحديد AWS-UpdateSSMAgent من القائمة.

لقطة شاشة لقسم AWS بعنوان "الأهداف". يحتوي الحقل الأول ، المسمى أيضًا "الأهداف" ، على خيارات "تحديد علامات المثيل" ، و "اختيار المثيلات يدويًا" (محدد) ، و "اختيار مجموعة موارد". يوجد في الجزء السفلي مربع بحث "مثيلات" بدون استعلام ، مع تحديد نتيجته الوحيدة ، "SSM Demo". يتم نسخ معرف المثيل المقابل في الصف إلى مربع أعلى "مثيلات" مباشرةً بعلامة X.
الخطوة 3: تحديد مثيل EC2 الذي يحتوي على وكيل SSM بحاجة إلى تحديث.

بمجرد تحديد ذلك ، سنقوم بالتمرير لأسفل حتى نرى قسم "الأهداف". هناك نحتاج إلى تحديد مثيل EC2 الذي نريد تحديث عامل SSM عليه ، ثم الضغط على زر "تشغيل" في النهاية. سيرسلنا هذا إلى صفحة يمكننا من خلالها مراقبة تقدم التحديث.

لقطة شاشة لـ AWS مع مسارات التنقل "AWS Systems Manager" و "Run Command" و "Command ID" (متبوعًا بـ GUID). يعرض القسم الأول ، "حالة الأمر" ، مؤشرات النجاح ، كما يفعل الصف الوحيد في القسم التالي ، "الأهداف والمخرجات" ، الذي يسرد مثيلًا واحدًا من وقت سابق. يوجد أيضًا قسمان غير موسعين في الجزء السفلي ، "وصف الأمر" و "معلمات الأمر".
الخطوة 4: مراقبة تقدم التحديث الخاص بنا.

يجب ألا يستغرق تحديث الوكيل أكثر من خمس دقائق. بمجرد الانتهاء من ذلك ، يجب أن نكون قادرين على إنشاء جلسة مرة أخرى في مدير الجلسة.

في هذه المرحلة ، يجب أن تبدأ جلسة SSH.

لقطة شاشة لـ AWS مع معرف الجلسة ومعرف المثيل أعلى محطة طرفية. الموجه هو "sh-4.2 $" وتم إدخال الأمرين "whoami" و "pwd" ، مع المخرجات "ssm-user" و "/ usr / bin" على التوالي.
جلسة SSH باستخدام وكيل SSM عبر AWS Systems Manager Session Manager.

بعد تنفيذ بعض الأوامر ، دعنا ننتقل إلى مجموعة سجلات CloudWatch Logs (أو حاوية S3 الخاصة بنا ، غير معروضة) وتأكد من تسجيل النشاط.

لقطة شاشة لـ AWS مع مسارات التنقل "CloudWatch" و "سجلات CloudWatch" و "مجموعات السجل" و "ssm-session-demo" ومعرف الجلسة للخطوة السابقة. القسم الوحيد هو مربع بحث ، "سجل الأحداث" ، به صفوف يحتوي كل منها على طابع زمني ورسالة بتنسيق JSON. تم توسيع إحداها لتكشف عن JSON مطبوعة بشكل جميل وبزر أبيض على اليمين بعنوان "نسخ".
يتم تسجيل أحداث سجل SSH في سجلات CloudWatch.

لدينا الآن إعداد ، مع تمكين التشفير أثناء الراحة ، وتسجيل كل أمر يتم إطلاقه في جهاز Linux الخاص بنا.

في الواقع ، قد يكون كل أمر أكثر مما نريد: سيتم تسجيل أي أسرار يتم تقديمها أو إنشاؤها أثناء الجلسة في CloudWatch أو S3 ويمكن رؤيتها من قبل أي شخص لديه الأذونات المطلوبة. لمنع ذلك ، يمكننا استخدام stty -echo; read passwd; stty echo; stty -echo; read passwd; stty echo; لكل سر نحتاج إلى تقديمه خلال الجلسة.

حل تسجيل AWS رائع لـ SSM / SSH مع تحذيرات بسيطة

يُعد Session Manager أداة مفيدة للوصول عن بُعد إلى أجهزتنا الافتراضية في AWS دون الحاجة إلى فتح المنفذ 22. في الواقع ، لا يمكننا إنشاء سجلات SSH بهذه الطريقة إذا استخدمنا إعادة توجيه المنفذ أو اتصال SSH المباشر ، كمدير الجلسة ملاحظات التوثيق.

ومع ذلك ، فإن الجمع بين مدير الجلسة وتسجيل الجلسة هو حل قوي للتحكم في النشاط ومراقبته داخل الأجهزة الافتراضية. علاوة على ذلك ، نحن لسنا مسؤولين عن استخدام خدمة مدير الجلسة. نحن ندفع فقط مقابل مثيل EC2 وسجلات CloudWatch أو حاوية S3 لتخزين السجلات.

بالنسبة للقراء الذين يفضلون مقاطع الفيديو التعليمية ، فقد قمت بتغطية إجراء مشابه جدًا بشكل أكثر شمولاً على YouTube.


مزيد من القراءة على مدونة Toptal Engineering:

  • دراسة حالة: لماذا أستخدم البنية التحتية السحابية لـ AWS لمنتجاتي