AWS CLI के माध्यम से लॉन्च किए जा रहे Amazon EC2 उदाहरण के लिए IAM भूमिका कैसे निर्दिष्ट करें?


20

मैं "aws ec2 रन-इंस्टेंस" कमांड ( AWS कमांड लाइन इंटरफेस (CLI) से ) का उपयोग करके Amazon EC2 उदाहरण लॉन्च कर रहा हूं । मैं EC2 उदाहरण के लिए IAM भूमिका सेट करना चाहता हूं जिसे मैं लॉन्च कर रहा हूं। IAM भूमिका कॉन्फ़िगर की गई है और AWS वेब UI से एक उदाहरण लॉन्च करते समय मैं इसका सफलतापूर्वक उपयोग कर सकता हूं। लेकिन जब मैं उस कमांड का उपयोग करके ऐसा करने की कोशिश करता हूं, और "--iam-इंस्टेंस-प्रोफाइल" विकल्प, यह विफल हो गया। "Aws ec2 रन-इंस्टेंस मदद" करने से मूल्य के लिए अर्न = और नाम = सबफील्ड्स का पता चलता है। जब मैं अर्न का उपयोग करने की कोशिश करता हूं तो "aws iam सूची-उदाहरण-प्रोफाइल" का उपयोग करके यह त्रुटि संदेश देता है:

क्लाइंट त्रुटि (AccessDenied) हुई: उपयोगकर्ता: arn: aws: sts :: xxxxxxxxxxxx: मान लिया गया-भूमिका / शेल / i-15c2766d प्रदर्शन के लिए अधिकृत नहीं है: iam: ListInstance -rofiles on resource: arn: aws: iam :: xxxxxxxxxxxxx: example -प्रोफ़ाइल /

(जहां xxxxxxxxxxxx मेरा AWS 12-अंकीय खाता संख्या है)

मैंने वेब UI के माध्यम से अर्न स्ट्रिंग को देखा और उसको "--iam-inst-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: inst-profile / shell" के माध्यम से रन-इंस्टेंस कमांड पर इस्तेमाल किया, और यह विफल रहा :

क्लाइंट त्रुटि (अनधिकृत रूप से) हुई: आप इस ऑपरेशन को करने के लिए अधिकृत नहीं हैं।

अगर मैं पूरी तरह से "--iam-inst-profile" विकल्प छोड़ देता हूं, तो उदाहरण लॉन्च हो जाएगा, लेकिन इसमें IAM भूमिका सेटिंग नहीं होगी जिसकी मुझे आवश्यकता है। ऐसा लगता है कि अनुमति का "--आइएम-इंस्टा-प्रोफाइल" या आईएएम डेटा तक पहुँचने के साथ कुछ करना है। मैंने AWS ग्लिच के मामले में कई बार दोहराया (वे कभी-कभी होते हैं) और कोई सफलता नहीं।

मुझे संदेह था कि शायद इस बात पर प्रतिबंध है कि IAM भूमिका वाली एक आवृत्ति को अधिक शक्तिशाली BAM भूमिका के साथ आवृत्ति लॉन्च करने की अनुमति नहीं है। लेकिन इस मामले में, मैं जिस उदाहरण में कमांड कर रहा हूं, उसी IAM की भूमिका है जिसे मैं उपयोग करने की कोशिश कर रहा हूं। "शेल" नाम दिया गया है (हालांकि मैंने एक दूसरे का उपयोग करने की भी कोशिश की, कोई भाग्य नहीं)।

  • क्या एक आईएएम भूमिका स्थापित करना एक उदाहरण से भी अनुमति नहीं है (आईएएम भूमिका क्रेडेंशियल के माध्यम से)?

  • क्या आईएएम भूमिकाओं का उपयोग करने के लिए कुछ उच्च IAM भूमिका की अनुमति की आवश्यकता है, केवल एक सादे उदाहरण को लॉन्च करने के लिए आवश्यक है?

  • क्या IAM भूमिका निर्दिष्ट करने के लिए "--iam-inst-profile" उपयुक्त तरीका है?

  • क्या मुझे अर्न स्ट्रिंग का सबसेट उपयोग करने की आवश्यकता है, या इसे किसी अन्य तरीके से प्रारूपित करना है?

  • क्या एक IAM भूमिका स्थापित करना संभव है जो किसी IAM भूमिका को एक्सेस कर सकता है (शायद एक "सुपर रूट IAM" ... यह नाम बना रहा है)?

