2016-09-27 3 views
5

मैं क्लाउडफ्लारे को एस 3 पर होस्ट की गई फ़ाइलों के लिए सीडीएन के रूप में कार्य करने की कोशिश कर रहा हूं, इस तरह से कोई भी सीधे फाइलों तक पहुंच नहीं सकता है।क्लाउडफ्लेयर के साथ एस 3 सीधी पहुंच को अस्वीकार करता है

S3 बाल्टी: cdn.mydomain.com.s3.amazonaws.com

CDN (CloudFlare): उदाहरण के लिए cdn.mydomain.com

क्या मैं चाहता हूँ cdn.mydomain.com/file.jpg (CloudFlare), लेकिन नहीं cdn.mydomain.com.s3.amazonaws.com/file.jpg (S3) का उपयोग कर सकेंगे है।

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

अगर मैं किसी भी फ़ाइल तक पहुँचने का प्रयास, एस 3 या CDN के माध्यम से, मैं अनुमति नहीं दी मिलती है:

अभी मैं एक CNAME CloudFlare पर कॉन्फ़िगर है कि मेरी बाल्टी की ओर इशारा करता है, और निम्नलिखित CORS है। अगर मैं एक फाइल सार्वजनिक (उर्फ अनुदानदाता हर कोई) बनाता हूं, तो मैं उस फ़ाइल को एस 3 और सीडीएन के माध्यम से एक्सेस कर सकता हूं।

मैंने *.mydomain.com के साथ बदलने की कोशिश की है, लेकिन कोई भाग्य नहीं है।

+0

आशा इस लेख में आपकी मदद https://www.maxcdn.com/one/tutorial/s3-access/ – rocketspacer

उत्तर

7

मुझे समाधान मिला। article at CloudFlare's support center इसका उल्लेख नहीं है।

आपको बाल्टी नीति संपादित करना है, सीओआरएस नहीं। और आपके डोमेन को अनुमति देने के बजाय, उस आलेख की तरह, बाल्टी तक पहुंचने के लिए, आपको क्लाउडफ्लेयर आईपी की अनुमति देना है।

{ 
     "Sid": "SOME_STRING_ID_HERE", 
     "Effect": "Allow", // or deny 
     "Principal": {"AWS": "*"}, // or whatever principal you want 
     "Action": "s3:GetObject", // or whatever action you want 
     "Resource": "arn:aws:s3:::cdn.mydomain.com/*", // or whatever resource you want 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": [ 
        "103.21.244.0/22", 
        "103.22.200.0/22", 
        "103.31.4.0/22", 
        "104.16.0.0/12", 
        "108.162.192.0/18", 
        "131.0.72.0/22", 
        "141.101.64.0/18", 
        "162.158.0.0/15", 
        "172.64.0.0/13", 
        "173.245.48.0/20", 
        "188.114.96.0/20", 
        "190.93.240.0/20", 
        "197.234.240.0/22", 
        "198.41.128.0/17", 
        "199.27.128.0/21" 
       ] 
      } 
     } 
    } 
0

यह प्रविष्टि गार्ड के रूप में अपने डोमेन नाम का उपयोग करने के S3 के बजाय बेहतर है: https://www.cloudflare.com/ips

यहाँ बाल्टी नीति CloudFlare के साथ काम करने का नमूना है: संदर्भ के लिए, आईपी की सूची है आईपी ​​की एक सूची।

जाओ अपनी साइट की S3 कंसोल पर
का चयन करें गुण फलक
अनुमति के तहत
चुनें CORS कॉन्फ़िगरेशन जोड़ें
अपने डोमेन नाम के लिए अपने CORSRules जोड़े

S3-CORS-Config example

अधिक CORS विन्यास किंडा here


पाया जा सकता है एक गलती है, लेकिन इस सवाल का जवाब केवल, आप संपत्ति को संदर्भित मूल endpoint S3 आपके लिए जनरेट से नहीं से अन्य साइटों ना करे ...

0

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

{ 
"Id": "Policy1517260196123", 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "A string ID here", 
     "Action": "s3:*", 
     "Effect": "Deny", 
     "Resource": "arn:aws:s3:::yourbucket.example.com/*", 
     "Condition": { 
      "NotIpAddress": { 
       "aws:SourceIp": [ 
        "103.21.244.0/22", 
        "103.22.200.0/22", 
        "103.31.4.0/22", 
        "104.16.0.0/12", 
        "108.162.192.0/18", 
        "131.0.72.0/22", 
        "141.101.64.0/18", 
        "162.158.0.0/15", 
        "172.64.0.0/13", 
        "173.245.48.0/20", 
        "188.114.96.0/20", 
        "190.93.240.0/20", 
        "197.234.240.0/22", 
        "198.41.128.0/17", 
        "2400:cb00::/32", 
        "2405:8100::/32", 
        "2405:b500::/32", 
        "2606:4700::/32", 
        "2803:f800::/32", 
        "2c0f:f248::/32", 
        "2a06:98c0::/29" 
       ] 
      } 
     }, 
     "Principal": { 
      "AWS": "*" 
     } 
    } 
] 

}

+0

ठीक है, मुझे लगता है कि बाल्टी सार्वजनिक नहीं था उल्लेख करना भूल गया। तो कोई भी इसे किसी भी तरह से एक्सेस नहीं कर सका। आपका दृष्टिकोण भी काम करता है। यह मानता है कि बाल्टी सार्वजनिक है, तो आपकी नीतियां 'NotIpAddress'' तक पहुंच को अवरुद्ध करती हैं। वही विचार;) – rlcabral