2016-08-08 14 views
21

मैं एक निर्धारित एस 3 यूआरएल उत्पन्न करने के लिए नोडजेएस एडब्ल्यूएस एसडीके का उपयोग कर रहा हूं। दस्तावेज़ example of generating a presigned URL देते हैं।नोडजेस एडब्ल्यूएस एसडीके एस 3 जेनरेटेड यूआरएल

const AWS = require('aws-sdk') 

const s3 = new AWS.S3() 
AWS.config.update({accessKeyId: 'id-omitted', secretAccessKey: 'key-omitted'}) 

// Tried with and without this. Since s3 is not region-specific, I don't 
// think it should be necessary. 
// AWS.config.update({region: 'us-west-2'}) 

const myBucket = 'bucket-name' 
const myKey = 'file-name.pdf' 
const signedUrlExpireSeconds = 60 * 5 

const url = s3.getSignedUrl('getObject', { 
    Bucket: myBucket, 
    Key: myKey, 
    Expires: signedUrlExpireSeconds 
}) 

console.log(url) 

यूआरएल है कि इस तरह दिखता है उत्पन्न करता है:

https://bucket-name.s3-us-west-2.amazonaws.com/file-name.pdf?AWSAccessKeyId=[access-key-omitted]&Expires=1470666057&Signature=[signature-omitted] 

मैं अपने ब्राउज़र में उस URL की प्रतिलिपि कर रहा हूँ और हो रही निम्नलिखित

यहाँ मेरी सटीक कोड (संवेदनशील जानकारी के साथ छोड़ दिया जाता है) प्रतिक्रिया:

<Error> 
    <Code>NoSuchBucket</Code> 
    <Message>The specified bucket does not exist</Message> 
    <BucketName>[bucket-name-omitted]</BucketName> 
    <RequestId>D1A358D276305A5C</RequestId> 
    <HostId> 
    bz2OxmZcEM2173kXEDbKIZrlX508qSv+CVydHz3w6FFPFwC0CtaCa/TqDQYDmHQdI1oMlc07wWk= 
    </HostId> 
</Error> 

मुझे पता है कि बाल्टी मौजूद है। जब मैं एडब्ल्यूएस वेब जीयूआई और उस पर डबल क्लिक के माध्यम से इस आइटम पर नेविगेट, यह यूआरएल के साथ वस्तु को खोलता है और अभी ठीक काम करता है:

https://s3-us-west-2.amazonaws.com/[bucket-name-omitted]/[file-name-omitted].pdf?X-Amz-Date=20160808T141832Z&X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=[signature-omitted]&X-Amz-Credential=ASIAJKXDBR5CW3XXF5VQ/20160808/us-west-2/s3/aws4_request&X-Amz-SignedHeaders=Host&x-amz-security-token=[really-long-key] 

तो मुझे विश्वास है कि मैं के साथ कैसे कुछ गलत कर किया जाना चाहिए नेतृत्व कर रहा हूँ मैं एसडीके का उपयोग कर रहा हूँ।

+0

अपने जेनरेट किए गए यूआरएल को ध्यान से जांचें। 'NoSuchBucket' का मतलब है कि यूआरएल में 'https: // >>> यहां दिखाया गया बाल्टी नाम <<< .s3-us-west-2.amazonaws.com' मौजूद नहीं है। आपकी हस्ताक्षर प्रक्रिया, नीति, अनुमतियां, कुंजी या गुप्त में कुछ भी इस विशेष त्रुटि उत्पन्न नहीं कर सकता है। –

+5

दस्तावेज़ उदाहरण के लिए लिंक को http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property –

+0

@ डस्टिन में सुरक्षित किया गया है यदि यूआरएल में एक्सेस कुंजी का खुलासा किया गया है तो यह कितना सुरक्षित है और प्रत्येक फंक्शन कॉल पर यूआरएल परिवर्तन करता है –

उत्तर

22

डस्टिन,

आपका कोड सही है, दोहरी जांच के बाद:

  1. आपकी बकेट पहुँच नीति।

  2. आपकी एपीआई कुंजी के माध्यम से आपकी बाल्टी अनुमति।

  3. आपकी एपीआई कुंजी और गुप्त।

  4. आपकी बाल्टी नाम और कुंजी।

+16

शर्मनाक रूप से, मेरे बाल्टी नाम में एक टाइपो था। – Dustin

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