コンテンツにスキップ

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

Last reviewed: 11 months ago

このチュートリアルでは、Cloudflare Zero Trustを使用してAmazon S3バケットへのアクセスを保護し、これらのバケット内のデータがインターネット上で公開されないようにする方法を示します。Cloudflare AccessとAWS VPCエンドポイントを組み合わせることができます。エンタープライズでは、専用の出口IPを持つCloudflare Gatewayの出口ポリシーも使用できます。

方法1: Cloudflare AccessとVPCエンドポイントを介して

flowchart TB
    cf1[/エージェントレスおよびWARP </br>ゼロトラストユーザー/]--アクセスポリシー-->cf2{{Cloudflare}}
    cf2--Cloudflareトンネル-->vpc1

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

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

    i1[/ゼロトラスト外のユーザー/]-. "S3アクセス拒否" .->s3_1

前提条件

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

  1. AWSダッシュボードに移動し、サービス > ネットワーキングとコンテンツ配信 > VPCに進みます。
  2. 仮想プライベートクラウドの下で、エンドポイントに移動します。
  3. エンドポイントの作成を選択し、エンドポイントに名前を付けます。
  4. サービスカテゴリとしてAWSサービスを選択します。
  5. サービスで、VPCの同じリージョンにあるS3サービスを検索して選択します。たとえば、AWSリージョンヨーロッパ(ロンドン) - eu-west-2の場合、対応するS3サービスはcom.amazonaws.eu-west-2.s3で、タイプはゲートウェイです。
  6. VPCで、CloudflareトンネルデーモンをホストするEC2 VMを含むVPCを選択します。
  7. ルートテーブルで、VPCに関連付けられたルートテーブルを選択します。
  8. ポリシーで、フルアクセスを選択します。
  9. エンドポイントの作成を選択します。

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

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

  1. サービス > ストレージ > S3に移動します。
  2. Amazon S3で、バケット > <your-S3-bucket> > 権限に進みます。
  3. すべてのパブリックアクセスをブロックを無効にします。
  4. バケットポリシーで、次のポリシーを追加します:
{
"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バケットの静的ウェブサイトホスティングを有効にする

  1. Amazon S3に戻り、バケット > <your-S3-bucket01> > プロパティに進みます。
  2. 静的ウェブサイトホスティングで、編集を選択します。
  3. 静的ウェブサイトホスティングを有効にします。
  4. S3バケットのインデックスおよびエラードキュメントを指定します。
  5. 変更を保存を選択します。

バケットウェブサイトエンドポイントはhttp://<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.comで利用可能になります。バケットポリシーにより、このウェブサイトエンドポイントはVPCエンドポイントが設定されたVPCからのみアクセス可能です。

4. Cloudflareトンネルに新しいパブリックホスト名を追加する

  1. ゼロトラストに移動し、アクセス > トンネルに進みます。
  2. トンネルを選択し、設定を選択します。
  3. パブリックホスト名に移動し、パブリックホスト名を追加を選択します。
  4. 組織がS3バケットにアクセスするために使用するサブドメインを入力します。たとえば、s3-bucket.<your-domain>.comです。
  5. サービスの下で、タイプHTTPを選択します。URL<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.comを入力します。
  6. 追加のアプリケーション設定 > HTTP設定で、HTTPホストヘッダー<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.comとして入力します。
  7. ホスト名を保存を選択します。

あなたのCloudflareトンネルは、パブリックホスト名を使用してAWS VPCで終了します。

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

  1. アクセス > アプリケーションに移動します。アプリケーションを追加を選択します。
  2. 自己ホスト型を選択します。
  3. アプリケーションの名前を入力します。
  4. アプリケーションドメインに、トンネルで使用されるパブリックホスト名を入力します。たとえば、s3-bucket.<your-domain>.comです。
  5. (オプション)サービストークンを作成して、S3バケットへのアクセスを自動的に認証します。
  6. アプリケーションを設定し、次へを選択します。
  7. アクセスポリシーを追加して、どのユーザーとアプリケーションがバケットにアクセスできるかを決定します。
  8. 組織の要件に応じて設定を構成します。
  9. アプリケーションを追加を選択します。

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

方法2: Cloudflare Gateway出口ポリシーを介して

flowchart TB
    cf1[/WARPユーザー/]--出口ポリシー-->cf2{{Cloudflare}}
    cf2--専用IPでの出口-->i1[インターネット]
    i1-->s3_1

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

    i2[/ゼロトラスト外のユーザー/]-. "IP拒否" .->s3_1

前提条件

  • 専用出口IPを持つCloudflare Zero Trustアカウント
  • Cloudflare Zero Trustで保護されるS3バケット

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

  1. AWSダッシュボードに移動し、サービス > ストレージ > S3に進みます。
  2. バケット > <your-S3-bucket02> > 権限に進みます。
  3. すべてのパブリックアクセスをブロックを無効にします。
  4. バケットポリシーで、次のポリシーを追加します:
{
"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バケットの静的ウェブサイトホスティングを有効にする

  1. バケットに戻り、プロパティに進みます。
  2. 静的ウェブサイトホスティングで、編集を選択します。
  3. 静的ウェブサイトホスティングを有効にします。
  4. S3バケットのインデックスおよびエラードキュメントを指定します。
  5. 変更を保存を選択します。

バケットウェブサイトエンドポイントはhttp://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.comで利用可能になります。バケットポリシーにより、このウェブサイトエンドポイントは指定された専用出口IPからのトラフィックのみアクセス可能です。

3. 専用出口IPポリシーを設定する

  1. ゼロトラストに移動し、ゲートウェイ > 出口ポリシーに進みます。ポリシーを追加を選択します。
  2. Gatewayが専用出口IPを割り当てるべきプロキシトラフィックを指定するポリシーを作成します。詳細については、出口ポリシーを参照してください。
  3. 出口IPを選択で、専用Cloudflare出口IPを使用を選択します。バケットポリシーで定義された専用出口IPを選択します。
  4. ポリシーを作成を選択します。

Gatewayによってプロキシされたトラフィックで、指定された出口IPが割り当てられたものは、http://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.comでS3バケットにアクセスできます。