ما هي أفضل طريقة تمرير أوس التفويض بيانات المستخدم إلى EC2 سبيل المثال ؟

StackOverflow https://stackoverflow.com/questions/640838

سؤال

لدي وظيفة تجهيز البنية على أساس أوس الذي يتطلب EC2 الاستعلام S3 SQS.من أجل تشغيل مثيلات من الوصول إلى API تفويض يتم إرسال بيانات المستخدم (-و) في شكل ترميز base64 قذيفة النصي.على سبيل المثال:

$ cat ec2.sh
...
export AWS_ACCOUNT_NUMBER='1111-1111-1111'
export AWS_ACCESS_KEY_ID='0x0x0x0x0x0x0x0x0x0'
...
$ zip -P 'secret-password' ec2.sh
$ openssl enc -base64 -in ec2.zip

كثير من الحالات يتم إطلاق...

$ ec2run ami-a83fabc0 -n 20 -f ec2.zip

كل مثيل يترجم و يفك شفرة ec2.zip باستخدام 'سرية كلمة السر' الذي هو ترميز-الثابت في التهيئة النصي.على الرغم من أنه لا عمل لدي مشاكل مع بلدي النهج.

  1. 'الرمز البريدي P' غير آمنة جدا
  2. كلمة السر هي ترميز-الثابت في المقام (دائما 'سرية كلمة السر')

الطريقة هي مشابهة جدا إلى وصفه هنا

هل هناك أكثر أناقة أو قبول النهج ؟ باستخدام gpg لتشفير بيانات اعتماد تخزين المفتاح الخاص على سبيل المثال فك تشفير وهو نهج أفكر الآن ولكن أنا على علم من أي محاذير.هل يمكنني استخدام أوس keypairs بين مباشرة ؟ أنا في عداد المفقودين بعض السوبر جزء واضح من API ؟

هل كانت مفيدة؟

المحلول

يمكنك تخزين بيانات الاعتماد على آلة (أو تحويل ، ثم إزالتها.)

يمكنك نقل بيانات الاعتماد عبر قناة آمنة (على سبيل المثالباستخدام scp مع عدم التفاعلية المصادقة على سبيل المثالزوج المفاتيح) بحيث أنك لن تحتاج إلى إجراء أي عرف التشفير (فقط تأكد من أن الأذونات بشكل صحيح تعيين 0400 على ملف المفتاح في جميع الأوقات ، على سبيل المثالتعيين الأذونات على الملفات الرئيسية واستخدام scp -p)

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


تحرير

هل تعتبر parameterizing الخاص بك AMI, تتطلب أولئك الذين مثيل عامي أولا ملء بيانات المستخدم (ec2-run-instances -f user-data-file) مع AWS المفاتيح ؟ الخاص بك عامي ثم حيوي استرداد هذه لكل المعلمات سبيل المثال من http://169.254.169.254/1.0/user-data.


التحديث

