---
title: "Custom AWS S3 Storage"
description: "A step-by-step tutorial on setting up the AWS S3 storage integration for the Topol Plugin, so uploaded files are saved to your own S3 bucket."
url: https://docs.topol.io/email-editor/guide/custom-aws-s3-storage.html
---

# Custom AWS S3 Storage

> **The Custom storage feature is available with the Plugin Expansion plan and higher.**
>
> If you're on the Plugin for Startup plan, consider upgrading to access this feature. For more details, visit our [pricing page](https://topol.io/pricing) or contact support.

The Custom Cloud Storage feature in the Topol Plugin lets you connect your own storage provider. Alongside Google Cloud Storage, Cloudflare R2, and DigitalOcean Spaces, you can also use Amazon Web Services (AWS S3). This tutorial walks through that setup step by step.

Throughout this guide, you will create a few values that you'll need at the very end (your **bucket name**, **region**, **access key**, and **secret key**). Save each one somewhere safe as you go.

## Create an S3 bucket dedicated to the TOPOL plugin integration

**1)** Log in to your AWS console at [https://s3.console.aws.amazon.com/s3/home](https://s3.console.aws.amazon.com/s3/home).

**2)** Click **Create bucket** and fill out the form:

-   **Bucket name**: enter your own name (for example, `topol-plugin`). _Save it for the final step._
-   Under **Object Ownership**, select **ACLs enabled**, then select **Object writer**.
-   Under **Block Public Access settings**, deselect **Block all public access**, then tick **I acknowledge that the current settings might result in this bucket and the objects within becoming public.** to confirm.
-   Leave all remaining options at their defaults and click the **Create bucket** button.

## Add a CORS configuration so the editor can interact with the bucket

**1)** Open the bucket you just created (find it on [https://s3.console.aws.amazon.com/s3/home](https://s3.console.aws.amazon.com/s3/home)).

![AWS S3 bucket Permissions tab](https://docs.topol.io/custom-storage/aws/aws-01-permissions-tab.png)

**2)** Open the **Permissions** tab.

**3)** Scroll to the bottom of the page. In the **Cross-origin resource sharing (CORS)** section, click the **Edit** button and paste in the following statement:

```json
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
           "https://o6lwlm3sld.execute-api.eu-west-1.amazonaws.com",
           "https://d5aoblv5p04cg.cloudfront.net",
           "https://v3.develop.email-assets.topol.io",
           "https://v3.email-assets.topol.io",
           "https://v4.develop.email-assets.topol.io",
           "https://v4.email-assets.topol.io"
        ],
        "ExposeHeaders": []
    }
]
```

**4)** Click the **Save changes** button.

## Create your own policy

This policy scopes the plugin's access to just the bucket you created.

**1)** Go to [https://console.aws.amazon.com/iam/home#/policies](https://console.aws.amazon.com/iam/home#/policies).

**2)** Click **Create policy**.

**3)** In the form that appears, select the following:

-   **Service:** S3
-   **Actions:**
    -   List -> ListBucket
    -   Read -> GetObject
    -   Write -> PutObject, DeleteObject
    -   Permissions management -> PutObjectAcl
-   **Resources:**
    -   Select **specific**.
    -   For **bucket**, click **Add ARN**. Type your bucket name from the first section and click the **Add** button.
    -   For **object**, click **Add ARN**. Type your bucket name from the first section, and in the **object** name field select **Any**. Click the **Add** button.

**4)** Click **Review policy**.

**5)** Type a policy name.

**6)** Click **Create policy**.

## Create an AWS user

The plugin authenticates as a dedicated user that carries this policy.

**1)** Go to [https://console.aws.amazon.com/iam/home#/users](https://console.aws.amazon.com/iam/home#/users).

**2)** Click the **Add user** button.

**3)** Fill in the **User name** field (for example, `topol-plugin-user`).

**4)** Click the **Next: Permissions** button in the bottom-right corner.

**5)** Click **Attach existing policies directly**.

**6)** In the search field, type the name of the policy you created in the previous section (for example, `topol-plugin`).

**7)** Select the policy and click the **Next** button in the bottom-right corner.

**8)** Click **Next** again, then click **Create user**.

## Create access keys

**1)** Go to [https://console.aws.amazon.com/iam/home#/users](https://console.aws.amazon.com/iam/home#/users).

**2)** Click the user you just created.

**3)** Open the **Security credentials** tab.

**4)** Scroll to **Access keys**.

**5)** Click **Create Access key**.

**6)** Select **Third-party service** and create the access key.

**7)** Copy the **Access key** and **Secret key**. _Save both for the final step._

**8)** Click **Done**.

![AWS create access keys](https://docs.topol.io/custom-storage/aws/aws-02-create-access-keys.png)

## Set your AWS credentials for the API Token in TOPOL

The remaining steps happen in the Topol app, using the values you saved above.

**1)** Log in to your Topol account at [https://app.topol.io/](https://app.topol.io/). The **API Tokens** tab is selected by default.

**2)** Select the API Token where you want to set up your own AWS S3 storage and switch to the **Configuration** tab.

**3)** In the **Custom storage** section, click **Set up Amazon S3 storage**.

![Custom storage section in the API Token Configuration tab](https://docs.topol.io/custom-storage/custom-storage-options.png)

**4)** A modal will appear. Fill in the credentials you saved during this setup:

-   **Bucket name**: the bucket you created in the first section.
-   **Region**: the AWS region you selected for your bucket (for example, `eu-west-1`).
-   **Access key**: the access key you saved earlier.
-   **Private key**: the secret key you saved earlier.
-   **CloudFront URL** (optional): if you serve your bucket through a CloudFront distribution, enter its URL.

![Set up your own Amazon S3 bucket modal](https://docs.topol.io/custom-storage/aws/aws-03-setup-modal.png)

**5)** Click **Finish setup**.

**Setup complete. The plugin now uploads files to your S3 bucket.**

If you hit any issues, contact our [support](https://topol.io/contact).
