Bring Your Own Bucket (BYOB) Storage
Complete Data Sovereignty with Your Own Storage Infrastructure
Overview
BYOB Storage enables enterprises to store documents in their own cloud storage infrastructure. Your data never leaves your control, ensuring compliance with data residency requirements and organizational security policies.
Supported Providers
Tier 1: Major Cloud Providers
| Provider | S3 Compatible | Region Support | Enterprise Features |
|---|---|---|---|
| AWS S3 | Native | 30+ regions | IAM, KMS, VPC endpoints |
| Azure Blob | Via adapter | 60+ regions | RBAC, Key Vault |
| Google Cloud Storage | Via adapter | 35+ regions | IAM, Cloud KMS |
Tier 2: S3-Compatible Providers
| Provider | Use Case | Min Storage | Pricing Model |
|---|---|---|---|
| MinIO | Self-hosted, air-gapped | No minimum | Self-managed |
| Wasabi | Cost-effective archival | 1 TB | $6.99/TB/month |
| DigitalOcean Spaces | Simplicity, CDN included | 250 GB | $5/month + usage |
| Backblaze B2 | Archival, low egress costs | No minimum | $6/TB/month |
| Cloudflare R2 | Zero egress fees | No minimum | $0.015/GB/month |
Configuration
AWS S3
PUT /api/v1/admin/storage/byob
Content-Type: application/json
Authorization: Bearer YOUR_ADMIN_TOKEN
{
"provider": "aws_s3",
"config": {
"bucket_name": "your-archivus-bucket",
"region": "us-east-1",
"access_key_id": "AKIA...",
"secret_access_key": "...",
"server_side_encryption": "aws:kms",
"kms_key_id": "arn:aws:kms:us-east-1:123456789:key/..."
}
}
AWS IAM Policy (Minimum Required):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-archivus-bucket",
"arn:aws:s3:::your-archivus-bucket/*"
]
}
]
}
MinIO (Self-Hosted)
PUT /api/v1/admin/storage/byob
{
"provider": "minio",
"config": {
"endpoint": "https://minio.internal.yourcompany.com",
"bucket_name": "archivus-documents",
"access_key_id": "...",
"secret_access_key": "...",
"use_ssl": true
}
}
Wasabi
PUT /api/v1/admin/storage/byob
{
"provider": "wasabi",
"config": {
"bucket_name": "your-archivus-bucket",
"region": "us-east-1",
"access_key_id": "...",
"secret_access_key": "..."
}
}
DigitalOcean Spaces
PUT /api/v1/admin/storage/byob
{
"provider": "digitalocean",
"config": {
"endpoint": "https://nyc3.digitaloceanspaces.com",
"bucket_name": "your-space-name",
"region": "nyc3",
"access_key_id": "...",
"secret_access_key": "..."
}
}
Backblaze B2
PUT /api/v1/admin/storage/byob
{
"provider": "backblaze",
"config": {
"endpoint": "https://s3.us-west-002.backblazeb2.com",
"bucket_name": "your-bucket",
"region": "us-west-002",
"access_key_id": "...",
"secret_access_key": "..."
}
}
Cloudflare R2
PUT /api/v1/admin/storage/byob
{
"provider": "cloudflare_r2",
"config": {
"endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
"bucket_name": "your-bucket",
"access_key_id": "...",
"secret_access_key": "..."
}
}
Security
Credential Encryption
All credentials are encrypted using AES-256-GCM before storage:
- Encryption at rest with rotating keys
- Credentials never logged or exposed in API responses
- Separate encryption per tenant
Network Security
Recommended Configuration:
- VPC Endpoints (AWS) - Keep traffic on AWS backbone
- Private Link (Azure) - Private connectivity
- IP Allowlisting - Restrict access to Archivus IPs
- Bucket Policies - Enforce HTTPS-only access
Example Bucket Policy (HTTPS Only):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyNonHTTPS",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::your-bucket",
"arn:aws:s3:::your-bucket/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
Migration
From Shared Storage to BYOB
Zero-downtime migration process:
# Step 1: Configure BYOB destination
POST /api/v1/admin/storage/migration
{
"source": "shared",
"destination": "byob",
"byob_config": { /* your BYOB config */ }
}
# Step 2: Monitor progress
GET /api/v1/admin/storage/migration/status
# Step 3: Complete migration
POST /api/v1/admin/storage/migration/complete
Migration Process:
- Validation - Verify BYOB credentials and permissions
- Shadow Mode - New uploads go to both locations
- Backfill - Existing documents copied to BYOB
- Verification - Integrity checks on all documents
- Cutover - Switch reads to BYOB
- Cleanup - Remove from shared storage (optional)
Migration Monitoring
GET /api/v1/admin/storage/migration/status
Response:
{
"status": "in_progress",
"phase": "backfill",
"progress": {
"total_documents": 15000,
"migrated": 8500,
"failed": 0,
"percent_complete": 56.7
},
"estimated_completion": "2026-01-18T15:30:00Z"
}
Storage Architecture
Document Organization
your-bucket/
├── tenant_{tenant_id}/
│ ├── documents/
│ │ ├── {year}/
│ │ │ ├── {month}/
│ │ │ │ ├── {document_id}.{ext}
│ │ │ │ └── {document_id}_thumb.png
│ ├── analytics/
│ │ └── parquet/
│ │ └── {table}_{date}.parquet
│ └── exports/
│ └── {export_id}.zip
Metadata Storage
Document metadata remains in Archivus database:
- File references point to BYOB locations
- Search indexes maintained by Archivus
- AI embeddings stored separately (configurable)
Tier Availability
| Storage Option | Team | Enterprise |
|---|---|---|
| Shared Storage | Default | Available |
| Dedicated Bucket | Available | Available |
| BYOB Storage | 6 providers | 6 providers + custom |
| Multi-Region Replication | - | Available |
| Custom Encryption Keys | - | Available |
API Reference
Storage Admin Endpoints
| Endpoint | Method | Description |
|---|---|---|
/admin/storage/config |
GET | Current storage configuration |
/admin/storage/byob |
PUT | Configure BYOB storage |
/admin/storage/byob/validate |
POST | Test BYOB credentials |
/admin/storage/migration |
POST | Start migration |
/admin/storage/migration/status |
GET | Migration progress |
/admin/storage/migration/complete |
POST | Complete migration |
Troubleshooting
Connection Issues
# Test connectivity
POST /api/v1/admin/storage/byob/validate
{
"provider": "aws_s3",
"config": { /* your config */ }
}
Common Issues:
| Error | Cause | Solution |
|---|---|---|
AccessDenied |
IAM permissions | Check bucket policy and IAM role |
NoSuchBucket |
Bucket doesn’t exist | Create bucket first |
InvalidAccessKeyId |
Wrong credentials | Verify access key |
SignatureDoesNotMatch |
Wrong secret key | Verify secret key |
ConnectionTimeout |
Network issue | Check VPC/firewall settings |
Related Documentation
Need help configuring BYOB? Contact Enterprise Support →