Pregunta

Historia:

  1. He creado un archivo de clave y pem en Amazon.
  2. I creó un cubo privada
  3. I creó una distribución pública y usados ??Identificación del origen para conectarse a la privada cubo: funciona
  4. I creó una distribución privada y conectada lo mismo que # 3 - Ahora tengo acceso denegado: esperaba

Estoy teniendo un momento muy difícil generar una URL que va a funcionar. He estado tratando de seguir las instrucciones descritas aquí: http: / /docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html

Esto es lo que tengo hasta ahora ... no funciona sin embargo - que todavía consigue acceso denegado:

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)

Puede alguien decirme lo que estoy haciendo mal aquí?

¿Fue útil?

Solución

Todo,

acabo de crear una pequeña joya que se puede utilizar para firmar CF URL con Ruby utilizando una parte del código de esta pregunta:

https://github.com/stlondemand/aws_cf_signer

Probablemente me efectuar modificaciones significativas a lo largo de los próximos semanas mientras trato de hacer uso de ella en mi solicitud, pero quería dejar que todos sabemos como se enumeran en la sección de atribuciones. :)

Gracias!

Otros consejos

url_safe quitar antes de establecer la política: política = policy_for_resource (recurso, expira)

según docs solamente Base64 debe ser seguro Url-Safe (m) = CharReplace (Base64 (m), "+ = /", "-_ ~")

.. y asegúrese de que está configurado correctamente CloudFront como: http://blog.cloudberrylab.com/ 2010/03 / how-to-configure-contenido privado-for.html

Sí, dejando la política como policy = policy_for_resource(resource, expires) trabajó para mí.

Me bifurcó right_aws (que no han respondido a mi solicitud de extracción) ... I fijó en streaming privada CloudFront y descargas en su biblioteca ACF: http://github.com/wiseleyb/right_aws

Estoy de acuerdo con Dylan. Él hizo un buen trabajo con las direcciones URL que firman. Yo tenía el mismo problema. Fui a través de los documentos. Hay una cosa que no he encontrado allí. Cuando se crea una distribución privada, entonces por lo general da acceso a los archivos, cubo, etc ...

Tengo acceso denegado errores hasta que me asignaron Política Bucket.

Puede asignar la política como:

{
    "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/*"
        }
    ]
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top