Step 1: Create an S3 Bucket
Via the AWS CLI
us-east-1, add the location constraint:
Via the AWS Console
- Go to S3 → Create bucket
- Enter a Bucket name (globally unique)
- Select your AWS Region
- 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
AccessKeyId and SecretAccessKey from the output.
Via the AWS Console
- Go to IAM → Users → Create user
- Enter a username (e.g.
tembo-storage) and click Next - Select Attach policies directly, then click Create policy
- In the policy editor, paste:
- Name the policy (e.g.
tembo-s3-access) and click Create policy - Back on the user creation page, attach the new policy and click Next → Create user
- Open the user, go to the Security credentials tab, and click Create access key
- Select Application running outside AWS, then click Next → Create access key
- 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
http://<instance-ip> with your domain.
Via the AWS Console
- Go to S3 → select your bucket → Permissions tab
- Scroll to Cross-origin resource sharing (CORS) and click Edit
- Paste:
- 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:
accessKeyId and secretAccessKey — Tembo will use the instance’s credentials automatically.
Then restart the API: