2013-10-23 3 views
6

असाइन किया गया है। मेरे पास एक अमेज़ॅन ईसी 2 इंस्टेंस है जो एक सर्वर चला रहा है जिसे अपने ग्राहकों के लिए एस 3 संसाधनों को संघीय पहुंच प्रदान करने की आवश्यकता है (विंडोज़ 7/8, आईपैड, दूसरों के बीच)। अब तक, मैंने निम्नलिखित बनाया है:एक अमेज़ॅन ईसी 2 उदाहरण पर चलने वाले सी # .NET अनुप्रयोग से संघीय उपयोगकर्ताओं के लिए एसटीएस टोकन बनाना, जिसे आईएएम रोल

  • एक आईएएम भूमिका जो सर्वर को एस 3 संसाधनों और अन्य अमेज़ॅन वेब सेवाओं तक पहुंच को सीमित करती है।
  • एक आईएएम उपयोगकर्ता एसटीएस सेवाओं, अर्थात् GetFederationToken का उपयोग करने की क्षमता के साथ।

आमतौर पर, ग्राहक S3 में ऑब्जेक्ट प्राप्त करने या रखने के लिए अनुरोध का अनुरोध करेंगे, कभी भी हटाएं नहीं। तो फाइल को रखने के मामले में, क्लाइंट को सर्वर पर फ़ाइल अपलोड करने और सर्वर से इसे S3 पर अग्रेषित करने के बजाय, मैं क्लाइंट के लिए उचित S3 बाल्टी में फ़ाइल डालने के लिए अस्थायी पहुंच प्रमाण-पत्र प्रदान करना चाहता हूं ।

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:*" 
     ], 
     "Resource": "arn:aws:s3:::devtestbucket/*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ "sqs:*" ], 
     "Resource": "arn:aws:sqs:us-west-2::dev-*"  
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ "dynamodb:*" ], 
     "Resource": "arn:aws:dynamodb:us-west-2::dev-*"  
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ "sts:*" ], 
     "Resource": "*"  
    } 
    ] 
} 

और अनुसूचित जनजातियों के टोकन जारीकर्ता IAM उपयोगकर्ता नीति है:

{ 
    "Statement": [ 
    { 
     "Action": [ 
     "sts:GetFederationToken" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:sts:::federated-user/*" 
     ] 
    }, 
    { 
     "Action": [ 
     "s3:*" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:s3:::devtestbucket" 
     ] 
    } 
    ] 
} 

मेरे सर्वर साइड कोड में, मैं एसटीएस ग्राहक बनाने

यहाँ EC2 उदाहरण IAM भूमिका लगता है कि है , फेडरेशन टोकन अनुरोध और GetFederationToken कॉल निम्नानुसार करें:

var stsClient = new AmazonSecurityTokenServiceClient(stsTokenIssuerAwsAccessKeyId, stsTokenIssuerAwsSecretAccessKey); 

    var request = new GetFederationTokenRequest 
    { 
     Name = GenerateIamFederatedUserName(), // I know this is correct 
     DurationSeconds = (int)TimeSpan.FromHours(6).TotalSeconds, 
     Policy = GenerateSTSPolicy(objectPrefix, permittedActions) // This works as expected too 
    }; 


    var fedTokenResponse = stsClient.GetFederationToken(request); 

मैं shar नहीं कर सकता ई जेनरेट * कार्यों के कार्यान्वयन, लेकिन मैं उन कामों को जानता हूं।

यहां अजीब चीज है। यदि मैं आईएएम उपयोगकर्ता क्रेडेंशियल्स का उपयोग करता हूं जो किसी एक्सेस पॉलिसी वाले उपयोगकर्ता से बंधे हैं जो ऊपर दिखाए गए ईसी 2 इंस्टेंस भूमिका की तरह दिखता है, तो सब कुछ अपेक्षित काम करता है और ग्राहक सभी अपेक्षित एस 3 क्रियाएं करने में सक्षम होते हैं।

तो इस पृष्ठभूमि के साथ, मेरे प्रश्न हैं: क्या एक ईसी 2 उदाहरण पर एक आवेदन दिया जा सकता है जिसे एक विशिष्ट भूमिका दी गई है, फिर भी अपने ग्राहकों को संघीय पहुंच प्रदान करती है? यदि हां, तो उपरोक्त नीतियां उन एडब्ल्यूएस कार्यों को एप्लिकेशन पहुंच प्रदान करने के लिए सही हैं, अर्थात् एसटीएस संघीय टोकन का अनुरोध और सेवा करना जो एस 3 संसाधनों तक पहुंच सकता है? यदि नहीं, तो इस तरह की पहुंच की अनुमति देने के लिए उन्हें कैसे संशोधित किया जाना चाहिए?

उत्तर

3

इस परिदृश्य को काम करने के लिए, मुझे पॉलिसी के एसटीएस गेटफेडरेशन टोकन हिस्से को अपनी नीति में अलग करना पड़ा।

एसटीएस नीति:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Action": [ 
     "sts:GetFederationToken" 
     ], 
     "Sid": "Stmt1382573256000", 
     "Resource": [ 
     "*" 
     ], 
     "Effect": "Allow" 
    } 
    ] 
} 

S3 पहुँच नीति:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Action": [ 
     "s3:List*" 
     ], 
     "Sid": "Stmt1382573312476", 
     "Resource": [ 
     "arn:aws:s3:::devtestbucket" 
     ], 
     "Effect": "Allow" 
    }, 
    { 
     "Action": [ 
     "s3:*" 
     ], 
     "Sid": "Stmt1382573312000", 
     "Resource": [ 
     "arn:aws:s3:::devtestbucket/*" 
     ], 
     "Effect": "Allow" 
    } 
    ] 
} 

सुनिश्चित नहीं हैं कि वास्तव में ऐसा क्यों है तो, वहाँ 2 नीतियों, एसटीएस के लिए और एक अन्य एडब्ल्यूएस सेवाओं के लिए होना था मुकदमा। यदि कोई पीछे कारण बता सकता है कि क्यों एक की बजाय दो नीतियां होनी चाहिए, तो यह बहुत अच्छा होगा।

उम्मीद है कि यह किसी की मदद करेगा।

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