Frage

Geschichte:

  1. Ich habe einen Schlüssel und pem-Datei auf Amazon.
  2. habe ich einen privaten Eimer
  3. habe ich eine öffentliche Verteilung und gebrauchte Herkunft id an den privaten Eimer verbinden: Arbeiten
  4. habe ich eine private Verteilung und verband es die gleiche wie # 3 - jetzt habe ich Zugriff verweigert erhalten: erwartet

Ich habe eine wirklich harte Zeit eine URL zu erzeugen, die funktionieren. Ich habe versucht, die Anweisungen zu folgen hier beschrieben: http: / /docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html

Das ist, was ich so weit gekommen ... nicht funktioniert aber - noch immer Zugriff verweigert:

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)

Kann mir jemand sagen, was ich falsch mache hier?

War es hilfreich?

Lösung

Alle,

Ich habe gerade ein kleines Juwel, das verwendet werden kann, CF URLs mit Ruby unterzeichnet von dieser Frage eines Teil des Codes mit:

https://github.com/stlondemand/aws_cf_signer

Ich werde wahrscheinlich erhebliche Änderungen es in den kommenden Wochen wird zu machen, wie ich tatsächlich versuchen, es zu benutzen in meiner Anwendung aber wollten Sie alle wissen, wie Sie im Abschnitt Zuordnung aufgeführt sind. :)

Danke!

Andere Tipps

Entfernen url_safe, bevor Sie setzen Politik: Politik = policy_for_resource (Ressource, läuft)

nach docs nur Base64 sollte sicher URL-Safe (m) sein = CharReplace (Base64 (m), "+ = /", "-_ ~")

.. und stellen Sie sicher, dass Cloudfront richtig konfiguriert ist, wie: http://blog.cloudberrylab.com/ 2010/03 / how-to-configure-private-content-for.html

Yep, so dass Politik als policy = policy_for_resource(resource, expires) für mich gearbeitet.

ich gegabelt right_aws (sie haben meine Pull-Anforderung nicht reagiert) ... stelle ich Cloudfront Private-Streaming und Downloads in ihrer ACF Bibliothek auf: http://github.com/wiseleyb/right_aws

Ich bin mit Dylan. Er hat gute Arbeit mit der Unterzeichnung Urls. Ich hatte das gleiche Problem. Ich ging durch die docs. Es ist eine Sache, die ich nicht dort gefunden habe. Wenn Sie eine private Verteilung erstellen, dann geben Sie in der Regel Zugang zu Dateien, Eimer, etc ...

Ich habe Zugriff Fehler verweigert, bis ich Bucket-Richtlinie zugewiesen.

Sie können Richtlinien wie zuweisen:

{
    "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/*"
        }
    ]
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top