2017-06-15 1 views
1

Mon code accède à un fichier PDF dans un compartiment Amazon S3 (non public) en générant un url pré-signé et de transmettre l'URL générée dans PDF.js pour l'afficher dans le navigateur.Est-il possible d'accéder à un objet bucket s3 privé sans utiliser une URL pré-signée? (boto3, python)

J'ai un problème dans lequel je dois générer une URL pré-signée chaque fois que j'accède au fichier PDF, et je trouve cela encombrant. Ma solution pour l'instant est de sauvegarder l'URL pré-signée dans la base de données et de la vérifier, si elle a expiré ou non. Si elle a expiré, générez une nouvelle URL, sinon utilisez l'URL existante.

Ma question: Est-il possible d'accéder à un objet sans utiliser d'URL pré-signée?

Répondre

2

Si votre intention est de fournir une URL telle qu'un navigateur Web puisse ouvrir le fichier, une URL pré-signée est définitivement la meilleure méthode. Si vous souhaitez accéder via un appel API, vous pouvez appeler l'API Amazon S3 avec des informations d'identification standard pour accéder aux objets privés, mais cela ne fonctionnera pas dans un navigateur Web.

Les URL pré-signées peuvent être créées avec quelques lignes de code - beaucoup plus rapidement et plus simplement que de stocker une URL dans une base de données.

Je vois que vous en utilisant Python, alors voici quelques exemples de code de how to generate url from boto3 in amazon web services:

import boto3 
s3Client = boto3.client('s3') 
s3Client.generate_presigned_url('get_object', Params = {'Bucket': 'www.mybucket.com', 'Key': 'hello.txt'}, ExpiresIn = 100) 

Ce code ne fait pas un appel à AWS! Il est généré localement en fonction des paramètres fournis. J'ai testé cela en déconnectant mon ordinateur du réseau avant d'exécuter generate_presigned_url() et il a retourné un résultat immédiatement. Par conséquent, la génération d'une URL signée demande très peu d'efforts et ne nécessite aucun temps de traitement. Je ne vois pas pourquoi cela vous dérangerait. (Et c'est beaucoup plus simple que de faire n'importe quoi avec une base de données!)

+0

Je pensais que trop d'URL générée ralentirait mon système, donc je pense à une autre façon de le résoudre. –

+1

Huh? Le code ci-dessus prend quelques millisecondes à courir, et n'utilise même pas de réseau ou de disque. Tu ne seras pas mieux que ça! –