मैं एक निर्धारित S3 URL जनरेट करने के लिए NodeJS AWS SDK का उपयोग कर रहा हूं। डॉक्स एक निर्धारित URL जनरेट करने का एक उदाहरण देता है ।
यहाँ मेरा सटीक कोड है (संवेदनशील जानकारी के साथ छोड़ा गया):
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)
जो 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]
इसलिए मुझे विश्वास है कि मैं एसडीके का उपयोग कर रहा हूं, मैं कुछ गलत कर रहा हूं।
new AWS.S3({ signatureVersion: 'v4' })
हस्ताक्षर संस्करण को बल देता है। यह SSE KMS एन्क्रिप्टेड ऑब्जेक्ट के साथ मेरे लिए एक आवश्यकता थी।
NoSuchBucket
इसका मतलबhttps://>>>here<<<.s3-us-west-2.amazonaws.com
है कि URL में दिखाया गया बकेट नाम मौजूद नहीं है। आपकी हस्ताक्षर करने की प्रक्रिया, नीति, अनुमतियां, कुंजी या रहस्य में कुछ भी इस विशेष त्रुटि को उत्पन्न नहीं कर सकता है।