gpt4 book ai didi

ruby - 使用 Ruby 为 CloudFront 创建签名 url

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:32 25 4
gpt4 key购买 nike

历史:

  1. 我在 Amazon 上创建了一个 key 和 pem 文件。
  2. 我创建了一个私有(private)存储桶
  3. 我创建了一个公共(public)分配并使用原始 ID 连接到私有(private)存储桶:有效
  4. 我创建了一个私有(private)分配并像#3 一样连接它 - 现在我得到拒绝访问:预期

我很难生成一个有效的 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)

谁能告诉我我做错了什么?

最佳答案

全部,

我刚刚创建了一个小 gem,可以使用这个问题中的一些代码使用 Ruby 对 CF URL 进行签名:

https://github.com/stlondemand/aws_cf_signer

在接下来的几周内,我可能会对它进行重大更改,因为我会尝试在我的应用程序中实际使用它,但我想让大家知道,因为您已列在属性部分中。 :)

谢谢!

关于ruby - 使用 Ruby 为 CloudFront 创建签名 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2632457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com