2014-09-29 5 views
5

मैं काम नहीं कर सकता कि मैं अपनी बाल्टी नीति को कैसे प्राप्त करना चाहता हूं। कोई भी सहायताकाफी प्रशंसनीय होगी! मेरे वांछित नियम हैं:ऑब्जेक्ट एसीएल सार्वजनिक होने पर एस 3 बाल्टी नीति को (ज्यादातर) निजी कैसे सेट करें?

  • अपने खाते में उपयोगकर्ताओं को उपयोगकर्ता नीतियों के माध्यम से उपयोग कर सकते है, इसलिए विशेष रूप से उन्हें
  • गुमनाम उपयोगकर्ताओं (या मेरे AWS खाते के बाहर किसी) को दी गई पहुँच आवश्यकता नहीं होनी चाहिए नहीं पहुंच होनी चाहिए, सिवाय :
  • एक फ़ोल्डर/temp_public एक सार्वजनिक GetObject होना चाहिए (यानी आप URL आप फ़ाइल प्राप्त कर सकते हैं पता है)
  • इन नीतियों, बाल्टी में फाइलों पर वस्तु एसीएल ओवरराइड करना चाहिए के रूप में वस्तु एसीएल कभी कभी सेट कर रहे हैं सार्वजनिक पढ़ने के लिए।

बाल्टी नीति बनाने के लिए कारण यह है कि बाल्टी में वस्तुओं के कई एक सार्वजनिक एसीएल पढ़ा है (अनजाने सेट जब फ़ाइलें अपलोड किया गया, लेकिन यह भी भविष्य में हो सकता है तो मैं वस्तु एसीएल ओवरराइड करना चाहते है बाल्टी एसीएल के साथ)।

temp_public फ़ोल्डर की उपेक्षा कर, मैं आशा व्यक्त की मैं तो बस ऐसा कर सकता है:

{ 
    "Version": "2008-10-17", 
    "Id": "Policy123456789", 
    "Statement": [ 
     { 
      "Sid": "Stmt1", 
      "Effect": "Deny", 
      "NotPrincipal": { 
       "AWS": "arn:aws:iam::123456789012:root" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::my-bucket-name/*" 
     } 
    ] 
} 

(जहां 123456789012 मेरी एडब्ल्यूएस खाता संख्या है), लेकिन मुझे लगता है कि बाल्टी नीति के साथ सभी उपयोगकर्ताओं के लिए इनकार किया पहुँच जाते हैं। मुझे लगता है कि इस मामले में NotPrincipal काम नहीं कर रहा है?

किसी भी सुझाव के लिए धन्यवाद!

रोरी

अद्यतन: पोस्ट की गई एडब्ल्यूएस मंचों पर here, और जवाब! this answer के लिए एडब्ल्यूएस मंच से आईपी के

उत्तर

9

बहुत धन्यवाद, जो मैंने पुष्टि की है मेरे लिए काम कर रहा है:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::BucketName/temp_public/*" 
     } 
    ] 
} 

यह बयान दे देंगे किसी को भी temp_public फ़ोल्डर के अंदर की वस्तुओं, परवाह किए बिना उन फ़ाइलों पर एसीएल के लिए उपयोग पढ़ें। अन्य सभी फ़ाइलों पर सार्वजनिक पहुंच को ओवरराइड करने के लिए, आपको एक + अस्वीकार +-प्रकार विवरण प्रदान करना चाहिए। स्पष्ट अस्वीकार किसी भी अनुमति का उपयोग ओवरराइड करता है, इसलिए आपको पहले से ही अनुमतियां बहिष्कृत करनी होंगी। इसलिए NotResource एक अपवर्जन मुखौटा के रूप में (अंतिम नहीं अभी तक, नीचे पढ़ें) का उपयोग करें:

{ 
    "Effect": "Deny", 
    "Principal": "*", 
    "Action": "s3:GetObject", 
    "NotResource": "arn:aws:s3:::BucketName/temp_public/*" 
} 

बहरहाल, यह भी अपने खाते सहित सभी उपयोगकर्ताओं के लिए उपयोग से इनकार करेगा, प्रिंसिपल को "*" सेट कर दिया जाता है। इसलिए, आप से इस अस्वीकृति (अभी भी नहीं अंतिम) आपके खाते नहीं होनी चाहिए:

{ 
    "Effect": "Deny", 
    "NotPrincipal": { "AWS": "arn:aws:iam::XXXXYYYYZZZZ:root" }, 
    "Action": "s3:GetObject", 
    "NotResource": "arn:aws:s3:::BucketName/temp_public/*" 
} 

अभी भी समस्या है (जहां XXXXYYYYZZZZ अपने 12 अंकों AWS खाते आईडी है): बयान से ऊपर सभी के लिए उपयोग से इनकार करते हैं आईएएम उपयोगकर्ता (रूट खाते को छोड़कर)। आप अपने सभी आईएएम उपयोगकर्ताओं को भी बाहर करना चाहते हैं, लेकिन यह मुश्किल है। कुछ कारणों से, अमेज़ॅन एस 3 बाल्टी नीति में आईएएम उपयोगकर्ताओं को निर्दिष्ट करने के लिए वाइल्डकार्ड का समर्थन नहीं करता है। आप "arn:aws:iam::XXXXYYYYZZZZ:user/*" प्रिंसिपल के रूप में नहीं लिख सकते हैं (यह एक त्रुटि देता है: "नीति में अमान्य प्रिंसिपल")।रोरी से

{ 
    "Effect": "Deny", 
    "NotPrincipal": { 
     "AWS": [ 
          "arn:aws:iam::XXXXYYYYZZZZ:root", 
          "arn:aws:iam::XXXXYYYYZZZZ:user/user1", 
          "arn:aws:iam::XXXXYYYYZZZZ:user/user2", 
          "arn:aws:iam::XXXXYYYYZZZZ:user/user3", 
          "arn:aws:iam::XXXXYYYYZZZZ:user/user4" ] 
    } 
    "Action": "s3:GetObject", 
    "NotResource": "arn:aws:s3:::BucketName/temp_public/*" 
} 

एनबी:: आप सही उपयोगकर्ता नाम निर्दिष्ट करना S3 डॉक्स सुझाव है कि आप खाते के सभी उपयोगकर्ताओं को कवर करने के arn:aws:iam::XXXXYYYYZZZZ:root उपयोग कर सकते हैं, लेकिन यह सिर्फ काम करने के लिए प्रतीत नहीं होता

तो अंतिम नीति इस तरह दिखेगी:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::BucketName/temp_public/*" 
     }, 
     { 
      "Effect": "Deny", 
      "NotPrincipal": { 
       "AWS": [ 
            "arn:aws:iam::XXXXYYYYZZZZ:root", 
            "arn:aws:iam::XXXXYYYYZZZZ:user/user1", 
            "arn:aws:iam::XXXXYYYYZZZZ:user/user2", 
            "arn:aws:iam::XXXXYYYYZZZZ:user/user3", 
            "arn:aws:iam::XXXXYYYYZZZZ:user/user4" ] 
      } 
      "Action": "s3:GetObject", 
      "NotResource": "arn:aws:s3:::BucketName/temp_public/*" 
     } 
    ] 
} 
संबंधित मुद्दे