FYI करें, सब कुछ में इंस्टेंसेस पर चलने वाला लिनक्स शामिल है। इसके अलावा, मैं यह सब एक उदाहरण से चला रहा हूं क्योंकि मैं अपने डेस्कटॉप पर इन उपकरणों को स्थापित नहीं कर सका। वह और मैं अपने IAM उपयोगकर्ता क्रेडेंशियल को किसी AWS स्टोरेज पर नहीं रखना चाहता, जैसा कि AWS द्वारा सलाह दिया गया है

उत्तर देने के बाद:

मैंने "PowerUserAccess" (बनाम "प्रशासक असफल") के लॉन्चिंग उदाहरण की अनुमति का उल्लेख नहीं किया क्योंकि मुझे एहसास नहीं था कि प्रश्न पूछे जाने के समय अतिरिक्त पहुंच की आवश्यकता थी। मैंने माना कि IAM भूमिका लॉन्च से जुड़ी "सूचना" थी। लेकिन यह वास्तव में इससे कहीं अधिक है। यह अनुमति देना है।

जवाबों:


23

अपडेट करें

माइक पोप ने AWS सिक्योरिटी ब्लॉग पर IAM रोल्स (PassRole Permission) के साथ EC2 इंस्टेंस लॉन्च करने की अनुमति देने के बारे में एक अच्छा लेख प्रकाशित किया है , जो AWS बिंदु से विषय वस्तु की व्याख्या करता है।


प्रारंभिक उत्तर

स्केपरन का उत्तर आंशिक रूप से सही (+1) है, लेकिन निम्न के रूप में थोड़ा-सा आवेग / भ्रामक है (स्पष्टीकरण टिप्पणी के लिए थोड़ा जटिल लगता है, इसलिए यह अलग उत्तर है):

IAM भूमिका के साथ EC2 उदाहरण लॉन्च करने के लिए IAM सुविधा के लिए प्रशासनिक पहुँच की आवश्यकता होती है।

यह इस तरह से सही है और अंतर्निहित समस्या की ओर इंगित करता है, लेकिन आवश्यक प्रशासनिक अनुमतियाँ सीमित हैं, इसलिए निम्नलिखित निष्कर्ष ...

क्योंकि IAM भूमिकाओं को अनुमति देता है, इसलिए स्पष्ट रूप से एक सुरक्षा समस्या है जिसे संबोधित किया जाना है। आप नहीं चाहेंगे कि IAM भूमिकाएं अनुमति में वृद्धि का साधन हों।

... थोड़ा सा भ्रामक है, संभावित सुरक्षा मुद्दे को सही तरीके से संबोधित किया जा सकता है। इस विषय को ग्रांटिंग एप्लिकेशन में संबोधित किया जाता है जो अमेज़ॅन ईसी 2 इंस्टेंस पर एडब्ल्यूएस संसाधनों तक पहुंच पर चलता है :

आप Amazon EC2 इंस्टेंस पर चलने वाले एप्लिकेशन के लिए क्रेडेंशियल्स प्रबंधित करने के लिए IAM भूमिकाओं का उपयोग कर सकते हैं। जब आप भूमिकाओं का उपयोग करते हैं, तो आपको AWS क्रेडेंशियल को Amazon EC2 उदाहरणों में वितरित करने की आवश्यकता नहीं होती है। इसके बजाय, आप उन अनुमतियों के साथ एक भूमिका बना सकते हैं, जिनके लिए आवेदन करने की आवश्यकता होगी जब वे अमेज़ॅन ईसी 2 पर चलते हैं और अन्य एडब्ल्यूएस संसाधनों पर कॉल करते हैं। जब डेवलपर्स अमेज़ॅन ईसी 2 इंस्टेंस को लॉन्च करते हैं, तो वे आपके द्वारा बनाई गई भूमिका को उदाहरण के साथ संबद्ध करने के लिए निर्दिष्ट कर सकते हैं। उदाहरण पर चलने वाले एप्लिकेशन अनुरोधों पर हस्ताक्षर करने के लिए भूमिका क्रेडेंशियल्स का उपयोग कर सकते हैं।

अब, इस्तेमाल किए गए मामले के भीतर उल्लेखित डेवलपर्स [कि] एक अमेज़न EC2 लॉन्च शुरू करते हैं , वास्तव में EC2 खुद उदाहरण हैं, जो कि कैच 22 सुरक्षा के मुद्दे को छोड़ते हुए प्रकट होता है, जिसे स्केपरन उल्लिखित किया गया था। हालांकि यह वास्तव में मामला नहीं है, जैसा कि अनुभाग में नमूना नीति द्वारा चित्रित किया गया है। अनुमतियाँ अमेज़न EC2 के साथ रोल्स का उपयोग करने के लिए आवश्यक हैं :

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:ListInstanceProfiles",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"ec2:*",
      "Resource":"*"
    }]
}

