Skip to content

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

Cloudflare Zero Trust で Amazon S3 バケットへのアクセスを保護する

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

このチュートリアルでは、Cloudflare Zero Trust で Amazon S3 バケットへのアクセスを保護し、バケット内のデータをインターネットへ公開しない方法を示します。Cloudflare Access と AWS VPC エンドポイントを組み合わせられます。Enterprise では、専用エグレス IP を使う Cloudflare Gateway のエグレスポリシーも使えます。

方法 1: Cloudflare Access と VPC エンドポイント

flowchart TB
    cf1[/Cloudflare One Client またはクライアントレスユーザー/]--Access ポリシー-->cf2{{Cloudflare}}
    cf2--Cloudflare Tunnel-->vpc1

    subgraph VPC
    vpc1[EC2 VM]-->vpc2[VPC エンドポイント]
    end
    vpc2-->s3_1

    subgraph S3 サービス
    s3_1([S3 バケット])
    end

    i1[/Zero Trust の外にいるユーザー/]-. "S3 アクセス拒否" .->s3_1

前提条件

1. AWS で VPC エンドポイントを作成する

  1. AWS ダッシュボード で、Services > Networking & Content Delivery > VPC を開きます。
  2. Virtual private cloud の下で Endpoints を開きます。
  3. Create endpoint を選び、エンドポイントに名前を付けます。
  4. サービスカテゴリとして AWS services を選びます。
  5. Services で、VPC と同じリージョンの S3 サービスを検索して選びます。たとえば AWS リージョン Europe (London) - eu-west-2 の場合、対応する S3 サービス名は com.amazonaws.eu-west-2.s3 で、タイプは Gateway です。
  6. VPC で、Cloudflare Tunnel デーモンをホストする EC2 VM を含む VPC を選びます。
  7. Route tables で、その VPC に関連付けたルートテーブルを選びます。
  8. PolicyFull access を選びます。
  9. Create endpoint を選びます。

VPC エンドポイントを作成すると、VPC ルートテーブルに、ターゲットが VPC エンドポイントの新しいエントリが追加されます。形式は vpce-xxxxxxxxxxxxxxxxx です。

2. VPC アクセス用のバケットポリシーを設定する

  1. Services > Storage > S3 を開きます。
  2. Amazon S3 で Buckets > <your-S3-bucket> > Permissions を開きます。
  3. Block all public access を無効にします。
  4. Bucket policy に、次のポリシーを追加します。
{
	"Version": "2012-10-17",
	"Id": "VPCe",
	"Statement": [
		{
			"Sid": "VPCe",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:*",
			"Resource": [
				"arn:aws:s3:::<your-S3-bucket01>",
				"arn:aws:s3:::<your-S3-bucket01>/*"
			],
			"Condition": {
				"StringEquals": {
					"aws:SourceVpce": "<your-vpc-endpoint>"
				}
			}
		}
	]
}

このバケットポリシーにより、VPC から S3 バケットへアクセスできます。

3. S3 バケットで静的 Web サイトホスティングを有効にする

  1. Amazon S3 に戻り、Buckets > <your-S3-bucket01> > Properties を開きます。
  2. Static website hostingEdit を選びます。
  3. Static website hosting を有効にします。
  4. S3 バケットの Index ドキュメントと Error ドキュメントを指定します。
  5. Save changes を選びます。

バケットの Web サイトエンドポイントは http://<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com で利用できます。バケットポリシーのため、このエンドポイントには VPC エンドポイントを設定した VPC からだけアクセスできます。

4. Cloudflare Tunnel に公開アプリケーションを追加する

  1. Cloudflare ダッシュボードで、Networking > Tunnels を開きます。

    Tunnels を開く ↗
  2. Tunnel を選び、Routes タブを開きます。

  3. Add route を選び、Published application を選びます。

  4. 組織が S3 バケットへアクセスするために使うサブドメインを入力します。例: s3-bucket.<your-domain>.com

  5. Service URLhttp://<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com を入力します。

  6. Additional application settings > HTTP Settings で、HTTP Host Header<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com を入力します。

  7. Save hostname を選びます。

Cloudflare Tunnel は、公開ホスト名を使い AWS VPC で終端します。

5. Access ポリシーで S3 アクセスを制限する

  1. Access controls > Applications を開きます。
  2. Create new application を選びます。
  3. Self-hosted and private を選びます。
  4. Add public hostname を選び、Tunnel が使う公開ホスト名を入力します。例: s3-bucket.<your-domain>.com
  5. バケットへアクセスできるユーザーとアプリケーションを決める Access ポリシー を追加します。任意で サービストークン ポリシーを作成し、S3 バケットへのアクセスを自動認証することもできます。
  6. 残りの セルフホストアプリケーション作成手順 に従い、アプリケーションを公開します。

Cloudflare Access で認証に成功したユーザーとアプリケーションは、https://s3-bucket.<your-domain>.com で S3 バケットにアクセスできます。

方法 2: Cloudflare Gateway のエグレスポリシー

flowchart TB
    cf1[/Cloudflare One Client ユーザー/]--エグレスポリシー-->cf2{{Cloudflare}}
    cf2--専用 IP でエグレス-->i1[インターネット]
    i1-->s3_1

    subgraph S3 サービス
    s3_1([S3 バケット])
    end

    i2[/Zero Trust の外にいるユーザー/]-. "IP 拒否" .->s3_1

前提条件

  • 専用エグレス IP を持つ Cloudflare Zero Trust アカウント
  • Cloudflare Zero Trust で保護する S3 バケット

1. 特定の IP アドレスにアクセスを制限するバケットポリシーを設定する

  1. AWS ダッシュボード で、Services > Storage > S3 を開きます。
  2. Buckets > <your-S3-bucket02> > Permissions を開きます。
  3. Block all public access を無効にします。
  4. Bucket policy に、次のポリシーを追加します。
{
	"Version": "2012-10-17",
	"Id": "SourceIP",
	"Statement": [
		{
			"Sid": "SourceIP",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:*",
			"Resource": [
				"arn:aws:s3:::<your-S3-bucket02>",
				"arn:aws:s3:::<your-S3-bucket02>/*"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "<your-dedicated-ip>/32"
				}
			}
		}
	]
}

2. S3 バケットで静的 Web サイトホスティングを有効にする

  1. バケットに戻り、Properties を開きます。
  2. Static website hostingEdit を選びます。
  3. Static website hosting を有効にします。
  4. S3 バケットの Index ドキュメントと Error ドキュメントを指定します。
  5. Save changes を選びます。

バケットの Web サイトエンドポイントは http://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.com で利用できます。バケットポリシーのため、指定した専用エグレス IP を送信元とするトラフィックだけがこのエンドポイントにアクセスできます。

3. 専用エグレス IP ポリシーを設定する

  1. Cloudflare ダッシュボード で、Zero Trust > Traffic policies > Egress policies を開きます。Add a policy を選びます。
  2. Gateway が 専用エグレス IP を割り当てるプロキシ済みトラフィックを指定するポリシーを作成します。詳細は エグレスポリシー を参照してください。
  3. Select an egress IPUse dedicated Cloudflare egress IPs を選びます。バケットポリシーで定義した専用エグレス IP を選びます。
  4. Create policy を選びます。

Gateway がプロキシし、指定したエグレス IP を割り当てたトラフィックは、http://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.com で S3 バケットにアクセスできます。

役に立ちましたか?