Home Knowledge base Skyline Cloud Getting Started with S3-Compatible Object Storage KNOWLEDGE BASE

Getting Started with S3-Compatible Object Storage

Learn what S3-compatible object storage is, when to use it, and how to create a bucket, manage access keys, and upload files with the AWS CLI on Skyline Cloud — with your data kept inside Saudi Arabia.

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=skyline and 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.

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.