La création d'signé S3 et Cloudfront Url via le SDK AWS
Quelqu'un a utilisé avec succès le SDK AWS pour générer signé Url aux objets dans un compartiment S3 qui fonctionnent également sur CloudFront? Je suis à l'aide de la JavaScript SDK AWS et c'est vraiment simple pour générer signé Url via le S3 liens. Je viens de créer un compartiment privé et d'utiliser le code suivant pour générer l'URL:
var AWS = require('aws-sdk')
, s3 = new AWS.S3()
, params = {Bucket: 'my-bucket', Key: 'path/to/key', Expiration: 20}
s3.getSignedUrl('getObject', params, function (err, url) {
console.log('Signed URL: ' + url)
})
Cela fonctionne très bien mais j'ai aussi envie d'exposer un CloudFront URL pour mes utilisateurs afin qu'ils puissent obtenir l'augmentation des vitesses de téléchargement à l'aide de la CAN. J'ai installé une distribution CloudFront, qui a modifié le seau de la politique pour permettre l'accès. Cependant, après avoir fait cela, n'importe quel fichier peut être consulté via le CloudFront URL et Amazon semble ignorer la signature dans mon lien. Après avoir lu un peu plus sur ce que j'ai vu que les gens de générer un .fichier pem pour obtenir signé Url de travail avec CloudFront mais pourquoi ce n'est pas nécessaire pour le S3? Il semble que le getSignedUrl méthode est tout simplement la signature avec les AWS Clé Secrète et à Clé d'Accès AWS. Quelqu'un a eu une telle configuration de travail avant?
Mise à jour:
Après de nouvelles recherches, il semble que CloudFront poignées URL signatures complètement différent de S3 [lien]. Cependant, je ne suis toujours pas comment créer un signé CloudFront URL à l'aide de Javascript.
- Je n'obtiens pas de votre mise en œuvre. U peut l'expliquer en détail. J'ai besoin de faire de même pour mon Application android.Donc ce que j'ai pensé est: est-ce que Mon client envoie une requête à mon serveur--> mon serveur demande AWS S3 pour la signature de l'URL-->Mon serveur envoie l'URL de retour au client de remplir le téléchargement de la partie. Est cette approche fine. Mon serveur est écrit en node.js. U peut m'aider plz faire. ?
- Si c'est écrit dans le nœud, vous devriez être en mesure d'utiliser le aws-cloudfront-sign utilitaire que j'ai écrit. Le fichier README.md il devrait expliquer ce que vous devez faire.
Vous devez vous connecter pour publier un commentaire.
Mise à jour: j'ai déplacé la signature de fonctionnalités à partir de l'exemple de code ci-dessous dans la aws-cloudfront-signe paquet sur NPM. De cette façon, vous pouvez seulement besoin de ce paquet et appel
getSignedUrl()
.Après quelques recherches, j'ai trouvé une solution qui est une sorte de combo entre cette réponse et une méthode que j'ai trouvé dans le Boto bibliothèque. Il est vrai que S3 URL signatures sont traités différemment des CloudFront URL signatures. Si vous avez juste besoin de signer un S3 lien, puis le code d'exemple dans ma question de départ fonctionnent très bien pour vous. Cependant, il devient un peu plus compliqué si vous souhaitez générer signé Url qui utilisent votre distribution CloudFront. C'est parce que CloudFront URL signatures ne sont pas actuellement pris en charge dans le SDK AWS donc, vous devez créer la signature sur votre propre. Dans le cas où vous aussi vous avez besoin pour ce faire, voici les étapes de base. Je vais supposer que vous avez déjà un compartiment S3 installation:
Configurer CloudFront
Créer Signé CloudFront URL
À grande signée CloudFront URL vous avez juste besoin de signer votre stratégie à l'aide de RSA-SHA1 et de l'inclure dans la requête param. Vous pouvez en savoir plus sur les politiques douanières ici mais j'ai inclus de base dans l'exemple de code ci-dessous qui devrait vous lever et courir. L'exemple de code est pour Node.js mais le processus peut être appliqué à n'importe quelle langue.
Policy
paramètre de requête? Besoin de télécharger via une requête POST à une distribution CloudFront qui nécessite des pré-signé Url.Pour mon code pour travailler avec Jason Sims de code, j'ai aussi eu à convertir politique en base64 et l'ajouter à la finale signedUrl, comme ceci:
AWS inclut certains intégrés dans des classes et des structures pour aider à la création d'signé des Url et des Cookies pour CloudFront. J'ai utilisé ces côtés de l'excellente réponse de Jason Sims pour le faire fonctionner dans une évolution légèrement différente (qui semble être très similaire à la MNP paquet qu'il a créé).
À savoir, l'AWS.CloudFront.Signataire de type description qui résume le processus de création signée les Url et les Cookies.
Et de l'une des options avec une politique de la chaîne JSON ou sans une politique avec une url et la date d'expiration.
Exemple de mise en œuvre: