API & AutomationDoor LYNIO Support

Connecting AWS CLI, SDKs, and S3 Clients to LYNIO

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:

  1. In the LYNIO Console, navigate to Identity & Access Management > S3 Credentials (or access the S3 Keys drawer from Storage > Object Storage).
  2. Click Create S3 Key.
  3. Provide a descriptive label (e.g., ci-cd-backup-key or production-web-uploader).
  4. Click Generate Credentials.
  5. 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...).

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:

  1. Run rclone config and create a new remote named lynio-s3.
  2. Choose storage type s3 and provider Other.
  3. Enter your access_key_id and secret_access_key.
  4. Set the endpoint to https://s3.<region-id>.lynio.cloud.
  5. Set region to <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:* and lynio.cloud:storage:object:* permissions assigned.

Connection Refused or SSL Verification Errors

  • Confirm that your firewall allows outbound HTTPS traffic on port 443 to *.lynio.cloud.
  • If using self-hosted nodes or staging environments with private certificates, supply the custom CA certificate with --ca-bundle in the AWS CLI.