← Cloudflare Workers VPC / workers-vpc / examples
Доступ к частному бакету S3
В этом примере показано, как получить доступ к приватному бакету S3, недоступному из публичного интернета. В этом руководстве мы настроим Workers VPC Service для внутреннего хранилища, совместимого с S3, создадим Worker, который отправляет запросы к этому бакету, и развернём Worker, чтобы проверить внесённые изменения.
Предварительные требования
- Частный S3-совместимый сервис хранения, запущенный в вашей VPC/виртуальной сети (например, AWS S3 VPC endpoint, MinIO или аналогичный)
- Виртуальная машина/экземпляр EC2, запущенный в той же VPC, что и ваш S3 VPC endpoint
- Аккаунт Workers с доступом к Workers VPC
1. Настройте Cloudflare Tunnel
Cloudflare Tunnel создаёт защищённое соединение между вашей частной сетью и Cloudflare. Этот туннель позволяет Workers безопасно обращаться к вашим частным ресурсам.
-
Перейдите в Панель управления Workers VPC ↗ и выберите Tunnels на вкладке.
-
Выберите Создание чтобы создать новый туннель.
-
Введите имя туннеля (например,
s3-tunnel) и выберите Сохранить туннель. -
Выберите операционную систему и архитектуру. Панель управления покажет инструкции по установке для вашей среды.
-
Следуйте приведённым командам, чтобы скачать и установить
cloudflaredна вашей виртуальной машине и выполните команду установки службы с вашим уникальным токеном.
Панель управления подтвердит успешное подключение туннеля. Запишите ID туннеля для следующего шага.
2. Создайте Workers VPC Service
Сначала создайте Workers VPC Service для внутреннего хранилища S3:
npx wrangler vpc service create s3-storage \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--hostname s3.us-west-2.amazonaws.comВы также можете создать Workers VPC Service, используя IP-адрес (например, при использовании MinIO):
npx wrangler vpc service create s3-storage \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--ipv4 10.0.1.60 \
--http-port 9000Запишите ID сервиса, возвращённый для следующего шага.
3. Настройте политику бакета S3
Настройте бакет S3 так, чтобы разрешить анонимный доступ из вашей конечной точки VPC. Это работает для незашифрованных объектов S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAnonymousAccessFromVPCE",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
],
"Condition": {
"StringEquals": {
"aws:sourceVpce": "vpce-your-endpoint-id"
}
}
}
]
}Прямая проверка доступа к S3
Вы можете проверить доступ к S3 непосредственно с виртуальной машины, на которой работает ваш Cloudflare Tunnel, чтобы убедиться, что политика бакета работает корректно. Эти команды должны работать без каких-либо учётных данных AWS:
# Test listing bucket contents
curl -i https://s3.us-west-2.amazonaws.com/your-bucket-name/
# Test downloading a specific file
curl -i https://your-bucket-name.s3.us-west-2.amazonaws.com/test-file.txt4. Настройте Worker
Обновите файл конфигурации Wrangler:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "private-s3-gateway",
"main": "src/index.js",
// Set this to today's date
"compatibility_date": "2026-08-28",
"vpc_services": [
{
"binding": "S3_STORAGE",
"service_id": "<YOUR_SERVICE_ID>"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "private-s3-gateway"
main = "src/index.js"
# Set this to today's date
compatibility_date = "2026-08-28"
[[vpc_services]]
binding = "S3_STORAGE"
service_id = "<YOUR_SERVICE_ID>"5. Реализуйте Worker
В коде Workers используйте привязку Workers VPC Service, чтобы отправлять запросы к сервису:
export default {
async fetch(request, env, ctx) {
try {
// Fetch a file from the private S3 bucket via VPC endpoint
const response = await env.S3_STORAGE.fetch("https://s3.us-west-2.amazonaws.com/my-bucket/data.json");
// Use the response from S3 to perform more logic in Workers, before returning the final response
return response;
} catch (error) {
return new Response("Storage unavailable", { status: 503 });
}
},
};В этом руководстве показано, как можно получить доступ к приватному объектному хранилищу из ваших Workers. Вы можете использовать Workers VPC Services для прямой загрузки файлов и обработки ответов, что позволяет реализовать более полноценную full-stack и backend функциональность в Workers.
6. Разверните и протестируйте
Теперь можно развернуть и протестировать созданный Worker:
npx wrangler deploy# Test GET request
curl https://private-s3-gateway.workers.devСледующие шаги
- Добавить аутентификация и авторизация
- Реализуйте ограничение частоты запросов
- Настройка мониторинг и оповещения
- Изучите другие примеры