2

我将尝试回答这个问题,希望能帮助遇到同样问题的其他人。还希望有人指出我所缺少的(如果有的话)或沿途的改进。

4

1 回答 1

3

您需要做的第一件事是在https://portal.aws.amazon.com/gp/aws/securityCredentials ( Key Pairs tab) 创建一个密钥对。这将为您提供 akey pair id和 a pem file(将 pem 文件保存在项目目录中)。

在您的 AWS Cloudfront 门户中,创建一个分配。yes为选择Restrict Bucket Access

点击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}"

希望这可以帮助某人。如果需要对此解决方案进行改进/建议,请提及。

于 2013-06-14T08:15:01.017 回答