Imported image not shown correctly when using S3 storage

Penpot is only showing a placeholder image when a new image is imported. The image is imported successfully but not displayed correctly, only a placeholder image is shown.

Steps to reproduce:

  1. Create new file
  2. Import image (jpg file)
  3. The image is imported successfully but not displayed correctly, only a placeholder image is shown. A 403 error is shown in the log when the image is opened.

We have configured S3 compatible storage in Penpot.

Log entry:

[04/Feb/2026:09:49:57 +0000] “GET /assets/by-file-media-id/f330050b-425c-805b-8007-8441de70cec7 HTTP/1.1” 403 216 “http://penpot.sfa.se/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0”

1 Like

Could you please provide a bit more information so we can help investigate the issue?

  1. How have you installed Penpot in your self hosted environment?

  2. What storage configuration are you using for the S3 compatible backend?

  3. Which Penpot version are you currently running?

Once we have these details, we can better understand why the imported images are returning a 403 error and only showing the placeholder.

Does the issue happen with all image formats or only with specific ones such as JPG or PNG?

Thank you for a quick reply!

  1. How have you installed Penpot in your self hosted environment?

    1. Yes, Installed in Openshift with official Helm Chart
  2. What storage configuration are you using for the S3 compatible backend?

    1. S3 compatible “dell objectscale 4.1”
  3. Which Penpot version are you currently running?

    1. Version 2.12.1
  4. Other image file formats?

    1. We have tested png files with same result

/Erik

Do you see any access denied or permission related messages in the ObjectScale logs at the time the image is requested?

Yes, we see some 403 errors in the ObjectScale logs when opening the image. There are double IP adresses in the “X-Forwarded-For” header which is strange. I could not find a way to attach the log files in the reply. I will paste 4 entries from the GET log and 1 entry from PUT.

GET logs (displaying image)

2026-02-03 14:27:54,297 ac1f9513:19a0b7d5743:10b2d6:5a33 [IPv4-adress][IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress][IPv4-adress] urn:ecs:iam::fk1:user/penpot_s3_pilot_user [Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn] GET fk1 penpot_s3_pilot_bucket 9f%2Fa8%2Fbb92428a406bba163b4e2b0951b2 X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260203T142754Z&X-Amz-SignedHeaders=host&X-Amz-Credential= [Amz-Credential]%2Feu-north-1%2Fs3%2Faws4_request&X-Amz-Expires=87300&X-Amz-Signature=cfb8dd39987866a79d894aba5d4bc7ccff05849b2765e7b35ed12af2a4680049 HTTP/1.1 403 9 - 205 7 - - - [IPv4-adress][IPv4-adress] [IPv4-adress] 'X-Forwarded-For: [IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress]
2026-02-03 14:36:33,185 ac1f9513:19a0b7d5743:10b679:3f6f [IPv4-adress][IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress][IPv4-adress] urn:ecs:iam::fk1:user/penpot_s3_pilot_user [Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn] GET fk1 penpot_s3_pilot_bucket 9f%2Fa8%2Fbb92428a406bba163b4e2b0951b2 X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260203T143633Z&X-Amz-SignedHeaders=host&X-Amz-Credential= [Amz-Credential]%2Feu-north-1%2Fs3%2Faws4_request&X-Amz-Expires=87300&X-Amz-Signature=91f745442fad3208b5172ebdcdf9597a72823bb882ec031c460620bdd139afe0 HTTP/1.1 403 9 - 205 7 - - - [IPv4-adress][IPv4-adress] [IPv4-adress] 'X-Forwarded-For: [IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress]
2026-02-03 14:36:33,284 ac1f9513:19a0b7d5743:10b81b:c56 [IPv4-adress][IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress][IPv4-adress] urn:ecs:iam::fk1:user/penpot_s3_pilot_user [Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn] GET fk1 penpot_s3_pilot_bucket 6c%2F4f%2Ff8d24c144fc5bb04aef711ae8706 X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260203T143633Z&X-Amz-SignedHeaders=host&X-Amz-Credential= [Amz-Credential]%2Feu-north-1%2Fs3%2Faws4_request&X-Amz-Expires=87300&X-Amz-Signature=3c1b5d8a2183941e68ec7304f666d829db6d38417772ac602984cb39e7b3ce3e HTTP/1.1 403 7 - 204 6 - - - [IPv4-adress][IPv4-adress] [IPv4-adress] 'X-Forwarded-For: [IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress]
2026-02-03 14:36:36,451 ac1f9513:19a0b7d5743:10b622:2b90 [IPv4-adress][IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress][IPv4-adress] urn:ecs:iam::fk1:user/penpot_s3_pilot_user [Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn][Namn] GET fk1 penpot_s3_pilot_bucket ef%2Fb8%2F8f53d8a64ab4af907d1914800505 X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260203T143636Z&X-Amz-SignedHeaders=host&X-Amz-Credential= [Amz-Credential]%2Feu-north-1%2Fs3%2Faws4_request&X-Amz-Expires=87300&X-Amz-Signature=71534c423d792458e648907f96299d92d3701b96d5e959045d944f7dc5ea430d HTTP/1.1 403 8 - 205 6 - - - [IPv4-adress][IPv4-adress] [IPv4-adress] 'X-Forwarded-For: [IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress]

PUT logs (uploading image)

026-01-30 08:50:29,101 ac1f950c:19a0b5a4d37:100d17:16cba [IPv4-adress][IPv4-adress][IPv4-adress] [IPv4-adress][IPv4-adress][IPv4-adress] urn:ecs:iam::fk1:user/penpot_s3_pilot_user aws-sdk-java/2.33.10%20md/io%23async%20md/http%23NettyNio%20ua/2.1%20api/S3%232.33.x%20os/Linux%235.14.0-570.72.1.el9_6.x86_64%20lang/java%2325.0.1%20md/OpenJDK_64-Bit_Server_VM%2325.0.1+8-LTS%20md/vendor%23Azul_Systems__Inc.%20md/rb%23u%20cfg/auth-source%23env%20m/D,N,N PUT fk1 penpot_s3_pilot_bucket e3%2F5f%2F2ac323624c79abcca1bf6d6d0126 - HTTP/1.1 200 89 22394 - 88 - - - [IPv4-adress] 'X-Forwarded-For: [IPv4-adress][IPv4-adress]

Since uploading seems to works but viewing the image does not, could you check if there is any security rule or restriction that might block image downloads?

I don’t think so. We did a test using our Nexus repositry that is also using S3 storage. Image upload and download worked without any issues.