2014-09-06 8 views
12

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

{ 
    "Effect": "Allow", 
    "Action": ["s3:PutObject","s3:GetObject"], 
    "Resource": [ 
     "arn:aws:s3:::mybucket/myappfolder/${cognito-identity.amazonaws.com:sub}*" 
    ] 
} 

लेकिन जब मैं एडब्ल्यूएस iOS SDK का v2 का उपयोग कर अपलोड करने की कोशिश मैं एक पहुँच से मना कर त्रुटि मिलती है।

यदि मैं ${cognito-identity.amazonaws.com:sub} को identityId मान के साथ संसाधन के अंतिम पथ घटक को संशोधित करने के लिए संशोधित करता हूं तो मैं एसडीके के AWSCognitoCredentialsProvider से काम कर रहा हूं।

{ 
    "Effect": "Allow", 
    "Action": ["s3:PutObject","s3:GetObject"], 
    "Resource": [ 
     "arn:aws:s3:::mybucket/myappfolder/us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx*" 
    ] 
} 

मेरे समझ थी कि इन एक ही बात करने के लिए समानता चाहिए। मैं अपने नीति में कुछ याद आ रही है, या मैं अपने अपलोड अनुरोध में एक अलग पथ का उपयोग किया जाना चाहिए?

** अद्यतन **

मैं मूल रूप से आईओएस में इस समस्या है, तो आज रात मैं Node.js में ही बात कर की कोशिश की और परिणाम समान है था। यहाँ सरल कोड मैं नोड में उपयोग कर रहा हूँ है:

var s3 = new AWS.S3(); 

AWS.config.region = 'us-east-1'; 

AWS.config.credentials = new AWS.CognitoIdentityCredentials(AWSParams); 

AWS.config.credentials.get(function (err) { 

    if (!err) { 

     console.log("Cognito Identity Id: " + AWS.config.credentials.identityId); 

     var bucketName = 'ch123_test_bucket'; 

     var keyName = AWS.config.credentials.identityId + '.txt'; 

     var params = {Bucket: bucketName, Key: keyName, Body: 'Hello World!'}; 

     s3.putObject(params, function (err, data) { 
      if (err) 
       console.log(err) 
      else 
       console.log("Successfully uploaded data to " + bucketName + "/" + keyName); 
     }); 
} 

और मैं एक ही परिणाम है कि मैं iOS के साथ मिल मिलती है: जब तक कि मैं IAM नीति में स्पष्ट cognito आईडी आपूर्ति एपीआई 403

के साथ प्रतिक्रिया

मैं बहुत न्यूनतम करने के लिए नीचे मेरी IAM नीति छीन लिया है। यह काम नहीं करता:

{ 
    "Statement": [ 
    { 
    "Effect": "Allow", 
    "Action": ["s3:PutObject","s3:GetObject"], 
    "Resource": [ 
     "arn:aws:s3:::ch123_test_bucket/${cognito-identity.amazonaws.com:sub}*" 
     ] 
    } 
] 
} 

यह करता है:

{ 
"Statement": [ 
    { 
    "Effect": "Allow", 
    "Action": ["s3:PutObject","s3:GetObject"], 
    "Resource": [ 
     "arn:aws:s3:::ch123_test_bucket/us-east-1:68a5dc49-6cc7-4289-8257-d3d5636f7034*" 
    ] 
    } 
] 
} 

मैं नहीं दिख रहा है मैं यहाँ क्या याद कर रहा हूँ ... केवल प्रलेखन मैं हमेशा ढूँढने में सक्षम किया गया है पता चलता वही उदाहरण संसाधन मान जो मैं उपयोग कर रहा हूं।

+0

बस स्पष्ट होने के लिए, आपके द्वारा शामिल पहली नीति दूसरे से मेल नहीं खाती है। क्या आप वाकई वही हैं? क्या आप अपने ऐप में उपयोग कर रहे कोड को शामिल कर सकते हैं? क्या आप ट्रांसफर मैनेजर का उपयोग कर रहे हैं? –

+0

@BobKinney मैंने समस्या का वर्णन करने के लिए एक साधारण node.js उदाहरण दिखाने के लिए अपना प्रश्न अपडेट किया है। – ChrisH

+0

@ChrisH, अपने विस्तृत प्रश्न के लिए धन्यवाद। मेरे पास सिर्फ एक टिप्पणी और एक सवाल है। मेरे टिप्पणी: इस लाइन 'वर S3 = नए एडब्ल्यूएस।एस 3(); 'क्रेडेंशियल सेट करने के बाद होना चाहिए (तीसरी पंक्ति में), अन्यथा, त्रुटियां घटित होंगी। और, सवाल यह है कि: आपने जो लिखा है वह अनधिकृत उपयोगकर्ताओं के लिए है, आप प्रमाणित लोगों के लिए ऐसा कैसे करेंगे? धन्यवाद! – securecurve

उत्तर

10

दुर्भाग्य से वर्तमान में नीति चर के साथ संयोजन में कॉग्निटो कंसोल के माध्यम से उत्पन्न भूमिकाओं के साथ एक मुद्दा है। निम्नलिखित नीति चर सुनिश्चित करने के लिए शामिल करने के लिए अपने भूमिकाओं की पहुँच नीति अपडेट करें सही ढंग से मूल्यांकन किया जाता है:

"Version": "2012-10-17" 

2014-09-16 अपडेट: हम नई के लिए इस समस्या को दूर करने के लिए अमेज़न cognito कंसोल को अद्यतन किया है पहचान पूल निर्माण विज़ार्ड के माध्यम से बनाई गई भूमिकाएं। मौजूदा भूमिकाओं अभी भी संशोधन ऊपर बताया गया है बनाने के लिए की आवश्यकता होगी।

+1

यह महत्वपूर्ण था, मैंने इसे देखने में 3 घंटे बिताए ... बहुत बहुत धन्यवाद! आपको ** वास्तव में ** एंड्रॉइड पर डायनेमो डीबी के लिए गाइड [सही होना चाहिए) (http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/dynamodb_om.html) क्योंकि यह वह है जिसका मैंने पालन किया और वास्तव में, यह नहीं करता इस संस्करण क्षेत्र में नहीं है! –

+0

@Dadou मुद्दों के लिए क्षमा चाहते हैं। इसका कारण यह नहीं है कि इसमें संस्करण नहीं है क्योंकि वहां सूचीबद्ध नीति की आवश्यकता नहीं है क्योंकि यह नीति चर का उपयोग नहीं करता है। –

0

आप पिछले स्लेश याद कर रहे हैं।

{ 
    "Effect": "Allow", 
    "Action": ["s3:PutObject","s3:GetObject"], 
    "Resource": [ 
     "arn:aws:s3:::mybucket/cognito/myappfolder/${cognito-identity.amazonaws.com:sub}/*" 
    ] 
} 

यह भी article पर विचार करने का प्रयास करें।

+1

धन्यवाद लेकिन पिछला '/' कोई फर्क नहीं पड़ता है। आपके द्वारा लिंक किए गए SO प्रश्न जो मैंने पहले ही सोचा है ... और सुझाव देता है कि मेरी आईएएम नीति काम करनी चाहिए। – ChrisH

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