तो iam:PassRoleवास्तव में केवल IAM अनुमति की आवश्यकता होती है, और तकनीकी रूप से प्रशासनिक प्रकृति के होते हुए, यह इतना दूर नहीं है - बेशक, ऊपर नमूना नीति अभी भी सूची के माध्यम से अनुमतियों को बढ़ाने और किसी भी उपलब्ध भूमिका को पारित करने की अनुमति देगी, लेकिन इसे केवल उन भूमिकाओं को निर्दिष्ट करने से रोका जा सकता है जो हाथ में उपयोग के मामले के लिए पारित करने के लिए वांछित / सुरक्षित हैं - यह अनुभाग में उल्लिखित है जिसे कौन सी भूमिकाएं अमेजन EC2 इंस्टेंसेस (PassRole का उपयोग करके) को पारित किया जा सकता है :

आप उपयोगकर्ताओं को पहले से ही दी गई अनुमति से अधिक अनुमतियों को Amazon EC2 में एक भूमिका को पारित करने से रोकने के लिए PassRole अनुमति का उपयोग कर सकते हैं, और फिर उस भूमिका के लिए उन्नत विशेषाधिकारों के तहत चल रहे एप्लिकेशन। भूमिका नीति में, PassRole कार्रवाई की अनुमति दें और एक संसाधन निर्दिष्ट करें (जैसे कि arn: aws: iam :: 111122223333: भूमिका / ec2Roles / *) यह इंगित करने के लिए कि केवल एक विशिष्ट भूमिका या भूमिकाओं के सेट को Amazon EC2 उदाहरण में पारित किया जा सकता है ।

संबंधित नमूना नीति, उदाहरण के लिए हाथ में उपयोग के मामले से बिल्कुल मेल खाती है, अर्थात Amazon EC2 API का उपयोग करके एक भूमिका के साथ एक उदाहरण लॉन्च करने की अनुमति देता है :

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}

Iam: PassRole के बारे में जानकारी के लिए धन्यवाद। जितना मैंने पहले सीखा था, उससे कहीं अधिक विस्तार से, यह इस तरह की अनुमतियों को कॉन्फ़िगर करने से बहुत अधिक दिखाया जा सकता है।
स्केपरन

1

IAM भूमिका के साथ EC2 उदाहरण लॉन्च करने के लिए IAM सुविधा के लिए प्रशासनिक पहुँच की आवश्यकता होती है। यह तब भी लागू होता है, जब नया उदाहरण ठीक उसी भूमिका का हो जैसा कि लॉन्चिंग करते समय होता है। जिस उदाहरण से मैं लॉन्च कर रहा था, उसमें "PowerUserAccess" की अनुमति थी, जिसने एक उदाहरण लॉन्च करने की अनुमति दी, लेकिन IAM भूमिका अभिगम नहीं। एक बार जब मैंने लॉन्चिंग इंस्टेंस में अनुमति को "एडमिनिस्ट्रेटर एसे" के लिए उन्नत किया, तो यह काम कर गया।

क्योंकि IAM भूमिकाओं को अनुमति देता है, इसलिए स्पष्ट रूप से एक सुरक्षा समस्या है जिसे संबोधित किया जाना है। आप नहीं चाहेंगे कि IAM भूमिकाएं अनुमति में वृद्धि का साधन हों। लेकिन इसका मतलब यह भी है कि किसी भी IAM भूमिका को देने के लिए, लॉन्चिंग इंस्टेंस में "एडमिनिस्ट्रेटर एसे" होना चाहिए या उदाहरण के भीतर से उपयोगकर्ता की पहुंच / गुप्त कुंजी (ऐसी अनुमति के साथ) का उपयोग किया जाना चाहिए (अनुशंसित नहीं), जो किसी भी IAM भूमिका को देने की अनुमति देगा।

एक ही अनुमति के साथ एक उदाहरण लॉन्च करने में सक्षम होने के नाते (एक ही IAM भूमिका) के रूप में लॉन्चिंग कर रही उदाहरण से उपयोगी होगा, लेकिन EC2 या IAM में या तो इस स्तर की ग्रेन्युलैरिटी नहीं है, या इसे सुरक्षित रूप से सत्यापित करने का साधन नहीं है ।


1
आपके विश्लेषण / अंतर्निहित मुद्दे को सही ढंग से (+1) वर्णित किया है, लेकिन आपके निष्कर्ष थोड़े अभेद्य / भ्रामक हैं - मैंने IAM द्वारा संभावित सुरक्षा समस्या का समाधान करने के तरीके को ठीक से समझाने के लिए एक अलग उत्तर जोड़ा है ।
स्टेफेन ओपल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.