Skip to main content
Tembo can use an S3 bucket as a single store for file uploads and VM snapshots. If you skip this configuration, file uploads are unavailable and sandboxes start more slowly.

Step 1: Create an S3 Bucket

Via the AWS CLI

For regions other than us-east-1, add the location constraint:

Via the AWS Console

  1. Go to S3 → Create bucket
  2. Enter a Bucket name (globally unique)
  3. Select your AWS Region
  4. Leave all other settings as default and click Create bucket

Step 2: Create IAM Credentials

Tembo needs an IAM user with read/write access to the bucket. If your EC2 instance already has an IAM instance profile with S3 access, you can skip this step — Tembo will use the instance’s credentials automatically.

Via the AWS CLI

Note the AccessKeyId and SecretAccessKey from the output.

Via the AWS Console

  1. Go to IAM → Users → Create user
  2. Enter a username (e.g. tembo-storage) and click Next
  3. Select Attach policies directly, then click Create policy
  4. In the policy editor, paste:
  5. Name the policy (e.g. tembo-s3-access) and click Create policy
  6. Back on the user creation page, attach the new policy and click Next → Create user
  7. Open the user, go to the Security credentials tab, and click Create access key
  8. Select Application running outside AWS, then click Next → Create access key
  9. Copy the Access key and Secret access key

Step 3: Configure CORS

Tembo uploads image attachments directly from the browser to S3. S3 blocks these cross-origin requests by default, so you must add a CORS rule.

Via the AWS CLI

If you are using a custom domain, replace http://<instance-ip> with your domain.

Via the AWS Console

  1. Go to S3 → select your bucket → Permissions tab
  2. Scroll to Cross-origin resource sharing (CORS) and click Edit
  3. Paste:
  4. Click Save changes

Step 4: Add to config.json

Open /var/lib/tembo/config.json (via the VS Code server at http://<instance-ip>:8888 or SSH) and add:
If your EC2 instance has an IAM instance profile with S3 access, omit accessKeyId and secretAccessKey — Tembo will use the instance’s credentials automatically.
You can also enter these values under Settings → Self-hosted → Object storage on your instance, then select Restart Services.
Then restart all Tembo services:
Restarting only the API is not enough. Agent workers and the VM manager handle VM snapshots and read config.json only when they start.