David
David

Reputation: 1569

How can I download a file from an S3 bucket with wget?

I can push some content to an S3 bucket with my credentials through S3cmd tool with s3cmd put contentfile S3://test_bucket/test_file

I am required to download the content from this bucket in other computers that don't have s3cmd installed on them, BUT they have wget installed.

when I try to download some content from my bucket with wget I get this:

 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.

I have manually made this bucket public through the Amazon AWS web console.

How can I download content from an S3 bucket with wget into a local txt file?

Upvotes: 50

Views: 169248

Answers (12)

Nazym Nurbekova
Nazym Nurbekova

Reputation: 1

I had the same mistake

I did the following :

  1. created IAM role > AWS Service type > AmazonS3FullAccess policy inside
  2. applied this role to the EC2 instance
  3. in the the Security Groups opened inbound HTTP and HTTPS to Anywhere-IPv4
  4. made the S3 bucket public
  5. profit! wget works! ✅

Upvotes: 0

Marcos Ranes
Marcos Ranes

Reputation: 41

The simplest way to do that is to disable Block all public firstly.

  1. Hit your bucket name >> go to Permissions >> Block public access (bucket settings) enter image description here

  2. If it is on >> hit Edit >> Uncheck the box, then click on Save changes enter image description here

  3. Now hit the object name >> Object action >> Make public using ACL >> then confirm Make public enter image description here

  4. After that, copy the Object URL, and proceed to download enter image description here

I hope it helps the future askers. Cheers

Upvotes: 1

Akash Singla
Akash Singla

Reputation: 21

I know I'm too late to this post. But thought I'll add something no one mentioned here.

If you're creating a presigned s3 URL for wget, make sure you're running aws cli v2. I ran into the same issue and realized s3 had this problem

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

This gets resolved once you presign on aws cli v2

Upvotes: 0

John
John

Reputation: 47

you have made the bucket public, you need to also make the object public. also, the wget command doesn't work with the S3:// address, you need to find the object's URL in AWS web console.

Upvotes: 0

ZoomRui
ZoomRui

Reputation: 17

Please make sure that the read permission has been given correctly.

If you do not want to enter any account/password, just by wget command without any password, make sure the permission is like the following setting shows.

By Amazon S3 -> Buckets -> Permisions - Edit Check the Object for "Everyone (public access)" and save changes.permission setting like this - screenshot

or choose the objest and go to "Actions" -> "Make public", would do the same thing under permission settings.

Upvotes: 0

tiagomatos
tiagomatos

Reputation: 641

  1. Go to S3 console

  2. Select your object

  3. Click 'Object Actions'

  4. Choose 'Download As'

  5. Use your mouse right-click to 'Copy Link Address'

  6. Then use the command:

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

Upvotes: 41

Anton Danylchenko
Anton Danylchenko

Reputation: 2358

I had the same situation for couple of times. It’s the fastest and the easiest way to download any file from AWS using CLI is next command:

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

File downloaded way faster than via wget, at least if you are outside of US.

Upvotes: 10

Hilmi Marzuqi
Hilmi Marzuqi

Reputation: 21

I had the same error and I solved it by adding a Security Groups Inbound rule:

HTTPS type at port 443 to my IP address ( as I'm the only one accessing it ) for the subnet my instance was in.

Hope it helps anyone who forgot to include this

Upvotes: 1

Dino
Dino

Reputation: 1

incase you do not have access to install aws client on ur Linux machine try below method.

  • got to the bucket and click on download as button. copy the link generated.
  • execute command below

    wget --no-check-certificate --no-proxy --user=username --ask-password -O "download url"

Thanks

Upvotes: 0

beevor
beevor

Reputation: 141

AWS cli has a 'presign' command that one can use to get a temporary public URL to a private s3 resource.

aws s3 presign s3://private_resource

You can then use wget to download the resource using the presigned URL.

Upvotes: 9

David
David

Reputation: 1569

Got it ... If you upload a file in an S3 bucket with S3CMD with the --acl public flag then one shall be able to download the file from S3 with wget easily ...

Conclusion: In order to download with wget, first of one needs to upload the content in S3 with s3cmd put --acl public --guess-mime-type <test_file> s3://test_bucket/test_file

alternatively you can try:

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

notice the setacl flag above. THAT WILL set the file in s3 accessible publicly then you can execute the wget http://s3.amazonaws.com/test_bucket/test_file

Upvotes: 10

Amar
Amar

Reputation: 12010

You should be able to access it from a url created as follows:

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

Now, say your s3 file path is:

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

You should be able to wget this file with following url:

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

Upvotes: 43

Related Questions