是的,我认为这将是一个很棒的功能。 我在想这将是一个新的 s3 子命令? 我一直在对 s3 命令代码进行一些内部更改,以便更轻松地添加子命令。 我一直在使用它来开始重构ls
命令以修复ls
几个报告问题。
还没有完全完成,但这是我到目前为止所拥有的:
https://github.com/jamesls/aws-cli/compare/s3-ls-permissions#diff -b88a66f4bd148577a9390cb980d7eeb9R321
是的,这就是我要找的。 请允许不仅按持续时间指定到期时间,还可以按特定日期时间指定到期时间。 需要 UTC 时区、ISO 格式、完整秒数,以“Z”结尾的字符串在我看来很好用(例如“2014-05-30T00:00:00Z”)。
如果你真的需要从命令行生成 tmpurl,我可以推荐我的命令行工具s3tmpgen
无论如何,我真的会在 AWS CLI 中邀请这样的功能,它成为我日常使用 AWS S3 的宝贵工具。
+1
+1
我希望使用 S3 来托管要部署到 Heroku 的代码包,这将是一个很棒的功能:)
https://blog.heroku.com/archives/2014/5/22/introducing_the_app_json_application_manifest
+1
+1 在 AWS CLI 中有这个会很棒
只是对任何最终到达这里的人的说明,您可以通过深入到boto
库中轻松完成此操作: https :
感谢您的反馈。 我会看看这个,我同意这将是添加到 AWS CLI 的一个很好的功能。
谢谢,@johnboxall。 Boto 当然是一种选择,但对于那些在没有本地 Python 部署的情况下部署 cli 二进制文件的人(想想 Windows 用户),走这条路与拉下 PowerShell SDK 并通过 .NET SDK 做事情一样多。 仍然希望在 CLI 中看到这个本机。 :咧嘴笑:
仅适用于现在直接使用 boto 的任何人,直到将其添加到 aws-cli 我想我会添加一个快速示例说明。 我现在已经找了几次了,宁愿把它和这张票和@johnboxall评论一起。 这对于某些人来说可能非常明显,但对于非 Python 开发者来说则不然
在已经安装了 python 的盒子上
$ python --version
Python 2.7.6
$ sudo pip install boto
$ python
>>> import boto
>>> s3 = boto.connect_s3()
>>> bucket = s3.get_bucket('your-bucket-name')
>>> key = bucket.get_key('the-prefix/the-name-of-the-object.mp4')
>>> key.generate_url(3600)
'https://your-bucket-name.s3.amazonaws.com/the-prefix/the-name-of-the-object.mp4?Signature=CgDfFa45DBXFiMfASxSTpiSuHKM%3D&Expires=1415913273&AWSAccessKeyId=ABCDEDKSY344ACVDG'
以@isleshocky77的示例为基础...添加参数和小错误检查:
$ cat boto-get-signed-url.py
#!/usr/bin/python
import boto
import argparse
parser = argparse.ArgumentParser(description='Generate an S3 signed URL')
parser.add_argument('-b', '--bucket', help='bucket name')
parser.add_argument('-k', '--key', help='prefix/key')
parser.add_argument('-s', '--seconds', type=int, help='time in seconds until the URL will expire')
args = parser.parse_args()
s3 = boto.connect_s3()
bucket = s3.get_bucket(args.bucket)
key = bucket.get_key(args.key)
if bucket.get_key(args.key):
print key.generate_url(args.seconds)
else:
print 's3://' + args.bucket + '/' + args.key + ' does not exist'
$ ./boto-get-signed-url.py -b superbucket -k "test" -s 60
https://superbucket.s3.amazonaws.com/test?Signature=n6cO8RH%2FbNwQhuZVNNazo3q04x0%3D&Expires=1416695021&AWSAccessKeyId=AKIEXAMPLEKEYNOTREAL
$ boto-get-signed-url.py --help
usage: boto-get-signed-url.py [-h] [-b BUCKET] [-k KEY] [-s SECONDS]
Generate an S3 signed URL
optional arguments:
-h, --help show this help message and exit
-b BUCKET, --bucket BUCKET
bucket name
-k KEY, --key KEY prefix/key
-s SECONDS, --seconds SECONDS
time in seconds until the URL will expire
大家好
在再次检查此问题的状态后,我对提供工具s3tmpgen 的Python 包 ttr.aws.utils.s3 进行了更新。 更新不仅允许使用 https 生成 url,而且(使用选项-http
)还允许生成 http。
仍然期待用 awscli 解决方案替换它。
:+1:
+1 使 s3 签名的 url 成为 cli 的一部分
:+1:
+1
我想,我理解,为什么要花这么长时间:事情必须按顺序发生,好消息是,它看起来像是在路线图上。
由于 AWS CLI 基于botocore
,因此应首先在那里解决。 boto/botocore#291 正在请求它。
拉取请求 boto/botocore#504 已经合并到分支clients-only
和路线图(在 https://github.com/boto/botocore 的自述文件中提到)声称,botocore 目前只是合并分支之前的一步clients-only
进入开发(然后测试版、GA 和 AWS CLI 有“本机”工具为我们提供功能)。
@vlcinsky
是的,一旦仅客户端分支合并到 botocore,我们将能够在 CLI 中获取签名 url 的生成。 然后,必须在 CLI 端完成的主要工作量是创建一个公开该功能的良好 API。
:+1: 确实是一个方便的功能
+1
正如@kyleknap 所指出的,要做的一件事就是为此功能设计好的 API。
我看到以下用例:
“tmpGET”真的很简单,因为唯一的输出是 url,唯一的输入是存储桶/密钥和过期时间
日期(到期时间)。
“tmpPOST”要复杂得多,因为必须定义发布策略。
要解决的一个问题是,将这些操作放在哪里,似乎有两种选择:
aws s3
aws s3api
我今天不会处理更复杂的“tmpPOST”,而是专注于更简单的“tmpGET”
aws s3 tmpurl
这样的解决方案相当容易实施,将有助于 80% 的实际
使用情况(将对象发布到 AWS S3 并提供临时 url 以共享
与某人)。
该概念将建立在现有的aws s3 ls
基础之上,但存在以下差异:
--expires
来定义 url 过期的日期和时间或--expires-in
到恐怕,目前没有简单的方法可以在确切的时间创建 tmp url,所以初始
版本将仅提供--expires-in
选项,默认值为 3600 秒。
为 AWS S3 上的现有对象数量创建一堆 tmp url 非常容易。 它节省了
获取准确的存储桶/键名称值的障碍。
这种基于aws s3 ls
的方法的缺点是,不能为对象创建 tmp url,这
还不存在。
无论如何,这可以稍后通过aws s3api
解决方案解决。
很好地放在那里。 文章几乎肯定会围绕已发布数据的某些服务器端处理而构建,而 get 方法用例通常要容易得多。 当您说这将涵盖大多数用例时,我非常同意。
我想补充一点,我认为临时 URL 与在 s3 上定位文件没有任何关系。 如果有人想要生成完整的签名 URL 集,这是逻辑 cli 不需要做更多包装的逻辑。 tmpurl 原语是我心目中最小可行的产品。
我已经在我的本地分支中为 s3 对象实现了(不完全)预先定义的 URL。
https://github.com/quiver/aws-cli/tree/s3-presigned-url
这是botocore.generate_presigned_url
的薄包装器,还没有准备好生产。 正如@vlcinsky 所指出的,我们需要一个良好的 API 设计,如AWSCLI
。 一旦修复,我就可以实现它。
我注意到的一件事是generate_presigned_url
需要client_method
参数,该参数指定要签署的 S3 API(例如get_object
)。 在我目前的实现中,它暴露给用户,但最好是用户友好的,比如提供不同的子命令( aws s3 geturl
, aws s3 uploadurl
)或切换选项( --type upload
)
$ echo hello world > test.txt
$ aws s3 url s3://BUCKET/test.txt --client-method put_object --expires-in 180
https://BUCKET.s3.amazonaws.com/test.txt?AWSAccessKeyId=AKIAIXXXXXXXXXXXXXXX&Expires=1451449621&Signature=KgwO9lBx942fFvln0JW0NX7mKS0%3D
$ URL=`aws s3 url s3://BUCKET/test.txt --client-method put_object --expires-in 180`
$ curl -D - -X PUT --upload-file test.txt $URL
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
x-amz-id-2: /90B1axPysBg3P8kv8BlR8RoqdO1JfajCN5BM5/TxIT3VjGphKmyGX8EgCQEtCXYhuNkVne5+GM=
x-amz-request-id: 685F03CA6C84FAC0
Date: Wed, 30 Dec 2015 05:18:38 GMT
ETag: "6f5902ac237024bdd0c176cb93063dc4"
Content-Length: 0
Server: AmazonS3
$ aws s3 cp s3://BUCKET/test.txt -
hello world
$ URL=`aws s3 url s3://BUCKET/test.txt --client-method get_object --expires-in 180`
$ curl -D - -X GET $URL
HTTP/1.1 200 OK
x-amz-id-2: WuRokcBm9wnDMaRkD8kNeGijuKEzVp3eagi7JbpPXmmchEljsiP4wZX5w1TaeuK94n2526FGKMI=
x-amz-request-id: 1EBCAA7A691A577D
Date: Wed, 30 Dec 2015 05:20:14 GMT
Last-Modified: Wed, 30 Dec 2015 05:19:15 GMT
ETag: "6f5902ac237024bdd0c176cb93063dc4"
Accept-Ranges: bytes
Content-Type: binary/octet-stream
Content-Length: 12
Server: AmazonS3
hello world
上面的python生成一个url,如:'https://
当我尝试卷曲文件时,出现 SSL 证书问题:证书链无效
如果我使用选项 -k 卷曲,我可以通过这个,但我也知道如果 url 看起来像:' https://s3-
证书有效,有没有办法更改网址或其他修复方法?
谢谢,
加里
例如:' https://s3-us-west-1.amazonaws.com/bucket/dir/dir/file '
更新,使用 boto3 能够生成正确签名的 url。
+1
令人印象深刻 - 官方 CLI 工具在 3 年内没有得到对签名 url 的支持,尽管它存在于 boto 和s3cmd 中
1+
+1
+1
这事有进一步更新吗? 令人惊讶的是,这还没有。
+1
我写了一个作为解决方法并按预期工作: https :
大家好,感谢反馈。 这是我们积压的东西。 我还没有确切的日期,但是一旦我们提出拉取请求,我就会链接到这个问题。
伟大的! 谢谢!
是否有可能获得整个 s3 文件夹的预签名 url? 包括用于浏览文件夹的 Web 界面吗?
@tommeda不可能。 预签名 url 始终与单个存储对象相关。 您所说的类似于静态网站,但要控制对其的访问(如果基于 AWS S3),则必须编写一些代理。 已经存在的尝试很少,在我看来(大约一年前研究过)没有一个是容易的。
您始终可以生成一个网页,该网页为每个对象提供接口并包含预签名的 url,然后将接口放入 s3 并将预签名的 url 返回给接口。 不是很容易 peasy,并且界面希望是特定于使用的
最有用的评论
令人印象深刻 - 官方 CLI 工具在 3 年内没有得到对签名 url 的支持,尽管它存在于 boto 和s3cmd 中