有没有办法使用AWS CLI为S3存储桶中的对象创建预签名URL?
我知道可以使用SDK完成,但是可以使用CLI吗?
我在其中一个AWS文档中找到了这个,但无法完成命令:
s3cmd signurl s3://BUCKET/OBJECT <expiry_epoch|+expiry_offset>
任何帮助?
答案 0 :(得分:42)
您是否尝试过aws s3 presign?
为Amazon S3对象生成预签名URL。这允许任何人 谁接收预先签名的URL以使用HTTP检索S3对象 GET请求。对于sigv4请求,需要配置该区域 明确。
这将生成一个将在3600秒(默认值)
过期的URLaws 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