2013-11-21 7 views
14

मैं एक पूर्वनिर्धारित मशीन छवि चलाने के लिए न्यूनतम नीति को कम करने की कोशिश कर रहा हूं। छवि दो स्नैपशॉट्स पर आधारित है और मैं केवल "m1.medium" उदाहरण प्रकार लॉन्च करना चाहता हूं।ec2 के लिए न्यूनतम आईएएम नीति: रनइंस्टेंस

उस पर और this page और this article की मदद से आधार पर, मैं निम्नलिखित नीति पर काम किया:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1385026304010", 
      "Effect": "Allow", 
      "Action": [ 
       "ec2:RunInstances" 
      ], 
      "Condition": { 
       "StringEquals": { 
        "ec2:InstanceType": "m1.medium" 
       } 
      }, 
      "Resource": [ 
       "arn:aws:ec2:us-east-1::instance/*", 
       "arn:aws:ec2:us-east-1::image/ami-f1c3e498", 
       "arn:aws:ec2:us-east-1::snapshot/snap-e2f51ffa", 
       "arn:aws:ec2:us-east-1::snapshot/snap-18ca2000", 
       "arn:aws:ec2:us-east-1::key-pair/shenton", 
       "arn:aws:ec2:us-east-1::security-group/sg-6af56d02", 
       "arn:aws:ec2:us-east-1::volume/*" 
      ] 
     } 
    ] 
} 

नीति सही छवि, फोटो, सुरक्षा समूह और कुंजी जोड़ी संकीर्णता से विशिष्ट छोड़ने जबकि उदाहरण और मात्रा खुला है।

aws ec2 run-instances --dry-run \ 
    --image-id ami-f1c3e498 \ 
    --key-name shenton \ 
    --security-group-ids sg-6af56d02 \ 
    --instance-type m1.medium 

~/.aws/config इस प्रकार है:: एक सामान्य You are not authorized to perform this operation संदेश और इनकोडिंग प्राधिकरण में

[default] 
output = json 
region = us-east-1 
aws_access_key_id = ... 
aws_secret_access_key = ... 

आदेश परिणाम

मैं के रूप में here वर्णित इस प्रकार CLI उपकरण का उपयोग कर रहा हूँ, विफलता संदेश इंगित करता है कि मेरे किसी भी बयान का मिलान नहीं हुआ था और इसलिए यह कार्रवाई को अस्वीकार कर देता है।

"Resource": "*" पर बदलना इस मुद्दे को स्पष्ट रूप से हल करता है, लेकिन मैं यह समझना चाहता हूं कि ऊपर क्यों काम नहीं करता है। मुझे पूरी तरह से एहसास है कि इसमें अनुमान की कुछ डिग्री शामिल है, इसलिए मैं किसी भी विचार का स्वागत करता हूं।

उत्तर

24

मुझे अमेज़ॅन वेब सेवाओं से जेफ बार द्वारा संपर्क किया गया है और उसने मुझे यह जानने में मदद की कि समस्या क्या थी।

सबसे पहले आप निम्न कथन का उपयोग कर प्राधिकरण विफलता संदेश को डिकोड करने की जरूरत है:

$ aws sts decode-authorization-message --encoded-message 6gO3mM3p....IkgLj8ekf

यकीन IAM उपयोगकर्ता/भूमिका sts:DecodeAuthorizationMessage कार्रवाई के लिए अनुमति है सुनिश्चित करें।

प्रतिक्रिया एक और JSON इनकोडिंग शरीर जिसमें एक DecodedMessage कुंजी होती है:

{ 
    "allowed": false, 
    "explicitDeny": false, 
    "matchedStatements": { 
     "items": [] 
    }, 
    "failures": { 
     "items": [] 
    }, 
    "context": { 
     "principal": { 
      "id": "accesskey", 
      "name": "testuser", 
      "arn": "arn:aws:iam::account:user/testuser" 
     }, 
     "action": "ec2:RunInstances", 
     "resource": "arn:aws:ec2:us-east-1:account:instance/*", 
     "conditions": { ... } 
    } 
} 

context => resource के तहत यह क्या संसाधन यह नीति के खिलाफ मैच के लिए प्रयास कर रहा था दिखाई देगा; जैसा कि आप देख सकते हैं, यह एक खाता संख्या की अपेक्षा करता है। इसलिए arn documentation को इस प्रकार पढ़ा जाना चाहिए:

अन्यथा निर्दिष्ट किए जाने तक, क्षेत्र और खाता आवश्यक है।

खाता संख्या या * प्रभावित ARN की समस्या का समाधान होने में जोड़ना:

"Resource": [ 
    "arn:aws:ec2:us-east-1:*:instance/*", 
    "arn:aws:ec2:us-east-1:*:image/ami-f1c3e498", 
    "arn:aws:ec2:us-east-1:*:snapshot/snap-e2f51ffa", 
    "arn:aws:ec2:us-east-1:*:snapshot/snap-18ca2000", 
    "arn:aws:ec2:us-east-1:*:key-pair/shenton", 
    "arn:aws:ec2:us-east-1:*:security-group/sg-6af56d02", 
    "arn:aws:ec2:us-east-1:*:volume/*" 
] 
+0

एमिस के लिए अर्न नहीं ले करता है एक खाता # - तो यह या तो खाली, या है "*"। इस पोस्ट के लिए धन्यवाद - मैंने इसके बिना कभी हल नहीं किया होगा! –

+0

मैंने आपके जैसा ही किया लेकिन मेरा, प्रारंभिक विफल रहा ... समझ में नहीं आया। क्या आप अपनी पूरी पॉलिसी – Kernelv5

+0

@ शफीउलीम साझा कर सकते हैं यह वास्तव में मेरी पूरी नीति है; मुझे लगता है कि अगर यह आपके प्रश्न का उत्तर नहीं देता है, तो किसी और से पूछने के लिए स्वतंत्र महसूस करें और मुझे लिंक के साथ पिंग करें। –

संबंधित मुद्दे