Projects can be configured to store and serve files from an AWS S3 bucket. This allows your organisation's data to remain in your own AWS account.
You will need the Configure File Settings permission on the project. See Permissions for details.
Before configuring the project, you will need the following from AWS:
ap-southeast-2)s3:ListBuckets3:GetObjects3:PutObjects3:DeleteObjects3:AbortMultipartUpload (required for multipart uploads)| Field | Description |
|---|---|
| AWS S3 Bucket | The name of your S3 bucket (e.g. my-company-data) |
| AWS S3 Region | The region the bucket is in (e.g. ap-southeast-2) |
| Key Prefix | Optional path prefix for all files in this project (e.g. project-a/). This allows multiple projects to share a single bucket by scoping each to a different prefix. Leave empty to use the bucket root. |
| AWS IAM User | The Access Key ID for your IAM user (e.g. AKIAIOSFODNN7EXAMPLE) |
| AWS IAM User Secret | The Secret Access Key for your IAM user |
The project will now use the configured S3 bucket for file storage and access.
When uploading files, the browser uploads directly to S3 using presigned URLs. For this to work, your S3 bucket must have a CORS (Cross-Origin Resource Sharing) policy that allows requests from the domain where udServer is hosted.
In the AWS Console, navigate to your bucket > Permissions > Cross-origin resource sharing (CORS) and add the following configuration:
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "PUT", "HEAD"],
"AllowedOrigins": ["https://your-udserver-domain.com"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
Replace https://your-udserver-domain.com with the origin your udServer instance is served from. This is typically https://udcloud.nuclideon.com or https://au-udcloud.nuclideon.com. You can list multiple origins if needed.
| Field | Why it's needed |
|---|---|
| AllowedMethods | PUT is required for direct uploads. GET and HEAD for file downloads and metadata. |
| ExposeHeaders | ETag must be exposed so the browser can read the upload part checksums returned by S3. Without this, uploads will fail at the completion step. |
| MaxAgeSeconds | Caches the preflight response so the browser doesn't send an OPTIONS request before every chunk. |
Without this configuration, file uploads from the browser will fail with CORS errors.