【问题标题】:How does one sign cloudfront urls for files stored on s3?如何为存储在 s3 上的文件签署云端 URL?
【发布时间】:2013-06-10 19:46:54
【问题描述】:

我将尝试回答这个问题,希望能帮助遇到同样问题的其他人。还希望有人指出我在此过程中缺少什么(如果有的话)或改进。

【问题讨论】:

    标签: ruby-on-rails ruby amazon-web-services amazon-s3 amazon-cloudfront


    【解决方案1】:

    您首先需要在https://portal.aws.amazon.com/gp/aws/securityCredentials (Key Pairs tab) 创建一个密钥对。这将为您提供 key pair idpem 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}"
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-25
      • 2017-01-29
      • 2019-03-16
      • 2019-09-09
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多