Amazon web services AWS CLI从AWS CLI获取专用存储桶的下载S3 URL

Amazon web services AWS CLI从AWS CLI获取专用存储桶的下载S3 URL,amazon-web-services,amazon-s3,aws-cli,Amazon Web Services,Amazon S3,Aws Cli,我可以使用以下命令成功地将文件上载到privateS3存储桶: aws s3 cp“myfile.txt”“s3://myfolder/myfile.txt”--region=us-east-1--output=json 我想发出一个AWS CLI命令来返回myfile.txt的临时URL下载,有人知道如何下载吗 我在谷歌上搜索了一下,看起来我必须进行一些签名才能获得临时URL,例如:您可以使用以下URL格式: https://<bucket-name>.s3.amazonaws.c

我可以使用以下命令成功地将文件上载到privateS3存储桶:

aws s3 cp“myfile.txt”“s3://myfolder/myfile.txt”--region=us-east-1--output=json

我想发出一个AWS CLI命令来返回myfile.txt的临时URL下载,有人知道如何下载吗


我在谷歌上搜索了一下,看起来我必须进行一些签名才能获得临时URL,例如:

您可以使用以下URL格式:

https://<bucket-name>.s3.amazonaws.com/<object or key name>
您可以在此处看到bucket策略的示例:

您还可以使用S3控制台,如下所示:


我在谷歌上搜索了一下,决定写这个脚本来帮助我为S3生成签名url


知道这已经晚了8个月,但我刚刚发现,您可以使用Eclipse和AWS Eclipse工具包()来生成预签名URL,只需右键单击目标文件,甚至可以设置导出日期……这非常灵活。

命令错误;而不是:

$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee
应该是:

$ aws s3api get-object-acl --bucket zzzyyy --key yyyeee

或者,您可以查看并给我们反馈。我们一直希望有一个CLI dropbox界面,当然不是作为GUI,而是可以编写脚本并实现自动化。因此,我们最终为
mc
实现了一个方便的命令,以解决两个用例

  • 用于共享URL以下载文件(预签名Get)
  • 用于共享
    curl
    表单以上载文件(预先签署的帖子策略)
下面的示例处理这两个用例

$ mc share
NAME:
  mc share - Download and upload documents.

USAGE:
  mc share command [arguments...]

COMMANDS:
  download  Generate URL to download documents.
  upload    Generate ‘curl’ command to upload files.
  list      List the shared URLs
这些命令可以在常规意义上使用,也可以在脚本中使用。出于编写脚本的目的,
mc
为所有命令提供
--json
输出

mc共享下载示例
mc共享上传示例
$mc共享上传--expire=2h--content type=image/pnghttps://s3.amazonaws.com/backup/2007-Mar-2/... 
卷曲https://s3.amazonaws.com/backup -F x-amz-credential=Akiajva5BMU2RHO6IOQ/20151109/us-east-1/s3/aws4_请求-F x-amz-date=20151109T061202Z-F x-amz-signature=61C234DD17FC9E588417AC4546B37D61755E551674A9617F33F5232EC533C8B6-F内容类型=图像/png-F bucket=back-F政策=EYJLEHBPCMF0AW9UIJOIMJAXS0xMS0WOVQWODOXMJOWMI40MZAIIWIY29UZGL0AW9UCYI6W1SIZIK9UDGVUDC1UEXBLIWIWIW1HZ2UVCG5NIL0SWYJLCSIWIRIDWNRZXQILJWNWNRDXAIXXBIN0YXJ0CY13AXROIWIJGTLESIZIZIJJJ4LFTEI1KY2WIZIWIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZIZVudglhbcikflsufkvke1qk1nvtjsse82su9rlziwmtuxmta5l3vzlwvhc3qtms9zmy9hd3m0x3jlcxvlc3qixv19-F x-amz-algorithm=AWS4-HMAC-SHA256-F key=2007-Mar-2/-F文件=@
$mc--json共享上传--expire=2h--content type=image/pnghttps://s3.amazonaws.com/backup/2007-Mar-2/... | jq。
{
“到期日”:{
“小时数”:2
},
“上载命令”:"卷曲https://s3.amazonaws.com/backup -F x-amz-signature=4B349A15E76AB403424EC6B1E28936F67C02C427CCC98522D6F654EEE5B7DE6-F内容类型=image/png-F bucket=backup-F policy=EYJLEHBPCMF0AW9UIJOIMJAXN0xMS0WOVQWODOXMZOYZIWY2UZGL0AW9UCYIZIY6IZIKQ29UDGVUDC1UEXBLIWIWIWIWIAWIZ2UVCG5NIL0SWYJLCSIWIRIDWIZZQIYIZZZIYYYWWWWNZZZZZZZZZYYYWWWWWNZZZYX0ZZZZZZYYYYYYYIjgtlessijiwmdctwfyultivil0swyjlcsisiir4lwftei1kyxriiwimjaxntexmdlumdyxmzixwijdlfsixeilcikec1hbxotywxnb3jpdghtiiwiqvdtnc1itufdniqti1nijdlfsixeilcikec1hbxoty3jlvudglhbcikflsukvkkvkkv1qkvkv1nv1zlzlvzlvzlwqqtc3qtms9zmy9hd3v0x3jlx3jlcxv3jlqvlc3qqqixqixvvv19-F-x-amz-amz算法=AWS4-HMAC-HMAC-hz=256-shajjlajjjjjjjjjjjjjjjjjst-1/s3/aws4_请求-F x-amz-date=20151109T061321Z-F key=2007-Mar-2/-F file=@“,
“关键字名称”:”https://s3.amazonaws.com/backup/2007-Mar-2/..."
}

