如何使用perl生成S3预签名URL?

时间:2017-03-01 15:41:28

标签: amazon-web-services amazon-s3 pre-signed-url

我正在使用https://github.com/rbrigham/s3-signed-url中的示例来生成S3预先签名的网址。 当我访问生成的URL时,我得到以下错误:

 <Error>
<Code>AccessDenied</Code>
<Message>
Query-string authentication requires the Signature, Expires and AWSAccessKeyId parameters
</Message>
<RequestId>60F1F4F2EC1B24BB</RequestId>
<HostId>
dhHvqSpTqXn1e01TKXAKV8+pzPZkNKGcuCYEuyYMvViRvLdbxpe2ml9Po66t+tboRMPhClmYQe8=
</HostId>
</Error>

有谁能告诉我还有什么我想念的?

我的包含点字符的存储桶名称必须使用SSL证书,因此我需要基于PATH的s3网址。

我是否需要在IAM用户/ s3存储桶上设置任何特定权限?我拥有S3的所有权限(我有完整的管理员访问iam策略集)。

Ex url:

https://s3-eu-west-1.amazonaws.com/<bucket_name>/<object>?Signature=xxxxxxxxxxxxxxxxxxxx&AWSAccessKeyId=xxxxxxxxxxxxxxxxxxx&Expires=1000000%

1 个答案:

答案 0 :(得分:0)

要在Perl中实现此目的,请使用Amazon::S3::SignedURLGenerator

use Amazon::S3::SignedURLGenerator;

my $generator = Amazon::S3::SignedURLGenerator->new(
    aws_access_key_id     => $aws_access_key_id,
    aws_secret_access_key => $aws_secret_access_key,
    prefix => 'https://mybucket.s3.amazonaws.com',
    expires => 600, # 10 minutes
);

my $url = $generator->generate_url('GET', 'path/file.txt', {});