S3 के साथ Amazon Cloudfront। पहुंच अस्वीकृत


91

हम क्लाउड के माध्यम से S3 बाल्टी को वितरित करने की कोशिश कर रहे हैं, लेकिन किसी कारण के लिए केवल प्रतिक्रिया निम्नलिखित की तरह AccessDenied XML दस्तावेज़ है:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>89F25EB47DDA64D5</RequestId>
    <HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId>
</Error>

यहां हम सेटिंग का उपयोग कर रहे हैं:

वितरण सेटिंग्स मूल सेटिंग्स

और यहाँ बाल्टी के लिए नीति है

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity *********"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::x***-logos/*"
        }
    ]
}

कैश व्यवहार सेटिंग्स - imgur.com/JBZqrRm
जॉर्डन एडम्स

सुनिश्चित करें कि Cloudfront S3 बाल्टी से पढ़ सकता है।
नाथन सी।

मैं इसे कैसे सक्षम या जाँचूंगा?
जॉर्डन एडम्स

मूल सेटिंग्स, अंतिम विकल्प। अपना स्क्रीनशॉट देखें। :)
नाथन सी

मुझे लगता है कि मैंने पहले यह कोशिश की थी और यह काम नहीं किया था, लेकिन मैंने इसे फिर से बदल दिया है और यह वितरण की प्रक्रिया में है। मैं अपनी पोस्ट में बाल्टी की नीति को जोड़ दूंगा :)
जॉर्डन एडम्स

जवाबों:


91

यदि आप अपने CloudFront वितरण की जड़ तक पहुँच रहे हैं, तो आपको एक डिफ़ॉल्ट रूट ऑब्जेक्ट सेट करने की आवश्यकता है: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRooterbject.html

CloudFront कंसोल का उपयोग करके डिफ़ॉल्ट रूट ऑब्जेक्ट निर्दिष्ट करने के लिए:

  • AWS प्रबंधन कंसोल में साइन इन करें और https://console.aws.amazon.com/cloudfront/ पर Amazon CloudFront कंसोल खोलें ।

  • शीर्ष फलक में वितरण की सूची में, अद्यतन करने के लिए वितरण का चयन करें।

  • में वितरण डिटेल्स पेन , पर सामान्य टैब पर क्लिक करें संपादित करें

  • में वितरण संपादित करें संवाद बॉक्स में, में डिफ़ॉल्ट रूट वस्तु क्षेत्र, डिफ़ॉल्ट जड़ वस्तु की फ़ाइल नाम दर्ज करें।

    उदाहरण के लिए, केवल ऑब्जेक्ट नाम दर्ज करें index.html। ऑब्जेक्ट नाम से पहले / a न जोड़ें।

  • अपने परिवर्तनों को सहेजने के लिए, हाँ पर क्लिक करें , संपादित करें


मेरे मामले में, इस सेटिंग से समस्या हल नहीं हुई है। मुझे अभी भी एक्सेस अस्वीकृत त्रुटि मिल रही है
KurioZ7

53

मेरे पास बस एक ही मुद्दा है और जबकि कुसहा का जवाब मूल मार्ग में index.html के लिए समस्या का समाधान करता है , मेरी समस्या उप-निर्देशिकाओं के साथ भी थी क्योंकि मैंने "सुंदर यूआरएल" प्राप्त करने के लिए index.html के साथ संयुक्त उन का उपयोग किया था (उदाहरण के लिए .com / कुछ / बल्कि "बदसूरत" example.com/something.html)

आंशिक रूप से यह अमेज़ॅन की गलती भी है, क्योंकि जब आप CloudFront वितरण की स्थापना करते हैं, तो यह आपको चुनने के लिए S3 बाल्टी प्रदान करेगा, लेकिन यदि आप उन में से एक का चयन करते हैं तो यह बैकएंड के रूप में स्थैतिक वेबसाइट होस्टिंग URL के बजाय बाल्टी URL का उपयोग करेगा।

तो समस्या को हल करने के लिए:

  • बाल्टी के लिए स्थैतिक वेबसाइट होस्टिंग सक्षम करें
  • सूचकांक (और शायद त्रुटि ) दस्तावेज़ को उचित रूप से सेट करें
  • Endpoint URL कॉपी करें - आप इसे उपरोक्त सेटिंग्स के बगल में पा सकते हैं - यह कुछ इस तरह दिखना चाहिए: <bucket.name> .s3-website- <aws-area> .amazonaws.com
  • उस URL को अपने CloudFront वितरण मूल के रूप में उपयोग करें। (यह सीएफ डिफॉल्ट रूट ऑब्जेक्ट सेटिंग को अनावश्यक बना देगा, लेकिन इसे किसी भी तरह सेट करने के लिए चोट नहीं पहुंचाता है)

