Question

Histoire:

  1. J'ai créé un fichier clé et GDP sur Amazon.
  2. Je créé un seau privé
  3. Je créé une distribution publique et id origine utilisé pour se connecter au seau privé: travaux
  4. Je créé une distribution privée et connecté le même que # 3 - maintenant je me voient refuser l'accès: attendu

Je vais avoir un temps vraiment difficile de générer une URL qui fonctionne. J'ai essayé de suivre les instructions décrites ici: http: / /docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html

est ce que j'ai jusqu'à présent ... ne fonctionne pas bien - encore avoir accès refusé:

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)

Quelqu'un peut-il me dire ce que je fais mal ici?

Était-ce utile?

La solution

Tous,

Je viens de créer un petit bijou qui peut être utilisé pour signer des URL CF avec Ruby en utilisant une partie du code de cette question:

https://github.com/stlondemand/aws_cf_signer

Je vais probablement apporter des changements importants à ce au cours des prochaines semaines que j'essaie d'utiliser réellement dans ma demande mais je voulais vous laisser savoir que tous vous êtes inscrit dans la section attributions. :)

Merci!

Autres conseils

supprimer url_safe avant de définir la politique: politique = policy_for_resource (ressource, expire)

selon docs ne base64 doit être sûr Url-Safe (m) = CharReplace (base64 (m), "+ = /", "-_ ~")

.. et assurez-vous que CloudFront est correctement configuré comme: http://blog.cloudberrylab.com/ 2010/03 / how-to-configure-contenu privé for.html

Oui, en laissant la politique comme policy = policy_for_resource(resource, expires) a fonctionné pour moi.

Je fourchue right_aws (ils ont pas répondu à ma demande de traction) ... Je mis en place le streaming privé CloudFront et téléchargements dans leur bibliothèque acf: http://github.com/wiseleyb/right_aws

Je suis d'accord avec Dylan. Il a fait du bon travail avec urls signature. J'ai eu le même problème. Je suis passé par la documentation. Il y a une chose que je ne trouve pas là. Lorsque vous créez une distribution privée, vous donne habituellement accès pour les fichiers, seau, etc ...

Je suis erreurs d'accès refusé jusqu'à ce que je Bucket politique affecté.

Vous pouvez affecter la politique comme:

{
    "Version":"2008-10-17",
    "Id":"PolicyForCloudFrontPrivateContent",
    "Statement":[{
            "Sid":" Grant a CloudFront Origin Identity access to support private content",
            "Effect":"Allow",
            "Principal":{
            "CanonicalUser":"here-goes-your-canonical-name-you-attached-to-cloudfront79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"
            },
            "Action":"s3:GetObject",
            "Resource":"arn:aws:s3:::change-me-to-your-bucketname/*"
        }
    ]
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top