期待您的反馈。感谢aws cli现在支持
presign
命令。您可以运行

$ aws s3 presign s3://test-bucket/test-file.txt
https://test-bucket/test-file.txt?Expires=1499152189&Signature=some-sha
这将生成一个url,您可以与任何人共享该url,以便在3600秒内下载该文件

您可以使用
更改时间段--expires in

$ aws s3 presign s3://test-bucket/test-file.txt --expires-in 600 
生成的url将在10分钟后过期


您可以阅读更多信息。

我认为没有任何预构建的cli命令\sub命令来获取私有bucket url,您可以参考预签名。 若您希望在私有bucket中有一个公共url,那个么对象read是public而不是bucket。 对于公共aws url,您可以使用一些东西-我已经在powershell中编写了此内容,您可以将此
$profile

Function getAwsUrl{
[CmdletBinding(DefaultParameterSetName="S3Path")]
    param(
    [parameter (ParameterSetName="S3Path",mandatory=$true)]$s3path,
    [parameter (ParameterSetName="BucketKey")]$bucket,
    [parameter (ParameterSetName="BucketKey",mandatory=$true)]$key 
    )
if($s3path)
{
$splits = $s3path.Split('//')
$bucket =$splits[2]
$key = $splits[3]
}
else 
{
#user input bucket and key
$bucket =$bucket
$key = $key
}

#using standard aws region "us-west-2"
Write-Output "https://$bucket.s3.us-west-2.amazonaws.com/$key"
}
示例用法: 确保将
--acl
作为公共读取进行传递

aws s3 cp C:\temp\dumy.txt s3://fpd-uploads/ --acl public-read
getAwsUrl -s3path s3://fpd-uploads/dumy.txt
得到帮助

名称
格塔韦尔
语法
getAwsUrl-s3path[]
getAwsUrl-键[-bucket][]
别名
没有一个
评论
没有一个

我发现了一些与URL签名相关的内容:但还不确定如何使用它。一些与此相关的内容。目前没有帮助,仅供将来参考:根据aws cli功能请求,此功能迟早会添加。我忘了提到我的bucket是私有的,因此我猜需要对URL进行签名。我遇到了以下错误:获取对象acl不是一个选项:#aws s3获取对象acl--bucket mybucket--键blahblah用法:aws[options][parameters]aws:错误:参数操作:无效选项,有效选项为:@NamNguyen如果您在bucket中的对象是公共的,则无需签名。@NamNguyen您是否有最新版本的aws命令行?键入
aws s3 help
查看可用选项列表。看起来我有最新版本:#aws--版本aws cli/1.2.6 Python/2.7.3 Linux/3.8.0-29-generic适用于今天来到这里的所有人,因为这篇文章更新了aws cli,现在您可以简单地使用:$aws s3 presign s3://bucket/key--expires in(秒)然后如何使用预签名的url下载文件?将url粘贴到浏览器中。如果将url粘贴到浏览器并出现此错误:
不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。
您应该向awscli添加一个区域参数:
aws s3预签名s3://test-b
$ aws s3 presign s3://test-bucket/test-file.txt
https://test-bucket/test-file.txt?Expires=1499152189&Signature=some-sha
$ aws s3 presign s3://test-bucket/test-file.txt --expires-in 600 
Function getAwsUrl{
[CmdletBinding(DefaultParameterSetName="S3Path")]
    param(
    [parameter (ParameterSetName="S3Path",mandatory=$true)]$s3path,
    [parameter (ParameterSetName="BucketKey")]$bucket,
    [parameter (ParameterSetName="BucketKey",mandatory=$true)]$key 
    )
if($s3path)
{
$splits = $s3path.Split('//')
$bucket =$splits[2]
$key = $splits[3]
}
else 
{
#user input bucket and key
$bucket =$bucket
$key = $key
}

#using standard aws region "us-west-2"
Write-Output "https://$bucket.s3.us-west-2.amazonaws.com/$key"
}
aws s3 cp C:\temp\dumy.txt s3://fpd-uploads/ --acl public-read
getAwsUrl -s3path s3://fpd-uploads/dumy.txt
NAME
    getAwsUrl

SYNTAX
    getAwsUrl -s3path <Object>  [<CommonParameters>]

    getAwsUrl -key <Object> [-bucket <Object>]  [<CommonParameters>]


ALIASES
    None


REMARKS
    None