Historique:
J'ai un temps vraiment difficile générant une URL qui fonctionnera. J'ai essayé de suivre les instructions décrites ici: http: / /docs.amazonwebservices.com/amazoncloudfront/latest/developerguide/index.html?privatecontent.html P>
C'est ce que j'ai jusqu'ici ... ne fonctionne pas mais toujours Obtenir l'accès refusé: P>
def url_safe(s) s.gsub('+','-').gsub('=','_').gsub('/','~').gsub(/\n/,'').gsub(' ','') end def policy_for_resource(resource, expires = Time.now + 1.hour) %({"Statement":[{"Resource":"#{resource}","Condition":{"DateLessThan":{"AWS:EpochTime":#{expires.to_i}}}}]}) end def signature_for_resource(resource, key_id, private_key_file_name, expires = Time.now + 1.hour) policy = url_safe(policy_for_resource(resource, expires)) key = OpenSSL::PKey::RSA.new(File.readlines(private_key_file_name).join("")) url_safe(Base64.encode64(key.sign(OpenSSL::Digest::SHA1.new, (policy)))) end def expiring_url_for_private_resource(resource, key_id, private_key_file_name, expires = Time.now + 1.hour) sig = signature_for_resource(resource, key_id, private_key_file_name, expires) "#{resource}?Expires=#{expires.to_i}&Signature=#{sig}&Key-Pair-Id=#{key_id}" end resource = "http://d27ss180g8tp83.cloudfront.net/iwantu.jpeg" key_id = "APKAIS6OBYQ253QOURZA" pk_file = "doc/pk-APKAIS6OBYQ253QOURZA.pem" puts expiring_url_for_private_resource(resource, key_id, pk_file)
6 Réponses :
Supprimer URL_Safe Avant de définir la stratégie: Politique = politique_for_resource (ressource, expire) p>
Selon Docs, la base64 devrait être une URL sécuritaire (M) = charreplace (base64 (m), "+ = /", "-_ ~") p>
.. et assurez-vous que Cloudfront est configuré correctement comme: http://blog.cloudberryLab.com/ 2010/03 / comment configurer-configuration-privé-contenu-for.html p>
Oui, de la stratégie de départ en tant que stratégie = stratégie_for_resource (ressource, expiration) code> a travaillé pour moi. P>
i Forked Right_aws (ils n'ont pas répondu à ma demande de traction) ... Je configurais le streaming privé de Cloudfront et des téléchargements dans leur bibliothèque ACF: http://github.com/wiseleyb/right_aws p>
Tous, P>
Je viens de créer un petit bijou pouvant être utilisé pour signer des URL CF avec Ruby en utilisant une partie du code de cette question: p>
https://github.com/stlondemand/aws_cf_signer P>
Je vais probablement apporter des changements importants dans les prochaines semaines, alors que j'essaie de l'utiliser dans ma candidature, mais je voulais tout vous permettre de savoir que vous êtes répertorié dans la section Attributions. :) p>
Merci! P>
Je suis d'accord avec Dylan. Il a fait du bon travail avec la signature des URL. J'ai eu le même problème. J'ai traversé les docs. Il y a une chose que je ne trouvais pas là-bas. Lorsque vous créez une distribution privée, vous donnez généralement accès aux fichiers, seau, etc ...
J'ai accès à des erreurs refusées jusqu'à ce que je assignais une stratégie de godet. P>
Vous pouvez attribuer des stratégies telles que: p>
C'est une question ancienne, mais il y a toujours très peu de choses sur la signature des URL de Cloudfront à l'aide du Ruby SDK, en ajoutant une aide mise à jour. Il y a maintenant un Cloudfront SDK a> qui rend cette assez facile: