web-dev-qa-db-fra.com

Accéder aux fichiers stockés sur Amazon S3 via un navigateur Web

Situation actuelle

J'ai un projet sur Github qui se construit après chaque commit sur Travis-CI . Après chaque construction réussie, Travis télécharge les artefacts dans un compartiment S3. Existe-t-il un moyen pour moi de permettre à quiconque d’accéder facilement aux fichiers du seau? Je sais que je pourrais générer une clé d'accès en lecture seule, mais il serait plus facile pour l'utilisateur d'accéder aux fichiers via son navigateur Web.

J'ai un hébergement de site Web activé avec le document racine de "." ensemble. 

Screenshot of website hosting setup

Cependant, je reçois toujours un message 403 Forbidden lorsque j'essaie d'accéder au point de terminaison du compartiment.

403 Forbidden

La question

Comment permettre aux utilisateurs de parcourir et de télécharger facilement les artefacts stockés sur Amazon S3 à partir de leur navigateur Web? De préférence sans client tiers.

19
Zach Latta

J'ai trouvé cette question connexe: Liste du répertoire dans S3 Static Website

En fin de compte, si vous activez la lecture publique pour tout le compartiment, S3 peut gérer des listes de répertoires. Le problème, c’est qu’ils sont en XML au lieu de HTML, ils ne sont donc pas très conviviaux.

Vous pouvez utiliser trois méthodes pour générer des listes:

  • Générez des fichiers index.html pour chaque répertoire sur votre propre ordinateur, téléchargez-les sur s3 et mettez-les à jour chaque fois que vous ajoutez de nouveaux fichiers à un répertoire. Très low-tech. Puisque vous dites que vous téléchargez des fichiers de construction directement à partir de Travis, cela n’est peut-être pas très pratique, car cela nécessiterait un travail supplémentaire.

  • Utilisez un outil de navigation S3 côté client.

  • Utilisez un outil de navigation côté serveur.

    • s3browser (PHP)
    • s3index Scala. En se basant sur l’existence d’un Procfile, il peut être facilement déployé sur Heroku. Pas sûr puisque je n'ai aucune expérience avec Scala.
22
Myrne Stol

J'ai eu le même problème et je l'ai corrigé en utilisant le 

  1. nouveau menu contextuel "Rendre public".
  2. Allez à https://console.aws.Amazon.com/s3/home ,
  3. sélectionnez le compartiment, puis pour chaque dossier ou fichier (ou plusieurs sélections), cliquez avec le bouton droit de la souris et
  4. "rendre publique"
1
Itay

Vous pouvez utiliser Navigateur Web S3

C'est un outil côté serveur, créé avec Laravel.

0
Andriy Kambur

Vous pouvez utiliser une stratégie de compartiment pour donner aux utilisateurs anonymes un accès en lecture complet à vos objets. Selon que vous ayez besoin de LIST ou d’effectuer simplement une opération GET, vous voudrez peut-être modifier cela. (Par exemple, les autorisations permettant de répertorier le contenu d'un compartiment ont l'action définie sur "s3: ListBucket").

http://docs.aws.Amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

Votre politique ressemblera à ce qui suit. Vous pouvez utiliser la console S3 à l’adresse http://aws.Amazon.com/console pour la télécharger.

 {
  "Version":"2008-10-17",
  "Statement":[{
    "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": {
            "AWS": "*"
         },
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::bucket/*"
      ]
    }
  ]
}

Si vous ouvrez véritablement vos objets au monde, envisagez de définir des règles CloudWatch pour votre facturation afin de pouvoir désactiver les autorisations d'accès à vos objets s'ils deviennent trop populaires.

0
sethwm