इस टिप्पणी पर तारीख के रूप में सही जवाब।
साई रामचंद्रन

मेरे लिए भी यही था। मेरे पास पहले से ही एक और वेबसाइट काम कर रही थी और मुझे लगा कि मैंने नए को पहचान के साथ कॉन्फ़िगर किया है। इसलिए इसे नजरअंदाज करना आसान है।
गुंथर एबरल

आपको बाल्टी में सार्वजनिक GetObject और ListObjects अनुमतियों को भी जोड़ना होगा।
जार्ज

8

मेरे पास @Cezz जैसा ही मुद्दा था, हालांकि मेरे मामले में समाधान काम नहीं करेगा।

जैसे ही स्थिर वेबसाइट होस्टिंग बाल्टी के लिए सक्षम होती है, इसका मतलब है कि उपयोगकर्ता सामग्री को क्लाउडफ्रंट URL या S3 URL के माध्यम से एक्सेस कर सकते हैं, जो हमेशा वांछनीय नहीं होता है। उदाहरण के लिए, मेरे मामले में, क्लाउडफ्रंट वितरण SSL सक्षम है, और उपयोगकर्ताओं को गैर-एसएसएल कनेक्शन पर इसे एक्सेस करने में सक्षम नहीं होना चाहिए।

मुझे जो समाधान मिला वह था:

  • S3 बाल्टी पर स्थिर वेबसाइट होस्टिंग को निष्क्रिय रखें
  • Cloudfront वितरण उत्पत्ति को S3 ID के रूप में रखें
  • "बाल्टी पहुँच को प्रतिबंधित करें" को "हाँ" पर सेट करें (और आसानी के लिए, क्लाउडफ्रंट को बाल्टी नीति को स्वचालित रूप से अपडेट करने की अनुमति दें)
  • "त्रुटि पृष्ठ" पर, एक कस्टम प्रतिक्रिया बनाएं और मानचित्र त्रुटि कोड "403: निषिद्ध" वांछित प्रतिक्रिया पृष्ठ पर अर्थात /index.html, 200 की प्रतिक्रिया कोड के साथ

ध्यान दें कि मेरे मामले में, मैं एक एकल पृष्ठ जावास्क्रिप्ट अनुप्रयोग परोस रहा हूँ जहाँ सभी रास्ते index.html द्वारा हल किए जाते हैं। यदि आप अपने S3 बाल्टी में विभिन्न वस्तुओं को हल करने वाले रास्ते हैं, तो यह काम नहीं करेगा।


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

यह वास्तव में मददगार था, निषिद्ध संदेश S3 से आता है जो मुझे पहली बार महसूस नहीं हुआ था, इसलिए आपको एक कस्टम त्रुटि पृष्ठ के साथ इसे पकड़ना होगा ताकि आपका एसपीए काम करे।
इवान

4

मेरे मामले में मैं अपने S3 बाल्टी में एक मूल पथ के साथ "पथ पैटर्न" व्यवहार के साथ कई मूल का उपयोग कर रहा था:

खराब सेटअप:

क्लाउडफ्रंट बिहेवियर: /images/*->My-S3-origin

My-S3- मूल: मूल पथ: /images

S3 फाइलें: /images/my-image.jpg

अनुरोध प्राप्त करें: /images/my-image.jpg -> 403

क्या हो रहा था पूरे CloudFront GET अनुरोध मूल को भेजा जाता है: /image/my-image.jpgउत्पत्ति पथ द्वारा उपसर्ग:, /imagesइसलिए S3 में अनुरोध ऐसा दिखता है /images/images/my-image.jpgजो मौजूद नहीं है।

उपाय

मूल पथ निकालें।

इसने मुझे बाल्टी को मूल अभिगम पहचान और बाल्टी अनुमतियों और व्यक्तिगत फ़ाइल अनुमतियों के साथ प्रतिबंधित करने की अनुमति दी।


1

मेरे मामले में मैंने रूट 53 को गलत तरीके से कॉन्फ़िगर किया था। मैंने अपने डोमेन पर एक उपनाम बनाया है, लेकिन इसे Cloud3ront वितरण के बजाय S3 बाल्टी को इंगित किया है।

इसके अलावा मैंने डिफ़ॉल्ट रूट ऑब्जेक्ट को छोड़ दिया। यदि वे इसे छोड़ने के संभावित परिणामों के बारे में प्रश्न चिह्न पाठ में थोड़ी जानकारी जोड़ते हैं, तो कंसोल को वास्तव में बेहतर बनाया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.