如何通过AWS CLI生成预配置的S3 URL

时间:2017-08-24 19:08:12

标签: amazon-web-services amazon-s3 aws-cli

有没有办法使用AWS CLI为S3存储桶中的对象创建预签名URL?

我知道可以使用SDK完成,但是可以使用CLI吗?

我在其中一个AWS文档中找到了这个,但无法完成命令:

s3cmd signurl s3://BUCKET/OBJECT <expiry_epoch|+expiry_offset>

任何帮助?

5 个答案:

答案 0 :(得分:42)

您是否尝试过aws s3 presign

  

为Amazon S3对象生成预签名URL。这允许任何人   谁接收预先签名的URL以使用HTTP检索S3对象   GET请求。对于sigv4请求,需要配置该区域   明确。

这将生成一个将在3600秒(默认值)

过期的URL
aws s3 presign s3://mybucket/myobject

这将生成一个将在300秒后过期的网址

aws s3 presign s3://mybucket/myobject  --expires-in 300

输出

https://mybucket.s3.amazonaws.com/myobject?AWSAccessKeyId=AKIAJXXXXXXXXXXXXXXX&Expires=1503602631&Signature=ibOGfAovnhIF13DALdAgsdtg2s%3D

答案 1 :(得分:2)

现在支持通配符。

例如aws s3 presign s3://mybucket/*

答案 2 :(得分:1)

因此预签名URL的命令是:

aws s3 presign s3://bucket-address/  --expires-in 300

但需要注意的是;我们可以预先签名的URL适用于单个文件/对象级别,而不是目录级别。

如果错误,请尽快纠正。

答案 3 :(得分:1)

@Michael和@Shabbir,

是的,aws s3 presign不接受通配符/通配符/,--include--exclude--recursive'. aws ls does not accept-1 ; it behaves as ls -lp or ls -lph`。

循环有效:

for file in $(aws s3 ls s3://mybucket --profile myprofile \
--endpoint-url <my-endpoint> | awk '{print $NF}'); do
    aws s3 presign --expires-in 300 "s3://mybucket/$file" |
    --profile my-profile --endpoint-url <my-endpoint>
done

答案 4 :(得分:0)

如果您进行aws s3 presign s3://bucket-address/my-file.csv

您获得了URL。然后,当您将其传递给wget时,请确保使用撇号

wget 'https://bucket-address.s3.aws.com/xbxxxxxxxxxxxxxxx'

如果您只使用撇号,则会得到403 wget https://bucket-address.s3.aws.com/xbxxxxxxxxxxxxxxx

我将在https://blog.eq8.eu/til/transfer-file-to-server.html

中进行更多描述