CloudFront + S3 での IP アドレスベースのアクセス制限設定をする | mediba Creator × Engineer Blog

CloudFront + S3 での IP アドレスベースのアクセス制限設定をする

こんにちは、インフラストラクチャー部の沼沢です。

今回は、CloudFront + S3 での IP アドレスベースのアクセス制限を実現する方法をご紹介します。

実現したかったこと

  • 特定の外部拠点から参照されるファイルを S3 に配置したい
  • 独自ドメインが使いたかったため、CloudFront を前段に用意
  • ファイルへのアクセスを特定の外部拠点の IP アドレスのみに制限したい
  • S3 の URL への直アクセスはさせたくない

これを実現しようとしてググってみると、

CloudFront のみ、S3 のみの方法は出てくるのですが、CloudFront + S3 の方法が出てこなかったので、自分で試してみました。

やったこと

先に設定した内容を箇条書きにしてみました。

  • AWS WAF で IP アドレスベースのアクセス制限ルールを適用
  • S3 直アクセスを防ぎ CloudFront 経由に限定するため、オリジンアクセスアイデンティティを利用

目新しいことはしていません。今まで既にあったことの合わせ技です。
上記の設定をすることで、やりたかったことを実現することができます。

それぞれ以下を参考にさせていただきました。
AWS WAF で CloudFront 環境にIPアドレス制限を設定する | dogmap.jp
オリジンアクセスアイデンティティを使用して Amazon S3 コンテンツへのアクセスを制限する - Amazon CloudFront

設定詳細

では、設定内容の詳細を解説していきたいと思います。

S3 にファイルを用意

s3://{BucketName}/limited_access/index.html を配置。

Alt text

index.html の中身は以下です。

<html>
<head>
<title>選ばれしHTML</title>
</head>
<body>
ようこそ、選ばれし者よ
</body>
</html>

AWS WAF の設定

次に AWS WAF で IP アドレスによるアクセス制限のルールを作成します。
AWS WAF のコンソールを開き、「Create web ACL」をクリックし、以下のように設定を進めて行きます。

Alt text

Alt text

Alt text

Create conditions に戻ったら「Next」クリック

Alt text

Alt text

Alt text

「Review and create」クリック後、内容に問題なければ「Confirm and create」をクリックして web ACL の作成は完了です。

CloudFront の設定

CloudFront のコンソールを開き、「Create Distribution」をクリックし、以下のようにして Web Distribution の作成を進めて行きます。

Alt text

Alt text

  • Restrict Bucket Access
    • バケットへのアクセス制限をかけるか
      → Yes
  • Origin Access Identity
    • オリジンアクセスアイデンティティを新規に作成するか既存のものから選ぶか
      → 新規に作成(Create a New Identity)
  • Grant Read Permissions on Bucket
    • バケットに対する読み取り権限を自動で付与するか
      → バケットポリシーを更新 (Yes, Update Bucket Policy)
      ※ No にした場合は、自分でバケットポリシーの設定が必要

これら以外の設定項目は要件に合わせて任意に設定してください。
20〜30分程待つと CloudFront の Distribution の作成が完了します。

動作確認

以下の2パターンのアクセスを、許可 IP アドレス・それ以外の IP アドレスで検証します。

  1. S3 の URL でアクセスする
  2. CloudFront の URL でアクセスする

許可 IP アドレスからアクセス

  1. S3 の URL でアクセスする Alt textAlt text
  2. CloudFront の URL でアクセスする Alt text

それ以外の IP アドレスからアクセス

  1. S3 の URL でアクセスする Alt textAlt text
  2. CloudFront の URL でアクセスする Alt text

それぞれ期待通りの動作が確認できました。

まとめ

この仕組みを利用することで CloudFront + S3 の状況下でも厳密なアクセス制限が可能になります。

EC2 にファイルを置いて Security Group でアクセスを制限する方法でももちろん同じことが実現できますが、EC2 の保守運用という手間がかかりますよね。

静的なファイルであれば、CloudFront + S3 でも同じことができ、EC2 の保守運用をする必要が無くなるため、運用コストの削減が期待できます。
こうしたことの積み重ねが、AWS を使うメリットを享受するために重要なことだと思います。

こうした工夫で運用を楽にしていくことができるという気付きになれば幸いです。