AWS CLI从AWS CLI获取私有存储桶的S3 URL

Nam*_*yen 27 amazon-s3 amazon-web-services aws-cli

我可以使用以下命令成功将文件上传到私有 S3存储桶:

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

我想发出一个AWS CLI命令来返回myfile.txt的临时URL下载,有谁知道怎么做?

我google了,看起来我必须做一些签名来获取临时URL,例如:http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

Chi*_*and 23

aws cli现在支持presign命令.你可以跑

$ aws s3 presign s3://test-bucket/test-file.txt
https://test-bucket/test-file.txt?Expires=1499152189&Signature=some-sha
Run Code Online (Sandbox Code Playgroud)

这将生成一个URL,您可以与任何人共享该文件,以便在3600秒内下载该文件.

你可以改变时间段 --expires-in

$ aws s3 presign s3://test-bucket/test-file.txt --expires-in 600 
Run Code Online (Sandbox Code Playgroud)

生成的URL将在10分钟后到期.

您可以在aws cli文档中阅读有关presign的更多信息.

  • 将网址粘贴到浏览器中。 (2认同)

Nam*_*yen 12

我用Google搜索并决定编写此脚本以帮助我为S3生成singed-url.

https://github.com/gdbtek/aws-tools

  • 对于今天来到这里的所有人来说,自从这篇文章以来,aws cli已经更新,现在你可以简单地使用:$ aws s3 presign s3:// bucket/key --expires-in(seconds) (10认同)

Ric*_*ico 10

您可以使用以下URL格式:

https://<bucket-name>.s3.amazonaws.com/<object or key name>
Run Code Online (Sandbox Code Playgroud)

或旧式:

https://s3.amazonaws.com/<bucket-name>/<object or key name>
Run Code Online (Sandbox Code Playgroud)

要使其可访问,您需要允许公共访问您的对象或附加适当的存储桶策略.

例如,以下存储桶策略显示对存储桶zzzyyy对象'yyyeee'的公共访问权限

$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee
{
    "Owner": {
        "DisplayName": "owner",
        "ID": "Some hash of owner"
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
            "Permission": "READ"
        },
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
            "Permission": "WRITE"
        },
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
        "Permission": "READ_ACP"
        },
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
            "Permission": "WRITE_ACP"
        },
        {
            "Grantee": {
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        },
        {
            "Grantee": {
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ_ACP"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看存储桶策略的示例:

http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

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

S3控制台