使用AWS Cloudfront进行URL签名 - Ruby

时间:2017-08-08 08:16:03

标签: ruby-on-rails ruby amazon-s3 aws-sdk amazon-cloudfront

我的主要目的是使用Ruby中的AWS Cloudfront签署URL

我已在https://portal.aws.amazon.com/gp/aws/securityCredentials(密钥对标签)中创建了密钥对。其中提供了密钥对id和pem文件(将pem文件保存在项目目录中)。

在AWS Cloudfront门户中,创建分发。为限制存储桶访问选择“是”。

在Bucket上单击No for Grant Read Permissions。

创建分发。

在S3存储桶中,我使用的是非公开的文件。即没有读取权限。在这种情况下,我们将对sample.png进行测试。

url = "https://actual_cdn_id_here.cloudfront.net/sample.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}"

但仍然在生成之后,我收到以下错误

<Error>
  <Code>InvalidKey</Code>
  <Message>Unknown Key</Message>
</Error>

我做错了什么?我甚至添加了Trusted Signers并为此做了自我。

0 个答案:

没有答案