2010-04-13 38 views
5
創建CloudFront的已簽署的網址

歷史:使用Ruby

  1. 我創建了亞馬遜的關鍵和PEM文件。
  2. 我創建了一個私人鬥
  3. 我創建了一個公共分配和使用原產地標識連接到專用桶:工程
  4. 我創建了一個私人分佈和連接它一樣#3 - 現在我得到拒絕訪問:預計

我真的很難產生一個可以工作的網址。我一直努力遵循這裏所描述的方向: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) 

誰能告訴我在這裏做錯了什麼?

回答

11

所有,

我剛剛創建了一個小寶石可以用來簽署與使用一些代碼的紅寶石從這個問題CF網址:

https://github.com/stlondemand/aws_cf_signer

我TR我很可能會使得在未來幾周內將其顯著變化Ÿ實際在我的應用程序中使用它,但希望讓你知道,因爲你在歸因部分列出。 :)

謝謝!

1

是的,離開政策policy = policy_for_resource(resource, expires)爲我工作。

1

我同意迪倫。他在簽署網址方面做得很好。我遇到過同樣的問題。我瀏覽了文檔。有一件事我沒有在那裏找到。當你創建一個私人分配,那麼你通常會給文件,存儲桶等等的訪問...

我得到了訪問拒絕錯誤,直到我分配了桶策略。

您可以將喜歡的政策:

{ 
    "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/*" 
     } 
    ] 
}