Oui, l'URL pré-signé devrait travailler pour vous. Il suffit de fournir une explication rapide ...
Par défaut, tous les objets dans Amazon S3 sont privés. Vous pouvez ensuite ajouter des autorisations pour que les utilisateurs puissent accéder à vos objets. Cela peut se faire via:
- autorisations de liste de contrôle d'accès sur les objets individuels
- Une politique Bucket (qui donne accès à large allant basé sur le chemin, l'adresse IP, referrer, etc.)
- utilisateurs IAM et des groupes (que les autorisations de subvention pour les utilisateurs avec des informations d'identification AWS)
- URL présignée
A Pre-Signed URL peut être utilisé pour accorder l'accès à S3 obje cts comme un moyen de "passer outre" les contrôles d'accès. Un objet normalement privé est accessible via une URL par en ajoutant une date d'expiration et une signature. C'est un excellent moyen de servir du contenu privé sans avoir besoin d'un serveur web.
Si votre objectif est de servir le contenu que si une URL présignée est utilisée, alors:
- Ne pas attribuer les autorisations via les méthodes normales énumérées ci-dessus (ce qui les garde privés par défaut)
- Utilisez URL présignée d'accéder aux objets
Votre code est:
const getLinkForKey = key => new Promise((resolve, reject) => {
const params = {Bucket: PICTURES_BUCKET, Key: key};
S3.getSignedUrl('getObject', params, (err, url) => err && reject(err) || resolve(url));
});
Je remarque que vous êtes ne transmettant pas le paramètre Expires
, qui spécifie la période de validité de l'URL pré-signée. Voici un exemple de code de la Amazon S3 documentation for node.js:
var params = {Bucket: 'bucket', Key: 'key', Expires: 60};
var url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url); // expires in 60 seconds
Par conséquent, il est tout à fait possible que le lien a expiré avant l'URL testé.Je vous recommande de fournir un paramètre Expires
et de le régler à une longueur adaptée à votre usage prévu (par exemple 300 secondes).
Dans les autorisations de compartiment, autorisez 'Everyone' à pouvoir lister/afficher les fichiers. – hjpotter92
Si je le fais, tout le monde pourra accéder à ces photos, n'est-ce pas? Je voudrais donner un lien spécifique à des personnes spécifiques pour qu'elles puissent accéder à une image spécifique – Ereold
Si vous connaissez leurs adresses IP, vous pouvez créer une politique. – hjpotter92