【发布时间】:2013-06-10 19:46:54
【问题描述】:
我将尝试回答这个问题,希望能帮助遇到同样问题的其他人。还希望有人指出我在此过程中缺少什么(如果有的话)或改进。
【问题讨论】:
标签: ruby-on-rails ruby amazon-web-services amazon-s3 amazon-cloudfront
我将尝试回答这个问题,希望能帮助遇到同样问题的其他人。还希望有人指出我在此过程中缺少什么(如果有的话)或改进。
【问题讨论】:
标签: ruby-on-rails ruby amazon-web-services amazon-s3 amazon-cloudfront
您首先需要在https://portal.aws.amazon.com/gp/aws/securityCredentials (Key Pairs tab) 创建一个密钥对。这将为您提供 key pair id 和 pem file(将 pem 文件保存在您的项目目录中)。
在您的 AWS Cloudfront 门户中,创建一个分配。为Restrict Bucket Access 选择yes。
单击yes 获取Grant Read Permissions on Bucket。这将添加一个存储桶策略,允许您的 Cloudfront 分配读取您的 S3 存储桶上的文件。
创建分发。
在您的 S3 存储桶中,有一个不公开的文件。即没有读取权限。在这种情况下,我们将针对 test.png 进行测试。
url = "https://actual_cdn_id_here.cloudfront.net/test.png"
key_pair_id = 'your_aws_key_pair_id'
expires_in = 1.minute
expires = (Time.now.getutc + expires_in).to_i.to_s
private_key = OpenSSL::PKey::RSA.new(File.read('private_key_file.pem'))
policy = %Q[{"Statement":[{"Resource":"#{url}","Condition":{"DateLessThan":{"AWS:EpochTime":#{expires}}}}]}]
signature = Base64.strict_encode64(private_key.sign(OpenSSL::Digest::SHA1.new, policy))
"#{url}?Expires=#{expires}&Signature=#{signature}&Key-Pair-Id=#{key_pair_id}"
希望这对某人有所帮助。如果需要对此解决方案进行改进/提出建议,请务必提及。
【讨论】: