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

我在https://portal.aws.amazon.com/gp/aws/securityCredentials(Key Pairs选项卡)创建了一个密钥对 . 其中提供了密钥对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并为此做了自我 .