Tôi đang sử dụng NodeJS AWS SDK để tạo URL S3 được chỉ định trước. Tài liệu đưa ra một ví dụ về việc tạo một URL được chỉ định trước .
Đây là mã chính xác của tôi (đã bỏ qua thông tin nhạy cảm):
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 tạo ra trông giống như sau:
https://bucket-name.s3-us-west-2.amazonaws.com/file-name.pdf?AWSAccessKeyId=[access-key-omitted]&Expires=1470666057&Signature=[signature-omitted]
Tôi đang sao chép URL đó vào trình duyệt của mình và nhận được phản hồi sau:
<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>
Tôi biết cái xô tồn tại. Khi tôi điều hướng đến mục này thông qua AWS Web GUI và nhấp đúp vào nó, nó sẽ mở đối tượng có URL và hoạt động tốt:
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]
Vì vậy, tôi tin rằng tôi phải làm gì đó sai với cách tôi sử dụng SDK.
new AWS.S3({ signatureVersion: 'v4' })
buộc Phiên bản Chữ ký 4. Đây là yêu cầu đối với tôi với đối tượng được mã hóa SSE KMS.
NoSuchBucket
có nghĩa là tên nhóm được hiển thịhttps://>>>here<<<.s3-us-west-2.amazonaws.com
trong URL không tồn tại. Không có gì trong quy trình ký, chính sách, quyền, khóa hoặc bí mật của bạn có thể tạo ra lỗi cụ thể này.