RustFS is Tasmanian Cloud's sovereign object storage solution, providing S3-compatible storage with post-quantum cryptography and zero-egress pricing for Australian traffic.
RustFS delivers:
- S3-Compatible API: Drop-in replacement for AWS S3
- Post-Quantum Security: Kyber-768 and Dilithium-3 encryption
- Zero Egress Fees: No charges for AU-based data transfer
- 100% Tasmanian: Data never leaves Australian jurisdiction
- Immutable Backups: WORM-compliant storage options
flowchart TB
subgraph "RustFS Architecture"
CLIENT[Client Applications]
subgraph "Access Layer"
S3API[S3-Compatible API]
ADMIN[Admin API]
end
subgraph "Security Layer"
PQ[Post-Quantum Crypto
Kyber-768 + Dilithium-3]
ENC[Client-Side Encryption]
end
subgraph "Storage Layer"
NODE1[RustFS Node 1]
NODE2[RustFS Node 2]
NODE3[RustFS Node 3]
end
subgraph "Backend"
CEPH[Ceph Cluster]
ZFS[ZFS Pools]
end
end
CLIENT --> S3API
S3API --> PQ
PQ --> ENC
ENC --> NODE1
ENC --> NODE2
ENC --> NODE3
NODE1 --> CEPH
NODE2 --> CEPH
NODE3 --> CEPH
Full compatibility with AWS S3 API:
| Feature | Status | Notes |
|---|
| Buckets | ✅ Full | Create, list, delete |
| Objects | ✅ Full | PUT, GET, DELETE, HEAD |
| Multipart Upload | ✅ Full | Large file support |
| Versioning | ✅ Full | Object versioning |
| ACLs | ✅ Full | Access control lists |
| Lifecycle | ✅ Full | Object lifecycle policies |
| CORS | ✅ Full | Cross-origin requests |
| Events | 🔄 Partial | Webhook notifications |
flowchart LR
subgraph "Encryption Flow"
DATA[Plaintext Data] --> CLIENT[Client-Side Encryption]
CLIENT --> KYBER[Kyber-768 KEM
Key Encapsulation]
KYBER --> DILITHIUM[Dilithium-3
Digital Signatures]
DILITHIUM --> AES[AES-256-GCM
Data Encryption]
AES --> STORAGE[Encrypted Storage]
end
Cryptographic Primitives:
| Component | Algorithm | Security Level |
|---|
| Key Encapsulation | Kyber-768 | NIST Level 3 |
| Digital Signatures | Dilithium-3 | NIST Level 3 |
| Symmetric Encryption | AES-256-GCM | 256-bit |
| Hash Function | SHA3-256 | 256-bit |
| Tier | Durability | Availability | Use Case | Price |
|---|
| Hot | 99.999999999% | 99.99% | Active data, websites | $0.05/GB/mo |
| Warm | 99.999999999% | 99.9% | Backups, archives | $0.03/GB/mo |
| Cold | 99.99999999% | 99.5% | Long-term retention | $0.01/GB/mo |
| Glacier | 99.9999999% | On-demand | Compliance archives | $0.005/GB/mo |
- Proxmox VE 8.0+
- Ceph cluster (for backend storage)
- Minimum 3 nodes for HA
- 10Gbps network recommended
# Create RustFS node VMs on Proxmox
for i in 1 2 3; do
qm create 910$i \
--name rustfs-node-$i \
--memory 16384 \
--cores 8 \
--cpu host \
--net0 virtio,bridge=vmbr30 \
--scsihw virtio-scsi-single \
--scsi0 local-zfs:500,format=raw \
--ostype l26 \
--agent enabled=1
done
# On each RustFS node
apt update && apt install -y rustfs
# Configure RustFS
cat > /etc/rustfs/config.toml << 'EOF'
[server]
bind = "0.0.0.0:9000"
admin_bind = "127.0.0.1:9001"
[storage]
backend = "ceph"
ceph_config = "/etc/ceph/ceph.conf"
ceph_pool = "rustfs-data"
[security]
enable_pq_crypto = true
pq_algorithm = "kyber768_dilithium3"
client_encryption = true
[s3]
enabled = true
region = "tasmania-1"
EOF
# Start RustFS
systemctl enable rustfs
systemctl start rustfs
# Create Ceph pool for RustFS
ceph osd pool create rustfs-data 128 128
ceph osd pool application enable rustfs-data rustfs
# Set pool properties
ceph osd pool set rustfs-data size 3
ceph osd pool set rustfs-data min_size 2
# On node 1 - Initialize cluster
rustfs cluster init --node-id 1 --bind 10.0.30.11:9000
# On nodes 2 and 3 - Join cluster
rustfs cluster join --node-id $i --bind 10.0.30.1$i:9000 --seed 10.0.30.11:9000
# Configure AWS CLI for RustFS
aws configure set aws_access_key_id YOUR_ACCESS_KEY
aws configure set aws_secret_access_key YOUR_SECRET_KEY
aws configure set region tasmania-1
# Create alias for RustFS endpoint
alias rustfs-s3='aws s3 --endpoint-url https://s3.tasmanian.cloud'
# Create a bucket
rustfs-s3 mb s3://my-bucket
# Upload a file
rustfs-s3 cp file.txt s3://my-bucket/
# Download a file
rustfs-s3 cp s3://my-bucket/file.txt ./
# List buckets
rustfs-s3 ls
# List objects
rustfs-s3 ls s3://my-bucket/
# Sync directory
rustfs-s3 sync ./local-dir s3://my-bucket/remote-dir/
import boto3
s3 = boto3.client(
's3',
endpoint_url='https://s3.tasmanian.cloud',
aws_access_key_id='YOUR_KEY',
aws_secret_access_key='YOUR_SECRET',
region_name='tasmania-1'
)
# Upload with client-side encryption
s3.put_object(
Bucket='my-bucket',
Key='sensitive-data.txt',
Body=b'confidential data',
ServerSideEncryption='aws:kms'
)
# Download
response = s3.get_object(Bucket='my-bucket', Key='sensitive-data.txt')
data = response['Body'].read()
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const client = new S3Client({
endpoint: "https://s3.tasmanian.cloud",
region: "tasmania-1",
credentials: {
accessKeyId: "YOUR_KEY",
secretAccessKey: "YOUR_SECRET",
},
});
await client.send(new PutObjectCommand({
Bucket: "my-bucket",
Key: "file.txt",
Body: "Hello from Tasmanian Cloud!",
}));
Configure RustFS as the backup destination for Paymenter:
# Edit Paymenter .env
BACKUP_DRIVER=s3
S3_ENDPOINT=https://s3.tasmanian.cloud
S3_ACCESS_KEY_ID=paymenter_backup_key
S3_SECRET_ACCESS_KEY=your_secret
S3_BUCKET=paymenter-backups
S3_REGION=tasmania-1
S3_USE_PATH_STYLE_ENDPOINT=true
| Metric | Single Node | 3-Node Cluster |
|---|
| Read Throughput | 2 GB/s | 5 GB/s |
| Write Throughput | 1.5 GB/s | 4 GB/s |
| Read IOPS | 50,000 | 150,000 |
| Write IOPS | 30,000 | 90,000 |
| Latency (p99) | 5ms | 8ms |
- Use multipart uploads for files >100MB
- Enable compression for text-based content
- Configure lifecycle policies to move old data to cheaper tiers
- Use Cloudflare R2 as CDN for global distribution
| Metric | Description | Alert Threshold |
|---|
| storage_used_bytes | Total storage used | >80% capacity |
| request_rate | Requests per second | >10,000 req/s |
| error_rate | Failed requests | >0.1% |
| latency_p99 | 99th percentile latency | >100ms |
| replication_lag | Data replication delay | >5 seconds |
# Check RustFS health
curl http://localhost:9001/health
# Expected response
{
"status": "healthy",
"nodes": 3,
"storage_used": 549755813888000,
"storage_total": 1099511627776000,
"uptime": 86400
}
| Tier | Price (per GB/month) | Minimum |
|---|
| Hot | $0.05 | None |
| Warm | $0.03 | 1 TB |
| Cold | $0.01 | 10 TB |
| Glacier | $0.005 | 50 TB |
| Operation | Price (per 1,000 requests) |
|---|
| PUT, COPY, POST | $0.005 |
| GET, SELECT | $0.0004 |
| DELETE | Free |
| Destination | Price (per GB) |
|---|
| Australia | $0.00 (FREE) |
| New Zealand | $0.02 |
| Asia Pacific | $0.08 |
| Europe | $0.09 |
| Americas | $0.09 |