跳转到内容
搜索文档

访问私有 S3 存储桶

最后更新 查看 MarkdownAgent 设置

本示例演示了如何访问未暴露在公共互联网上的私有 S3 存储桶。在本指南中,我们将为内部 S3 兼容存储服务配置一个 Workers VPC Service,创建一个向该存储桶发出请求的 Worker,并部署该 Worker 以验证我们的更改。

先决条件

  • 在您的 VPC/虚拟网络中运行的私有 S3 兼容存储服务(例如 AWS S3 VPC 终端节点、MinIO 或类似服务)
  • 在您的 S3 VPC 终端节点所在的同一 VPC 中运行的虚拟机/EC2 实例
  • 具有 Workers VPC 访问权限的 Workers 账户

1. 设置 Cloudflare Tunnel

Cloudflare Tunnel 可创建从您的私有网络到 Cloudflare 的安全连接。该隧道将允许 Worker 安全地访问您的私有资源。

  1. 导航到 Workers VPC 仪表板并选择 Tunnels(隧道) 选项卡。

  2. 选择 Create(创建) 以创建新隧道。

  3. 输入隧道名称(例如 s3-tunnel)并选择 Save tunnel(保存隧道)

  4. 选择您的操作系统和架构。仪表板将为您的环境提供特定的安装说明。

  5. 按照提供的命令在您的 VM 上下载并安装 cloudflared,并使用您的唯一令牌执行服务安装命令。

当您的隧道成功连接时,仪表板将会进行确认。记下隧道 ID 供下一步使用。

2. 创建 Workers VPC Service

首先,为您的内部 S3 存储创建一个 Workers VPC Service:

npx wrangler vpc service create s3-storage \
  --type http \
  --tunnel-id <YOUR_TUNNEL_ID> \
  --hostname s3.us-west-2.amazonaws.com

您也可以使用 IP 地址创建 Workers VPC Service(例如,如果使用 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 访问

您可以直接从运行 Cloudflare Tunnel 的 VM 测试 S3 访问,以验证存储桶策略是否正常工作。这些命令无需任何 AWS 凭据即可工作:

# 测试列出存储桶内容
curl -i https://s3.us-west-2.amazonaws.com/your-bucket-name/

# 测试下载特定文件
curl -i https://your-bucket-name.s3.us-west-2.amazonaws.com/test-file.txt

4. 配置您的 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-17",
	"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-17"

[[vpc_services]]
binding = "S3_STORAGE"
service_id = "<YOUR_SERVICE_ID>"

5. 实施 Worker

在您的 Workers 代码中,使用 Workers VPC Service 绑定以便向服务发送请求:

index.jsjs
export default {
	async fetch(request, env, ctx) {
		try {
			// 通过 VPC 终端节点从私有 S3 存储桶获取文件
			const response = await env.S3_STORAGE.fetch("https://s3.us-west-2.amazonaws.com/my-bucket/data.json");

			// 使用来自 S3 的响应在返回最终响应之前在 Workers 中执行更多逻辑
			return response;
		} catch (error) {
			return new Response("Storage unavailable", { status: 503 });
		}
	},
};

本指南演示了如何从您的 Worker 访问私有对象存储。您可以使用 Workers VPC Service 直接获取文件并操作响应以使您能够在 Workers 上构建更完善的全栈和后端功能。

6. 部署并测试

现在,您可以部署并测试您创建的 Worker:

npx wrangler deploy
# 测试 GET 请求
curl https://private-s3-gateway.workers.dev

后续步骤

这篇文档对您有帮助吗?