【问题标题】:How to Generate a Presigned S3 URL via AWS CLI如何通过 AWS CLI 生成预签名 S3 URL
【发布时间】:2018-02-02 18:52:12
【问题描述】:

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

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

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

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

有什么帮助吗?

【问题讨论】:

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


    【解决方案1】:

    你试过aws s3 presign吗?

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

    这将生成一个将在 3600 秒后过期的 URL(默认)

    aws s3 presign s3://mybucket/myobject
    

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

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

    输出

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

    【讨论】:

    • 我是第一次尝试这个。我不知道我们如何使用 AWS CLI 为 S3 对象创建签名 url。
    • 感谢您的回答。会检查。所以一个人可以拥有的最长时间是7天?
    • 那么你可以通过这个授予上传到特定文件夹的权限吗?
    • 这似乎不适用于 PUT 或 POST 但也许我做错了什么。文档只建议 GET,但也许还有另一种方法可以使用 CLI 完成此操作。
    • 这需要更多的关注互联网谢谢@helloV。希望我早点看到它。
    【解决方案2】:

    现在支持通配符。

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

    【讨论】:

    • AFAICT,会做presign链接,但是无效。
    【解决方案3】:

    如果你这样做aws s3 presign s3://bucket-address/my-file.csv

    你得到了网址。然后,当您将其传递给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中描述了更多

    【讨论】:

    • 感谢您的提醒,但在这个问题的背景下,这并不是什么新鲜事。引号的问题仅仅是与&amp; 相关的问题以及shell 如何解释它。在另一个 shell 中可能不是问题,比如 windows 命令行。
    【解决方案4】:

    @Michael 和 @Shabbir,

    是的,aws s3 presign 不接受通配符/通配符/、--include--exclude--recursive。 aws ls 不接受 -1;它表现为ls -lpls -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
    

    【讨论】:

      【解决方案5】:

      所以预签名 URL 的命令是:

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

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

      如有错误,很高兴得到纠正。

      【讨论】:

      • 您似乎无法为存储桶生成预签名的 url。
      • 是的,aws s3 presign 不接受通配符/通配符/、--include--exclude--recursive'. aws ls` 不接受 -1;它表现为ls -lpls -lph。循环工作:``` for file in $(aws s3 ls s3://mybucket --profile myprofile --endpoint-url | awk '{print $NF}'); do aws s3 presign --expires-in 300 "s3://mybucket/$file" --profile my-profile --endpoint-url 完成```
      猜你喜欢
      • 1970-01-01
      • 2016-12-14
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2019-03-11
      • 1970-01-01
      • 2019-12-14
      相关资源
      最近更新 更多