38

我可以使用我的凭据通过 S3cmd 工具将一些内容推送到 S3 存储桶,使用 s3cmd put contentfile S3://test_bucket/test_file

问题是,我需要在其他没有安装 s3cmd 但安装了 wget 的计算机上从此存储桶中下载内容。

当我尝试使用 wget 从我的存储桶中下载一些内容时,我得到了这个:

 https://s3.amazonaws.com/test_bucket/test_file
--2013-08-14 18:17:40--  `https`://s3.amazonaws.com/test_bucket/test_file
Resolving s3.amazonaws.com (s3.amazonaws.com)... [ip_here]
Connecting to s3.amazonaws.com (s3.amazonaws.com)|ip_here|:port... connected.
HTTP request sent, awaiting response... 403 Forbidden
`2013`-08-14 18:17:40 ERROR 403: Forbidden.

我已经通过 Amazon AWS Web 控制台手动公开了这个存储桶。

问题是:如何使用 wget 从 S3 存储桶下载内容?到一个txt本地文件?

4

10 回答 10

35

您应该能够从如下创建的 url 访问它:

http://{bucket-name}.s3.amazonaws.com/<path-to-file>

现在,假设您的 s3 文件路径是:

s3://test-bucket/test-folder/test-file.txt

您应该能够使用以下网址获取此文件:

http://test-bucket.s3.amazonaws.com/test-folder/test-file.txt

于 2013-08-14T19:23:11.780 回答
32
  1. 转到 S3 控制台

  2. 选择您的对象

  3. 单击“对象操作”

  4. 选择“下载为”

  5. 使用鼠标右键单击“复制链接地址”

  6. 然后使用命令:

    wget --no-check-certificate --no-proxy 'http://your_bucket.s3.amazonaws.com/your-copied-link-address.jpg'

于 2015-05-18T16:23:39.040 回答
9

AWS cli 有一个“presign”命令,可用于获取私有 s3 资源的临时公共 URL。

aws s3 presign s3://private_resource

然后,您可以使用 wget 使用预签名 URL 下载资源。

于 2017-08-03T10:56:17.877 回答
8

明白了...如果您使用带有 --acl 公共标志的 S3CMD 将文件上传到 S3 存储桶中,则可以使用 wget 从 S3 轻松下载文件...

结论:为了使用 wget 下载,首先需要使用 S3 上传内容s3cmd put --acl public --guess-mime-type <test_file> s3://test_bucket/test_file

或者,您可以尝试:

s3cmd setacl --acl-public --guess-mime-type s3://test_bucket/test_file

注意上面的 setacl 标志。这将在 s3 中设置可公开访问的文件,然后您可以执行wget http://s3.amazonaws.com/test_bucket/test_file

于 2013-08-16T21:47:43.893 回答
6

我有几次同样的情况。使用 CLI 从 AWS 下载任何文件的最快和最简单的方法是下一个命令:

aws s3 cp s3://bucket/dump.zip dump.zip

文件下载的速度比通过 wget 快,至少如果您在美国境外。

于 2020-04-14T07:52:29.237 回答
1

我有同样的错误,我通过添加安全组入站规则解决了它:

我的实例所在子网的 HTTPS 类型在端口 443 到我的 IP 地址(因为我是唯一一个访问它的人)。

希望它可以帮助任何忘记包含此内容的人

于 2019-08-07T02:59:50.430 回答
1

请确保已正确授予读取权限。

如果您不想输入任何帐户/密码,只需通过 wget 命令不输入任何密码,确保权限类似于以下设置所示。

通过 Amazon S3 -> 存储桶 -> 权限 - 编辑 检查对象是否为“所有人(公共访问)”并保存更改。像这样的权限设置 - 截图

或选择对象并转到“操作”->“公开”,在权限设置下会做同样的事情。

于 2021-06-10T07:24:05.083 回答
0

如果您无权在您的 Linux 机器上安装 aws 客户端,请尝试以下方法。

  • 到桶并单击下载为按钮。复制生成的链接。
  • 执行下面的命令

    wget --no-check-certificate --no-proxy --user=username --ask-password -O "下载地址"

谢谢

于 2019-05-08T10:25:12.313 回答
0

您已将存储桶公开,您还需要将对象公开。此外,wget 命令不适用于 S3:// 地址,您需要在 AWS Web 控制台中找到对象的 URL。

于 2021-06-10T08:38:15.297 回答
0

我知道我写这篇文章太晚了。但我想我会在这里添加一些没有人提到的东西。

如果您要为 wget 创建预签名的 s3 URL,请确保您正在运行 aws cli v2。我遇到了同样的问题并意识到 s3 有这个问题

Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4

一旦您在 aws cli v2 上签名,此问题就会得到解决

于 2021-08-23T16:30:18.523 回答