Skip to content

Storage

The Storage settings page lets you connect a private S3-compatible bucket — AWS S3, Cloudflare R2, Backblaze B2, Wasabi, or any MinIO-compatible endpoint. Once verified, all new file uploads go directly to your bucket instead of the shared platform bucket. A one-time migration copies your existing files over.

Premeena Settings panel — the school control centre that includes Storage configuration for connecting your own S3-compatible bucket alongside general school settings and other integrations
BadgeMeaning
Platform defaultNo custom bucket configured. Files go to the shared platform bucket.
VerifiedCustom bucket is configured and the connection test passed. All new uploads go to your bucket.
Not VerifiedA bucket is saved but the connection test has not been completed or has failed.

ProviderNotes
AWS S3Use a regional endpoint such as https://s3.us-east-1.amazonaws.com.
Cloudflare R2Endpoint is https://<account-id>.r2.cloudflarestorage.com. R2 has no egress fees.
Backblaze B2Use the S3-compatible endpoint for your region, e.g. https://s3.us-west-004.backblazeb2.com.
WasabiEndpoint is https://s3.wasabisys.com (or a regional variant).
Custom / MinIOAny S3-compatible endpoint. Enter the full URL including the scheme.

  1. Create a bucket in your storage provider’s console. Give it a private (non-public) access policy — the platform accesses files through pre-signed URLs, not public reads.

  2. Create an IAM user or API key with the following permissions on that bucket:

    • s3:GetObject
    • s3:PutObject
    • s3:DeleteObject
    • s3:ListBucket
    • s3:HeadBucket
  3. Configure CORS on the bucket so that the browser can complete the upload verification step. The allowed origin must include your school’s app domain. If you skip this step, the connection test will fail at step 3 and the AI-assisted CORS fix guide will open automatically.

  4. Enter the details on the Storage settings page:

    • Provider — select the matching card
    • Endpoint — the full S3-compatible URL (pre-filled for known providers)
    • Region — required for AWS; leave blank for providers that don’t use regions
    • Bucket — the exact bucket name
    • Access Key ID and Secret Access Key
  5. Click Save, then Test Connection to verify the five-step connection check.


When you click Test Connection, the platform runs five checks in order:

StepWhat is checkedRuns on
1Bucket exists (HeadBucket)Server
2Credentials have write permission (PutObject on a test file)Server
3Browser can upload via a pre-signed URL (CORS verification)Browser
4Browser can download via a pre-signed URL (CORS verification)Browser
5Cleanup — test file deleted, bucket marked VerifiedServer

Steps 3 and 4 run directly from your browser against your bucket. If either fails due to a CORS error, a Get CORS fix guide button appears. Clicking it opens a drawer with an AI-generated, provider-specific set of CORS configuration instructions streamed in real time.


When the browser-side test steps fail, the platform detects your provider and streams a tailored fix guide. The guide tells you exactly which CORS rules to add and where to add them in your provider’s console. Follow the steps, save the CORS policy, then click Retry to re-run the test from step 3.


After your bucket is verified for the first time, a Migrate existing files panel appears. This one-time migration copies all files that were previously uploaded to the shared platform bucket into your new bucket.

Migration statusMeaning
Not startedMigration has not been initiated.
In progressFiles are being copied. A real-time progress bar shows the count.
CompletedAll files copied successfully.
FailedOne or more files could not be copied. The failed count is shown. You can retry.

The Storage Usage row shows the total number of files and total size stored in your bucket, broken down by category (profile photos, class files, documents, etc.). Click the row to expand the full per-category breakdown.


Click Remove storage config at the bottom of the page and confirm. This deletes your saved configuration (bucket name, credentials, and verification status). New uploads will revert to the shared platform bucket immediately. Files already in your bucket are not deleted — they remain accessible as long as the pre-signed URLs generated before removal are still valid.


The Storage settings page requires the AI Config Manage permission (ai_config:manage). This is the same permission used for the AI Assistant settings page. It is held by owners, managers, and any staff position explicitly granted the permission.


”HeadBucket failed — bucket not found or credentials invalid”

Section titled “”HeadBucket failed — bucket not found or credentials invalid””

Check that the bucket name matches exactly (case-sensitive) and that the access key ID and secret are correct. Make sure the IAM user has at least s3:HeadBucket on the bucket.

”Upload test failed (step 3) — CORS error”

Section titled “”Upload test failed (step 3) — CORS error””

Your bucket is blocking browser uploads. Use the Get CORS fix guide button to get provider-specific instructions. The most common fix is adding an AllowedOrigin rule that includes your school’s app domain.

”Download test failed (step 4) — CORS error”

Section titled “”Download test failed (step 4) — CORS error””

Same cause as above — the CORS policy is missing GET in AllowedMethods or is missing the correct origin. The fix guide covers both.

”I saved new credentials but the status shows Not Verified”

Section titled “”I saved new credentials but the status shows Not Verified””

Changing the endpoint, region, bucket name, or credentials invalidates the previous verification. Re-run the connection test to verify again.

”The migration shows some failed files”

Section titled “”The migration shows some failed files””

Failed files are usually caused by transient network errors or bucket permission issues at copy time. Check that the IAM policy includes s3:PutObject and retry the migration. Files that succeeded on a previous run are not re-copied.