137 votes

Nodejs SDK AWS S3 Générer Presigned URL

Je suis l'aide de la NodeJS SDK AWS pour générer un presigned URL S3. Les docs donner un exemple de génération d'un presigned URL.

Voici mon code exact (avec des informations sensibles omis):

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)

L'URL qui génère ressemble à ceci:

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

Je copie l'URL dans mon navigateur internet, et d'obtenir la réponse suivante:

<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>

Je sais que le seau existe. Lorsque je navigue à cet article via le Web AWS GUI et double-cliquez dessus, il s'ouvre de l'objet avec l'URL et fonctionne très bien:

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]

Je suis donc amené à croire que je dois être en train de faire quelque chose de mal avec la façon dont je suis en utilisant le SDK.

127voto

Reza Mousavi Points 2061

Dustin,

Votre code est correct, vérifiez suivantes:

  1. Votre seau de la politique d'accès.

  2. Votre seau d'autorisation par l'intermédiaire de votre clé API.

  3. Votre clé API et secret.

  4. Votre seau et la clé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X