حسنا, هنا يذهب الأمن في التفكير مقارنة بين نهج مختلفة تناقش حتى الآن:

  1. أمن البيانات عند المخزنة في عامي user-data غير مشفرة
    • منخفضة
    • النص الواضح البيانات في متناول أي المستخدم الذي تمكن من تسجيل الدخول إلى AMI و الوصول إلى telnet, curl, wget, ، وما إلى ذلك.(يمكن الوصول إلى النص الواضح http://169.254.169.254/1.0/user-data)
    • كنت عرضة الوكيل طلب الهجمات (على سبيل المثالالمهاجم يسأل أباتشي التي قد أو قد لا يكون قيد التشغيل في عامي للوصول إلى النص الواضح http://169.254.169.254/1.0/user-data)
  2. أمن البيانات عند المخزنة في عامي user-data و مشفرة (أو decryptable) مع الحصول عليها بسهولة الرئيسية
    • منخفضة
    • سهل الحصول عليها مفتاح (كلمة المرور) قد تشمل:
      • مفتاح القرص الثابت تلوينها في البرنامج النصي داخل أبي (أين أبي يمكن الحصول عليها عن طريق مهاجم)
      • مفتاح القرص الثابت تلوينها في البرنامج النصي على عامي نفسها ، حيث أن النص قابل للقراءة من قبل أي المستخدم الذي تمكن من تسجيل الدخول إلى AMI
      • أي المعلومات التي يمكن الحصول عليها بسهولة مثل المفاتيح العامة ، الخ.
      • أي المفتاح الخاص (العامة الرئيسية يمكن الحصول عليها بسهولة)
    • نظرا بسهولة الحصول على مفتاح (كلمة المرور) ، نفس المشاكل التي تم تحديدها في النقطة 1 تطبيقها وهي:
      • فك تشفير البيانات في متناول أي المستخدم الذي تمكن من تسجيل الدخول إلى AMI و الوصول إلى telnet, curl, wget, ، وما إلى ذلك.(يمكن الوصول إلى النص الواضح http://169.254.169.254/1.0/user-data)
      • كنت عرضة الوكيل طلب الهجمات (على سبيل المثالالمهاجم يسأل أباتشي التي قد أو قد لا يكون قيد التشغيل على عامي على و إلى الأمام المشفرة http://169.254.169.254/1.0/user-data, ulteriorly descrypted مع سهولة الحصول عليها مفتاح)
  3. أمن البيانات عند المخزنة في عامي user-data و مشفرة لا يمكن الحصول عليها بسهولة الرئيسية
    • متوسط
    • البيانات المشفرة في متناول أي المستخدم الذي تمكن من تسجيل الدخول إلى AMI و الوصول إلى telnet, curl, wget, ، وما إلى ذلك.(يمكن الوصول المشفرة http://169.254.169.254/1.0/user-data)
      • محاولة فك تشفير البيانات المشفرة ثم يمكن إجراؤها باستخدام هجمات القوة الغاشمة
  4. أمن البيانات عند المخزنة على AMI في موقع آمن (أي قيمة مضافة من أجل أن تكون مشفرة)
    • أعلى
    • البيانات لا يمكن الوصول إليها إلا مستخدم واحد, المستخدم الذي يتطلب بيانات من أجل العمل
      • على سبيل المثالملف يملكها المستخدم:المستخدم مع قناع 0600 أو 0400
    • المهاجم يجب أن تكون قادرة على انتحال صفة مستخدم معين من أجل الوصول إلى البيانات
      • أمنية إضافية طبقات ، مثل حرمان المستخدم مباشرة تسجيل الدخول (الحاجة إلى تمرير من خلال root التفاعلية الانتحال) يحسن الأمن

لذلك أي الطريقة التي تنطوي على عامي user-data ليست الأكثر أمانا لأن الوصول إلى أي المستخدم على الجهاز (أضعف نقطة) التنازلات البيانات.

هذا يمكن تخفيفها إذا S3 وثائق التفويض المطلوب فقط لفترة محدودة من الوقت (أيخلال عملية النشر فقط) ، إذا AWS سمح لك بالكتابة أو إزالة المحتويات من user-data عند الانتهاء من ذلك (ولكن هذا لا يبدو أن هذا هو الحال.) بديل سيكون إنشاء المؤقتة S3 التفويض لمدة من عملية النشر ، إذا كان ذلك ممكنا (المساس بيانات الاعتماد هذه ، user-data, بعد عملية النشر هو الانتهاء بيانات تبطل مع AWS, لم يعد يشكل تهديدا أمنيا.)

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

نصائح أخرى

كتبت مقالا دراسة أساليب مختلفة من تسريب أسرار إلى المثال EC2 آمن و إيجابيات وسلبيات كل منها.

http://www.shlomoswidler.com/2009/08/how-to-keep-your-aws-credentials-on-ec2.html

أفضل طريقة هي استخدام سبيل المثال ملامح.الفكرة الأساسية هي:

  • إنشاء مثيل الشخصي
  • إنشاء جديد IAM دور
  • تعيين السياسات التي تم إنشاؤها سابقا الدور ، على سبيل المثال:

    { "بيان":[ { "سيد":"Stmt1369049349504", "العمل":"sqs:", "تأثير":"السماح" ، "الموارد":"" } ] }

  • مشارك بدور سبيل المثال الشخصي معا.

  • عند بدء تشغيل جديد EC2 سبيل المثال ، تأكد من توفر على سبيل المثال اسم ملف التعريف.

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

كاملة سبيل المثال مأخوذ من بوتو-المستخدم في القائمة البريدية:

أولا عليك إنشاء سلمان وثيقة السياسة العامة التي تمثل ما الخدمات والموارد IAM الدور يجب أن يكون لديك حق الوصول إلى.على سبيل المثال, هذه سياسة منح جميع S3 الإجراءات دلو "my_bucket".يمكنك استخدام أي سياسة المناسب للتطبيق الخاص بك.

BUCKET_POLICY = """{
  "Statement":[{
    "Effect":"Allow",
    "Action":["s3:*"],
    "Resource":["arn:aws:s3:::my_bucket"]}]}"""

تحتاج إلى إنشاء مثيل الشخصي في IAM.

import boto
c = boto.connect_iam()
instance_profile = c.create_instance_profile('myinstanceprofile')

مرة واحدة لديك سبيل المثال الشخصي ، تحتاج إلى إنشاء دور ، إضافة إلى دور مثيل الشخصية و ربط السياسة مع الدور.

role = c.create_role('myrole')
c.add_role_to_instance_profile('myinstanceprofile', 'myrole')
c.put_role_policy('myrole', 'mypolicy', BUCKET_POLICY)

الآن يمكنك استخدام هذا المثال الشخصي عند إطلاق سبيل المثال:

ec2 = boto.connect_ec2()
ec2.run_instances('ami-xxxxxxx', ..., instance_profile_name='myinstanceprofile')

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

http://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html

مثل الآخرين قد أشار إلى هنا أنت لا تحتاج إلى تخزين أوس الاعتماد على EC2 سبيل المثال ، عن طريق استخدام IAM أدوار - https://aws.amazon.com/blogs/security/a-safer-way-to-distribute-aws-credentials-to-ec2/.وأود أن أضيف أنه يمكنك استخدام نفس الأسلوب أيضا تخزين آمن غير AWS التفويض لك EC2 سبيل المثال ، مثل يقول إذا كان لديك بعض db تفويض كنت تريد أن تبقى آمنة.حفظ غير aws الاعتماد على S3 Bukcet ، واستخدام IAM دور للوصول إلى هذا الدلو.يمكنك أن تجد معلومات أكثر تفصيلا عن ذلك هنا - https://aws.amazon.com/blogs/security/using-iam-roles-to-distribute-non-aws-credentials-to-your-ec2-instances/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top