# An AWS S3 Integration with Discourse Tutorial would be nice

**URL:** https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950
**Category:** Support
**Tags:** s3
**Created:** [November 29, 2025, 8:40pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950 "2025-11-29T20:40:00Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Jim\_Starkweather](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jim_starkweather/32/181916_2.png) [@Jim\_Starkweather](https://meta.discourse.org/u/Jim_Starkweather)
#### Post date: [November 29, 2025, 8:40pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/1 "2025-11-29T20:40:00Z")

</div>

After banging my head into a wall for 3 hours trying to make my AWS S3 configuration work with Discourse on AWS Lightsail instance I am of the strong belief that a simple straightforward tutorial on this would be nice. There are ALL sorts of rabbit holes to go down with this. I mean I have no problems making a bucket that can remotely pull files using the AWS S3 URL provided, but once you bring in the CDN, the S3 Endpoint (which the settings UX clearly states can be blank but on trying to upload gives the internal message of “Endpoint can’t be blank”), and just basic things like what permissions level do you ACTUALLY need if using a CDN via Amazon’s CloudFront.

It’s just a lot. I have scoured the internet and nothing even close exists and certainly nothing I could find that was current with Discourse today.

Thanks for any pointers.

I think my main stumbling block atm is the permissions at least from the standpoint of Discourse asking for Key ID and Key Secret. I have a user in IAM for this but there is NOTHING in the S3 Buckets info that seems to associate this user to that bucket so I have not a clue if this is the disconnect. Honestly I have used LightSail and AWS for 8+ years now but this S3 area is written in a sort of Dev UX style obfuscation with 50 different ways to do things. Not intuitive in the least.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [November 29, 2025, 8:47pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/2 "2025-11-29T20:47:34Z")

</div>

Did you look at [Configure an S3 compatible object storage provider for uploads](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916)?

---

<div class="post-metadata">

### Author: ![Jim\_Starkweather](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jim_starkweather/32/181916_2.png) [@Jim\_Starkweather](https://meta.discourse.org/u/Jim_Starkweather)
#### Post date: [November 29, 2025, 9:14pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/4 "2025-11-29T21:14:59Z")

</div>

Hi Jay. Yes I have looked at that one many times now. Being that it’s from 2020 it has things like DISCOURSE\_S3\_REGION settings, but the admin area has no such setting.

Also.. wouldn’t I rake my old data AFTER setting up the S3 properly and verifying it works?

This is the kind of stuff I am talking about though. The settings in Discourse make a whole lot of assumptions on a user knowing AWS, shell, and Discourse like a dev would.

---

<div class="post-metadata">

### Author: ![Jim\_Starkweather](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jim_starkweather/32/181916_2.png) [@Jim\_Starkweather](https://meta.discourse.org/u/Jim_Starkweather)
#### Post date: [November 29, 2025, 9:25pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/5 "2025-11-29T21:25:04Z")

</div>

Here is where I am at currently.

I have a CDN working and manually uploaded a file which works:

> ```plaintext
> https://s3.kitmaker.net/IMG_7184.JPG
> 
> ```

When I upload via Discourse I get:

Failed to open TCP connection to [discourse-kitmaker.s3.kitmaker.net:443](http://discourse-kitmaker.s3.kitmaker.net:443) (getaddrinfo: Name or service not known)

Here are my current settings:

 ![Screenshot 2025-11-29 162258](https://global.discourse-cdn.com/meta/original/4X/a/6/4/a64e0f69e54caadb415961c822dfa1849190a44b.png)

Oh and hey there is that Region setting I was ignoring. Yeah but that didn’t help once set properly. 😃

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [November 29, 2025, 9:40pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/6 "2025-11-29T21:40:28Z")

</div>

> [@Jim\_Starkweather](#):
>
> Yes I have looked at that one many times now

But you show that you’re not following those instructions.

> [@Jim\_Starkweather](#):
>
> the admin area has no such setting

That’s why you need to follow those instructions and not do it in the ux.

Those are the instructions to follow.

And don’t miss the bit that you add to the yml to have the assets uploaded to s3.

I would do it on a test site so you don’t screw up your live one.

> [@Jim\_Starkweather](#):
>
> wouldn’t I rake my old data AFTER setting up the S3 properly and verifying it works?

Yes. Add the s3 settings to env in the yml, rebuild, then test that they work, then run the rake task. They have to be set there, not in the database. I’m not sure why they haven’t hidden them from the UX.

But there is also this: [How are you authenticating Discourse to AWS? Help us improve the settings!](https://meta.discourse.org/t/how-are-you-authenticating-discourse-to-aws-help-us-improve-the-settings/385039)

---

<div class="post-metadata">

### Author: ![Jim\_Starkweather](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jim_starkweather/32/181916_2.png) [@Jim\_Starkweather](https://meta.discourse.org/u/Jim_Starkweather)
#### Post date: [November 29, 2025, 10:20pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/7 "2025-11-29T22:20:57Z")

</div>

Thanks for those links. The first link you posted has another link in the AWS area ( [Set up file and image uploads to S3](https://meta.discourse.org/t/set-up-file-and-image-uploads-to-s3/7229) ) from 2013 so I am running up immediately against them saying to put in X bucket policy (which seems outdated) when the AWS CDN via Cloudfront has already replaced the policy with it’s own. Change it? Leave it? This is the crap I mean. Ugggg!

---

<div class="post-metadata">

### Author: ![Jim\_Starkweather](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jim_starkweather/32/181916_2.png) [@Jim\_Starkweather](https://meta.discourse.org/u/Jim_Starkweather)
#### Post date: [November 29, 2025, 10:25pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/8 "2025-11-29T22:25:27Z")

</div>

It’s not really the “Fill in the blank” settings in app.yml or the admin settings that are the issue. It’s more a combination of how those settings are interacting with the bucket created or the CDN, etc. So it’s the Amazon side of things that needs some enlightening. I mean I get it, that’s not Discourse, but it sure would be helpful to DISCOURSE users getting actually functionally working via S3. I hope that makes sense.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [November 29, 2025, 11:08pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/9 "2025-11-29T23:08:22Z")

</div>

I see. I haven’t set up an aws bucket in a while. That part can be more complicated, but it’s not what you posted how you did.

But that too is pretty straight forward, you paste the stuff in and then if you have errors you can address them.

> [@Jim\_Starkweather](#):
>
> It’s not really the “Fill in the blank” settings in app.yml or the admin settings that are the issue

That’s the only issue you have described.

How did you set up the bucket? What permissions for you give the user? Did you generate the keys? What errors did you get (but I thought you said that you added an image to a post and it worked?

---

<div class="post-metadata">

### Author: ![Jim\_Starkweather](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jim_starkweather/32/181916_2.png) [@Jim\_Starkweather](https://meta.discourse.org/u/Jim_Starkweather)
#### Post date: [December 1, 2025, 9:28pm UTC](https://meta.discourse.org/t/an-aws-s3-integration-with-discourse-tutorial-would-be-nice/389950/10 "2025-12-01T21:28:43Z")

</div>

Sorry I said I manually uploaded that test file.

Here is the setup page for a bucket.

 ![Screenshot 2025-12-01 162336](https://global.discourse-cdn.com/meta/original/4X/9/6/8/9684f07d295c7aaab14a880e0645f807522cb163.png)

 ![Screenshot 2025-12-01 162232](https://global.discourse-cdn.com/meta/original/4X/d/2/5/d251cc2e7188b2851c540418d878350c7d3c0077.png)

 ![Screenshot 2025-12-01 162300](https://global.discourse-cdn.com/meta/original/4X/4/c/8/4c879e950711b89fb081813ecfe570b47bf0dd57.png)

There is no specific user creation for keys and secrets, or, on the subsequent pages either.

 ![image](https://global.discourse-cdn.com/meta/original/4X/7/4/1/74113fe806578df45727c608fa01d5703fc440eb.png)

 ![image](https://global.discourse-cdn.com/meta/original/4X/4/f/8/4f8cedd2951d26f54abfed5a243f680d590a5744.png)
