Object Storage Quick Start Guide
Get connected to Infomaniak Ceph Object Storage in seconds.
1. Connect in 10 Seconds
Option A: Environment Variables
export AWS_ACCESS_KEY_ID="your_access_key"
export AWS_SECRET_ACCESS_KEY="your_secret_key"
export AWS_ENDPOINT_URL="https://s3.gva2.infomaniak.cloud"
Then test with AWS CLI:
aws s3 ls s3://
Option B: Create a Configuration File
s3cmd: Create ~/.s3cfg_gva2:
[default]
access_key = your_access_key
secret_key = your_secret_key
host_base = s3.gva2.infomaniak.cloud
host_bucket = %(bucket)s.s3.gva2.infomaniak.cloud
use_https = True
AWS CLI: Create profile:
aws configure set aws_access_key_id your_access_key --profile infomaniak-s3aas
aws configure set aws_secret_access_key your_secret_key --profile infomaniak-s3aas
aws configure set endpoint_url https://s3.gva2.infomaniak.cloud --profile infomaniak-s3aas
Then use your client:
# s3cmd
s3cmd -c ~/.s3cfg_gva2 ls s3://
# AWS CLI
aws s3 ls s3:// --profile infomaniak-s3aas
2. Public Buckets: Use Path-Style Only
Virtual-hosted style does NOT work for public access due to multi-tenancy isolation. You must use path-style URLs.
When a bucket is configured with a public-read policy, anonymous users must access it using the tenant prefix in the URL path.
Correct public URL format
https://s3.gva2.infomaniak.cloud/<tenant_id>:<bucket>/<object>
Example:
https://s3.gva2.infomaniak.cloud/a580cdc8810649c8885a28192c4c4c4c:mybucket/testfile.txt
Setting a bucket public
Create a policy file public-read-policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}
Apply with s3cmd:
s3cmd -c ~/.s3cfg_gva2 setpolicy public-read-policy.json s3://mybucket
Apply with AWS CLI:
aws s3api put-bucket-policy \
--bucket mybucket \
--policy file://public-read-policy.json \
--endpoint-url https://s3.gva2.infomaniak.cloud
Pre-signed URLs (recommended for controlled sharing)
Generate a time-limited signed URL without making the bucket public.
With s3cmd:
s3cmd -c ~/.s3cfg_gva2 signurl s3://mybucket/file.txt $(date -d '+1 hour' +%s)
With AWS CLI:
aws s3 presign s3://mybucket/file.txt --expires 3600 --profile infomaniak-s3aas
This produces a URL like:
https://s3.gva2.infomaniak.cloud/mybucket/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...
Pre-signed URLs carry the tenant context in the signature, so they work with both virtual-hosted and path-style access.
3. How Rate Limits Work (Token Bucket)
Each S3 frontend applies limits using a token bucket algorithm. Think of it as a bucket that starts full and receives a constant drip of new tokens.
The mechanism
- Burst capacity: Your full minute-limit is available immediately.
- Example: if
max-read-ops = 4000, you can send 4000 GET requests in the first second. - Refill rate: The bucket refills at
limit / 60every second. - Example:
4000 / 60 ≈ 67new tokens per second. - Blocking: If tokens are exhausted, you receive
503 SlowDownuntil the bucket refills.
Practical example
| Scenario | Result |
|---|---|
| Send 2000 requests in 2 seconds | Pass – within the 4000 burst |
| Then send 50 requests/second | Pass – 50 is below the 67/sec refill |
| Then send 500 requests/second | Blocked after ~10 seconds – you drain faster than you refill |
What is limited
| Parameter | Type | Default per RGW | Default cluster-wide (×24 RGW) |
|---|---|---|---|
max-read-ops |
GET and HEAD requests | 4 000/min | 96 000/min (1 600/s) |
max-write-ops |
PUT, POST, DELETE requests | 4 000/min | 96 000/min (1 600/s) |
max-read-bytes |
Data downloaded | 2,5 GB/min | 60 GB/min (1 GB/s) |
max-write-bytes |
Data uploaded | 2,5 GB/min | 60 GB/min (1 GB/s) |
Important: Limits are per RGW daemon. With 24 RGWs, total cluster capacity is 24× the configured value.
Quick Summary
- Endpoint:
https://s3.gva2.infomaniak.cloud - Config:
~/.s3cfg_gva2(s3cmd) or~/.aws/credentials(AWS CLI) - Public access (anonymous):
https://<endpoint>/<tenant>:<bucket>/<object>(path-style) - Presigned URL (temporary access):
s3cmd signurloraws s3 presign - Rate limit: burst = full limit, then refill at
limit/60per second