История:
Мне действительно нелегко генерировать URL, который будет работать. Я пытался следовать за направлениями, описанными здесь: http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html
Это - то, что я имею, до сих пор... не работает хотя - все еще получение доступа запрещен:
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)
Кто-либо может сказать мне, что я делаю неправильно здесь?
удалите url_safe перед установкой политики: policy = policy_for_resource (resource, expires)
согласно документам только Base64 должен быть безопасным URL -Safe (m) = CharReplace (Base64 (m), "+ = /", "-_ ~")
.. и убедитесь, что CloudFront настроен правильно, например: http: //blog.cloudberrylab.com/2010/03/how-to-configure-private-content-for.html
Ага, оставив политику как policy = policy_for_resource (resource, expires)
, у меня сработало.
Я разветвил right_aws (они не ответили на мой запрос на перенос) ... Я установил облачную потоковую передачу и загрузку в их библиотеке acf: http://github.com/wiseleyb/right_aws