LYNIO Object Storage (lynio-s3) is fully compatible with the AWS S3 REST protocol and implements the AWS Signature Version 4 (SigV4) cryptographic authentication standard. You can connect to your buckets using standard AWS tools, client SDKs (Python, Go, Node.js, Java), command-line utilities (aws-cli, s3cmd, rclone), and desktop clients like Cyberduck.
Generating S3 Credentials in the Console
To authenticate programmatic requests, you must create dedicated S3 Access Credentials:
- In the LYNIO Console, navigate to Identity & Access Management > S3 Credentials (or access the S3 Keys drawer from Storage > Object Storage).
- Click Create S3 Key.
- Provide a descriptive label (e.g.,
ci-cd-backup-keyorproduction-web-uploader). - Click Generate Credentials.
- The console will display your credentials:
- Access Key ID: Starts with
lk_(e.g.,lk_9a4f21bc7d8e03f1). - Secret Access Key: Starts with
lks_(e.g.,lks_f782ab410d9e83ca4...).
- Access Key ID: Starts with
IMPORTANT
The Secret Access Key is hashed with bcrypt in the database and is shown only once. Store it securely in your password manager or secrets vault before closing the modal.
Service Endpoints & Addressing
Every LYNIO region provides a dedicated S3 gateway endpoint. You can find the exact Endpoint URL for your target region directly in the LYNIO Console under Storage > Object Storage or in your bucket details drawer.
Regional endpoints follow the standard URL pattern:
https://s3.<region-id>.lynio.cloud
- Replace
<region-id>with the region identifier of your bucket (e.g.,eu-west-1).
LYNIO supports both Virtual-Hosted-Style requests (https://<bucket>.s3.<region-id>.lynio.cloud) and Path-Style requests (https://s3.<region-id>.lynio.cloud/<bucket>). For maximum compatibility across third-party tools and SDKs, enabling path-style addressing is recommended.
Configuring the AWS CLI
Install the official AWS CLI on your workstation or server, then configure a named profile:
aws configure --profile lynio
Enter your LYNIO credentials when prompted:
- AWS Access Key ID:
<YOUR_LK_KEY_ID> - AWS Secret Access Key:
<YOUR_LKS_SECRET_KEY> - Default region name:
<YOUR_REGION>(e.g.,eu-west-1) - Default output format:
json
Common AWS CLI Commands
Always specify the --endpoint-url pointing to your regional LYNIO S3 gateway (or set the AWS_ENDPOINT_URL_S3 environment variable in AWS CLI v2):
1. List all buckets:
aws s3 ls --endpoint-url https://s3.<region-id>.lynio.cloud --profile lynio
2. Upload a file to a bucket:
aws s3 cp database-backup.sql s3://my-backups/db/ --endpoint-url https://s3.<region-id>.lynio.cloud --profile lynio
3. Synchronize a local directory with a bucket:
aws s3 sync ./dist/ s3://static-assets/site/ --endpoint-url https://s3.<region-id>.lynio.cloud --profile lynio
4. Generate a presigned download URL from the CLI:
aws s3 presign s3://my-backups/db/database-backup.sql --expires-in 3600 --endpoint-url https://s3.<region-id>.lynio.cloud --profile lynio
Connecting with Python (boto3)
Using Python's boto3 library requires setting the custom endpoint_url:
import boto3
# Initialize S3 client for LYNIO
s3 = boto3.client(
"s3",
endpoint_url="https://s3.<region-id>.lynio.cloud",
aws_access_key_id="lk_YOUR_KEY_ID",
aws_secret_access_key="lks_YOUR_SECRET_KEY",
region_name="<YOUR_REGION>",
)
# List buckets
response = s3.list_buckets()
for bucket in response["Buckets"]:
print(f"Bucket: {bucket['Name']}")
# Upload a file
s3.upload_file("local-image.iso", "vm-images", "debian-12.iso")
print("Upload completed successfully!")
Connecting with Go (aws-sdk-go-v2)
In Go, configure a custom BaseEndpoint resolver in aws.Config:
package main
import (
"context"
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
func main() {
cfg := aws.Config{
Region: "<YOUR_REGION>",
Credentials: credentials.NewStaticCredentialsProvider(
"lk_YOUR_KEY_ID",
"lks_YOUR_SECRET_KEY",
"",
),
BaseEndpoint: aws.String("https://s3.<region-id>.lynio.cloud"),
}
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.UsePathStyle = true // Use path-style requests
})
output, err := client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
if err != nil {
log.Fatalf("Failed to list buckets: %v", err)
}
for _, b := range output.Buckets {
fmt.Printf("Bucket: %s\n", *b.Name)
}
}
Configuring rclone for Automated Backups
rclone is an open-source tool for syncing files between cloud storage and local systems:
- Run
rclone configand create a new remote namedlynio-s3. - Choose storage type
s3and providerOther. - Enter your
access_key_idandsecret_access_key. - Set the
endpointtohttps://s3.<region-id>.lynio.cloud. - Set
regionto<YOUR_REGION>.
Sync a directory to LYNIO Object Storage with high-speed multi-threaded streaming:
rclone sync /var/backups lynio-s3:my-system-backups/daily/ --progress --transfers 8
Troubleshooting Common Errors
HTTP 403 Forbidden / SignatureDoesNotMatch
- Ensure your system clock is accurate using NTP. AWS SigV4 handshakes enforce a 15-minute replay defense window.
- Verify that you selected the matching region corresponding to your bucket's location.
- Double-check that your user or service account has the
lynio.cloud:storage:bucket:*andlynio.cloud:storage:object:*permissions assigned.
Connection Refused or SSL Verification Errors
- Confirm that your firewall allows outbound HTTPS traffic on port
443to*.lynio.cloud. - If using self-hosted nodes or staging environments with private certificates, supply the custom CA certificate with
--ca-bundlein the AWS CLI.