Перейти к содержимому

SDK с WebShield S3

С объектным хранилищем WebShield работает любой AWS SDK — направьте S3-клиент на endpoint WebShield и включите path-style адресацию. Как получить ключи и создать бакеты — см. Объектное хранилище.

  • Endpoint: https://s3.webshield.pro
  • Access Key ID и Secret Access Key со страницы Хранилище S3 в личном кабинете.
  • Полное имя бакета с префиксом аккаунта (например, u42-backups).

Не вшивайте секретный ключ в исходный код — читайте его из переменной окружения или менеджера секретов.

import boto3
s3 = boto3.client(
"s3",
endpoint_url="https://s3.webshield.pro",
aws_access_key_id="WSS...",
aws_secret_access_key="<секрет>",
region_name="us-east-1", # любое значение; WebShield его не использует
)
s3.upload_file("backup.tar.gz", "u42-backups", "db/backup.tar.gz")
s3.download_file("u42-backups", "db/backup.tar.gz", "restored.tar.gz")
for obj in s3.list_objects_v2(Bucket="u42-backups", Prefix="db/").get("Contents", []):
print(obj["Key"], obj["Size"])

boto3 использует path-style адресацию по умолчанию, если задан нестандартный endpoint_url.

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { readFileSync } from "node:fs";
const s3 = new S3Client({
endpoint: "https://s3.webshield.pro",
region: "us-east-1",
forcePathStyle: true,
credentials: {
accessKeyId: "WSS...",
secretAccessKey: process.env.WS_SECRET_KEY,
},
});
await s3.send(new PutObjectCommand({
Bucket: "u42-backups",
Key: "db/backup.tar.gz",
Body: readFileSync("backup.tar.gz"),
}));

forcePathStyle: true обязателен.

cfg, _ := config.LoadDefaultConfig(context.TODO(),
config.WithRegion("us-east-1"),
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
"WSS...", os.Getenv("WS_SECRET_KEY"), "")),
)
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.BaseEndpoint = aws.String("https://s3.webshield.pro")
o.UsePathStyle = true
})
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'endpoint' => 'https://s3.webshield.pro',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'WSS...',
'secret' => getenv('WS_SECRET_KEY'),
],
]);
  • region требуется SDK, но WebShield его игнорирует — подойдёт любое значение.
  • Включайте path-style адресацию (forcePathStyle / UsePathStyle / use_path_style_endpoint); boto3 делает это автоматически для нестандартных endpoint.
  • Бакеты создаются и удаляются только в личном кабинете; вызовы SDK CreateBucket/DeleteBucket недоступны.
  • При отрицательном балансе хранилище переходит в режим «только чтение»: загрузка отклоняется, скачивание работает. Пополните баланс, чтобы вернуть запись.