10

मैं एस 3 आईएएम नीति का उपयोग करके पेपरक्लिप के साथ काम करने में असमर्थ हूं। मुझे सीधे jQuery अपलोड (कोई पेपरक्लिप) के साथ समस्याएं भी हैं। मेरा परिदृश्य इस प्रकार है, मेरे पास एक ऐसा एप्लिकेशन है जिसमें कई साइटें होंगी। प्रत्येक साइट की अपनी बाल्टी होगी और केवल अपनी बाल्टी तक पहुंचने में सक्षम होना चाहिए, कोई और नहीं। IAM Example Policies प्रलेखन बिल्कुल बताता है कि मैं "उदाहरण: प्रत्येक आईएएम उपयोगकर्ता को बाल्टी में किसी फ़ोल्डर में पहुंचने की अनुमति देता हूं" के तहत क्या करना चाहता हूं। मेरे पास एप्लिकेशन के लिए एक आईएएम समूह स्थापित है और समूह में एक उपयोगकर्ता प्रति साइट है। ये आईएएम उपयोगकर्ता समूह से संबंधित हैं।पेपरक्लिप और आईएएम नीतियों का उपयोग करके अमेज़ॅन में फ़ाइलों को अपलोड करते समय एक्सेस अस्वीकार

{ 
    "Version":"2012-10-17", 
    "Statement":[{ 
     "Effect":"Allow", 
     "Action":[ 
      "s3:PutObject", 
      "s3:GetObject", 
      "s3:GetObjectVersion", 
      "s3:DeleteObject", 
      "s3:DeleteObjectVersion" 
     ], 
     "Resource":"arn:aws:s3:::my-app/${aws:username}/*" 
     } 
    ] 
} 

यहाँ बाल्टी पर मेरे CORS विन्यास, निश्चित रूप से देव के लिए, यह नीचे बाद में लॉक हो जाएगा:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>*</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

यहाँ मेरी पेपरक्लिप सेटिंग नहीं है समूह पर नीति इस प्रकार है:

has_attached_file :background_image, 
        storage: :s3, 
        s3_credentials: { 
        access_key_id: "xxx", 
        secret_access_key: "xxx" 
        }, 
        bucket: "my-app", 
        s3_permissions: "public-read", 
        path: "/background_images/:id/:filename" 

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

संपादित करें: स्पष्टीकरण।

संपादित 2: अंतिम समाधान

यहाँ मेरा अंतिम IAM नीति this article पर आधारित है:

{ 
"Version":"2012-10-17", 
"Statement": [ 
    { 
    "Sid": "AllowUserToSeeBucketListInTheConsole", 
    "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], 
    "Effect": "Allow", 
    "Resource": ["arn:aws:s3:::*"] 
    }, 
    { 
    "Sid": "AllowRootAndHomeListingOfCompanyBucket", 
    "Action": ["s3:ListBucket"], 
    "Effect": "Allow", 
    "Resource": ["arn:aws:s3:::my-app"], 
    "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}} 
    }, 
    { 
    "Sid": "AllowListingOfUserFolder", 
    "Action": ["s3:ListBucket"], 
    "Effect": "Allow", 
    "Resource": ["arn:aws:s3:::estimator-app"], 
    "Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}} 
    }, 
    { 
    "Sid": "AllowAllS3ActionsInUserFolder", 
    "Effect": "Allow", 
    "Action": ["s3:*"], 
    "Resource": ["arn:aws:s3:::my-app/home/${aws:username}/*"] 
    } 
] 
} 

और मेरे अद्यतन पेपरक्लिप सेटिंग्स:

has_attached_file :background_image, 
        storage: :s3, 
        s3_credentials: { 
         access_key_id: "xxx", 
         secret_access_key: "xxx" 
        }, 
        bucket: "estimator-app", 
        s3_permissions: "public-read", 
        path: "/home/my_s3_username/background_images/:id/:filename" 

यह महत्वपूर्ण था शामिल करने के लिए पेपरक्लिप पथ में उपयोगकर्ता नाम। मुझे लगता है कि अमेज़ॅन प्रमाण पत्र से अनुमान लगाएगा लेकिन ऐसा नहीं है।

उत्तर

15

क्योंकि आप अपलोड की गई वस्तुओं पर अनुमतियां सेट करने का प्रयास कर रहे हैं, तो आपको अपने आईएएम उपयोगकर्ताओं को s3:PutObjectAcl अनुमति देने की भी आवश्यकता है।

+0

मैंने "एक्शन" को अनुमतियां अपडेट की: "s3: *" बस परीक्षण करने के लिए। यह काम करता है अगर मैं "संसाधन" को भी अपडेट करता हूं: "arn: aws: s3 ::: my-app/*"। जिस मिनट में मैंने $ {aws: username} डाल दिया है, मुझे एक्सेस अस्वीकार कर दिया गया है। हालांकि टिप के लिए धन्यवाद, मैं इसे अनुमतियों में रखना सुनिश्चित कर दूंगा। संपादित करें: वास्तव में ऐसा प्रतीत होता है कि मेरा संसाधन कुछ भी है लेकिन बाल्टी की जड़ है जिसे मैं अपलोड करने में असमर्थ हूं। –

+0

आपकी आईएएम उपयोगकर्ता नीति सही प्रतीत होती है क्योंकि आप पहले से ही पॉलिसी में सही 'संस्करण' का उपयोग कर रहे हैं। आपके उपयोगकर्ता को वास्तव में कैसे नामित किया जाता है और आप जिस S3 पथ को अपलोड करने का प्रयास कर रहे हैं वह क्या है? ('$ {aws: username} 'उस उपयोगकर्ता के लिए [दोस्ताना नाम] (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html#Identifiers_FriendlyNames) में अनुवाद करता है)। आपके उदाहरण से पथ 'background_images' लगता है लेकिन क्या आपके आईएएम उपयोगकर्ता को' background_images' भी कहा जाता है? – dcro

+0

उपयोगकर्ता स्थानीयहोस्ट-अनुमानक-ऐप है और समूह अनुमानक-ऐप है। मुझे आश्चर्य है कि [इस लेख] में कितना [http://blogs.aws.amazon.com/security/post/Tx1P2T3LFXXCNB5/Writing-IAM-policies-Grant-access-to-user- विशिष्ट- फ़ोल्डर्स-in-an- अमेज़ॅन-एस 3-बंक) मेरी स्थिति पर लागू होता है। –

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

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