Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

プライベートな S3 バケットにアクセスする

最終更新 Markdown で表示Agent セットアップ

この例では、パブリックインターネットに公開されていないプライベートな S3 バケットへアクセスする方法を示します。内部の S3 互換ストレージ向けに Workers VPC Service を設定し、そのバケットへリクエストする Worker を作成してデプロイし、変更を確認します。

前提条件

  • VPC / 仮想ネットワーク上で稼働するプライベートな S3 互換ストレージ(AWS S3 VPC エンドポイント、MinIO など)
  • S3 VPC エンドポイントと同じ VPC 上で稼働する仮想マシン / EC2 インスタンス
  • Workers VPC にアクセスできる Workers アカウント

1. Cloudflare Tunnel を設定する

Cloudflare Tunnel は、プライベートネットワークから Cloudflare への安全な接続を作ります。このトンネルにより、Workers からプライベートリソースへ安全にアクセスできます。

  1. Workers VPC ダッシュボード を開き、Tunnels タブを選択します。

  2. Create を選択し、新しいトンネルを作成します。

  3. トンネル名(例: s3-tunnel)を入力し、Save tunnel を選択します。

  4. OS とアーキテクチャを選びます。ダッシュボードに、環境向けのインストール手順が表示されます。

  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 バケットポリシーを設定する

VPC エンドポイントからの匿名アクセスを許可するよう、S3 バケットを設定します。暗号化されていない 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 認証情報なしで成功する必要があります。

# 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.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-09-20",
	"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-09-20"

[[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 {
			// 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 でファイルを直接取得し、レスポンスを加工すれば、Workers 上でより本格的なフルスタックおよびバックエンド機能を構築できます。

6. デプロイしてテストする

作成した Worker をデプロイしてテストできます。

npx wrangler deploy
# Test GET request
curl https://private-s3-gateway.workers.dev

次のステップ

役に立ちましたか?