What Is S3-Compatible Object Storage?
Object storage keeps your files as discrete objects inside flat containers called buckets, instead of the folders-and-blocks model used by a traditional disk. Each object carries its data, a unique key (its name), and metadata. You reach it over HTTP using the Amazon S3 API — the de-facto standard that thousands of tools, SDKs, and backup utilities already speak.
Because Skyline Cloud object storage is S3-compatible, anything that works with Amazon S3 — the AWS CLI, s3cmd, rclone, MinIO client, Laravel/Django/Node SDKs, Veeam, or your CMS media plugin — works here too. The difference is where your bytes physically live: inside the Kingdom, which keeps you aligned with PDPL data-residency expectations and gives you Arabic-speaking support in your own time zone.
When to use object storage (and when not to)
| Use object storage for | Use block/disk storage for |
|---|---|
| Backups, archives, snapshots | Databases needing low-latency random I/O |
| Static assets: images, video, PDFs | Operating system / boot volumes |
| User uploads in web/mobile apps | Apps that mmap or need a POSIX filesystem |
| Data lakes, logs, big unstructured sets | Software that expects a mounted drive |
Object storage scales to billions of objects, is durable and inexpensive per gigabyte, and is reached by URL — but it is not a filesystem. You don't cd into it or run a database on it.
Step 1: Create a Bucket
After you sign up for Skyline Cloud, open the Object Storage section of the console and create a bucket.
A few rules to know up front:
- Bucket names are globally unique within the endpoint and must be DNS-valid: lowercase letters, numbers, and hyphens; 3–63 characters; no underscores or uppercase. Example:
acme-app-uploads. - Choose Private access by default. Make objects public only when you intend to serve them directly on the web (for example, a public images bucket behind a CDN).
- Note your endpoint URL and region from the bucket details — you'll need both for the CLI.
Step 2: Generate Access Keys
S3 authenticates with a key pair, not a username and password:
- Access Key ID — public-ish identifier.
- Secret Access Key — shown once. Copy it immediately and store it in a password manager or secret vault.
Generate the pair in the Access Keys area of the console. Follow least privilege: create separate keys per application or environment (staging vs. production) so you can revoke one without breaking the others. Never commit keys to Git or paste them into client-side code.
Step 3: Configure the AWS CLI
The AWS CLI is the quickest way to verify everything works. Install it, then create a named profile so it doesn't collide with any real AWS setup:
# Install (Linux/macOS)
pip install awscli # or: brew install awscli
aws configure --profile skyline
# AWS Access Key ID [None]: <YOUR_ACCESS_KEY_ID>
# AWS Secret Access Key [None]: <YOUR_SECRET_ACCESS_KEY>
# Default region name [None]: <YOUR_REGION>
# Default output format [None]: json
Every command then targets your Skyline endpoint with --endpoint-url and the profile:
# List your buckets
aws s3 ls --profile skyline \
--endpoint-url https://<YOUR_ENDPOINT>
# List objects in one bucket
aws s3 ls s3://acme-app-uploads --profile skyline \
--endpoint-url https://<YOUR_ENDPOINT>
Tip: export
AWS_PROFILE=skylineand set the endpoint in your shell so you can drop the flags. Replace<YOUR_ENDPOINT>and<YOUR_REGION>with the values from your bucket details.
Step 4: Upload, Download, and Sync
EP="--endpoint-url https://<YOUR_ENDPOINT> --profile skyline"
# Upload one file
aws s3 cp ./logo.png s3://acme-app-uploads/logo.png $EP
# Download it back
aws s3 cp s3://acme-app-uploads/logo.png ./logo-copy.png $EP
# Sync a whole local directory to a bucket prefix
aws s3 sync ./public/assets s3://acme-app-uploads/assets $EP
# Delete an object
aws s3 rm s3://acme-app-uploads/old.zip $EP
aws s3 sync only transfers changed files, which makes it ideal for incremental backups and deploy pipelines.
Prefer s3cmd?
s3cmd --configure # set host_base / host_bucket to <YOUR_ENDPOINT>
s3cmd put ./report.pdf s3://acme-app-uploads/report.pdf
s3cmd ls s3://acme-app-uploads
Step 5: Share a File With a Presigned URL
To grant temporary, time-boxed access to a private object — without making the whole bucket public — generate a presigned URL:
aws s3 presign s3://acme-app-uploads/report.pdf \
--expires-in 3600 \
--endpoint-url https://<YOUR_ENDPOINT> --profile skyline
The link works for one hour, then expires. This is the right pattern for invoice downloads, one-time delivery links, and user-specific media — far safer than flipping the bucket to public.
Step 6: Wire It Into Your App
Point your application's S3 SDK at the Skyline endpoint instead of AWS. In Laravel, for example, configure the s3 disk in config/filesystems.php:
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'), // https://<YOUR_ENDPOINT>
'use_path_style_endpoint' => true,
],
Set use_path_style_endpoint (or the equivalent forcePathStyle in the AWS SDK for JavaScript) to true so requests use endpoint/bucket/key instead of virtual-hosted subdomains. After that, Storage::disk('s3')->put(...) writes straight to your in-Kingdom bucket.
Good Practices
- Lifecycle rules — auto-expire or down-tier old objects (logs, temp uploads) to control cost.
- Versioning — keep it on for buckets holding irreplaceable data so an accidental overwrite is recoverable.
- Server-side encryption — encrypt at rest for anything sensitive under PDPL.
- Scoped keys — one key per service; rotate and revoke regularly.
Object storage pairs naturally with the rest of your stack: serve assets from a bucket while your site runs on Skyline cloud hosting, and keep backups of your business email and databases in a separate, versioned bucket. For deeper guides on object storage in the Kingdom, see our object storage resource hub.
Start in Minutes
Spin up an S3-compatible bucket with your data kept inside Saudi Arabia, transparent pricing, and local Arabic support. Create your free Skyline Cloud account and create your first bucket today.
Comments
0 total · 0 threads