---
title: Connect DigitalOcean Spaces
description: "Create a limited DigitalOcean Spaces access key, find your region, and connect your Spaces to quickS3 without handing over your whole account."
section: Connections
order: 80
audience: [owner]
status: published
lastVerified: 2026-09-15
sources:
  - web/src/components/app/provider-connections/provider-utils.ts
  - web/src/components/app/provider-connections/ConnectionFormCard.tsx
  - src/objects/routes/providers.cors.ts
  - src/objects/routes/providers.create.ts
---

DigitalOcean calls its buckets "Spaces". You need a Spaces access key and the region your Spaces are in.

## 1. Create an access key

In the DigitalOcean control panel, open **Spaces Object Storage → Access Keys** and create a key.

- Choose **Limited Access** and pick the Spaces your team will use.
- Give each one **Read/Write/Delete**, or **Read** for a read-only connection.

Copy the access key and the secret. DigitalOcean only shows the secret once.

A limited key can't create Spaces, and can't list Spaces it wasn't given. That's fine for everyday use. Give the key access to all Spaces only if you want to create Spaces from quickS3.

## 2. Add the connection

1. In quickS3, open **Connections**, select **New connection**, and pick **DigitalOcean Spaces**.
2. Enter a **Name**.
3. In **Region**, pick your Spaces' region, like `fra1` or `nyc3`. quickS3 shows the endpoint it will use below the field.
4. With a limited key, type your Space names into **Bucket scopes**, separated by commas.
5. Paste the **Access key ID** and **Secret key**.
6. Keep CORS updates on and select **Connect provider**.

Then select **Test connection**. You want **Connection verified** with "CORS allows direct uploads".

A connection reaches one region. If you have Spaces in `fra1` and `nyc3`, add a connection for each.

## If uploads are blocked by CORS

quickS3 sets CORS on each Space when you save and when you test. If the test still warns about CORS, the key probably isn't allowed to change it. You'll need to add the rule yourself, and DigitalOcean's control panel can't do it: it has no way to expose the `ETag` header that large uploads need. Use an S3 tool instead, with this rule:

```xml
<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>https://quicks3.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <MaxAgeSeconds>3600</MaxAgeSeconds>
  </CORSRule>
</CORSConfiguration>
```

DigitalOcean's [CORS guide](https://docs.digitalocean.com/products/spaces/how-to/configure-cors/) shows how to apply it with `s3cmd`. Keep any rules the Space already has, and test again afterwards. If the Space uses DigitalOcean's CDN, purge its cache after the change.

## Creating Spaces

The **Create bucket** button needs a **Full Access** key. New Spaces are private, and quickS3 sets up their CORS straight after creating them. Nobody but Owners can use a new Space until a role grants it.
