[AWS WAF] CloudFrontへアクセス可能なソースIPを社内イントラに制限

AWS WAFを用いて、CloudFrontへのアクセスを制御する手法を解説します。CloudFrontディストリビューションの生成やS3へのコンテンツのHostingは事前に完了している前提とします。それらの手順は以下の記事にまとめています。

前提とする構成

Serverless Architecture

S3単体であれば、バケットポリシーによるソースIP制限も可能ですが、CloudFrontを挟む場合は、アクセス元となるCloudForntがブロックされてしまいます。そこで、S3がアクセスを許可する対象をCloudFrontに絞り、CloudFront側でIP制限をかける必要があり、AWS WAFを利用することで実現可能です。

AWS WAF(Web Application Firewall)

AWS WAF

  • AWS WAF
    • 名前の通り、Webアプリケーションを守るファイアウォールです
    • 主な機能
      1. SQL インジェクションやクロスサイトスクリプティングなどの一般的な攻撃パターンの防御
        • AWSにおける基本的な防御策の一つであり、CloudFrontとWAFをコンテンツ~ユーザ間に挟むのが定石です
        • 更に守りを固めるのであればAWS Shieldも付けるイメージ
      2. 定義した特定のトラフィックパターンを除外するルールを作成して、トラフィックがアプリケーションに到達する方法を制御
        • 今回利用するのはこちら

手順

WAFで以下のトラフィックパターンを実現します

  • 社内イントラ(複数IP)からのアクセスのみを許可
  • その他をブロック

IP set設定

まず、アクセス可能なIPアドレスをリスト化します

  • IP Sets
    • Create IPsetを選択

IP Sets

  • Crate IP set
    • ip set name
      • 今回は会社のイントラネットのIPを登録するので”intranet”に設定
    • IP addressesに許可したいIPアドレスを列挙
    • Create IP set

Create IP set

WEB ACL設定

次に設定したIP setからのアクセスのみに絞るルールを作ります

  • WEB ACLs/Create web ACLを選択

WEB ACLs

  • WEB ACL設定
    • Resource type
      • CloudFront distributionsを指定
    • 他は任意の名称を設定
      • 今回はip-limit-acl

Describe web ACL and associate it to AWS resources

  • Add rules and rule groups
    • ここでIPをルールとして設定します
    • Add my own rules and rule groupsを選択

Add rules and rule groups

  • Add my own rules and rule groups
    • Rule type
      • IP setを選択
    • Rule
      • 任意の名称を設定
    • IP Set
      • 事前に作ったものを選択
    • Action
      • Allow
    • Add rule

Add my own rules and rule groups

  • Default web ACL action for requests that don’t match any rules
    • Blockに設定しておく

Add rules and rule groups

  • デフォルトのブロックと任意のIP setにアクセスを許可するルールが設定されたことを確認してNext

  • Set rule priority

    • そのままでNext
  • Configure metrics

    • そのままでNext
  • Review and create web ACL

    • 設定に問題がなければCreate web ACL

CloudFrontディストリビューションに適応

  • WEBACL完成後にCloudFrontに適応
    • Associated AWS resourcesタブ
    • Add AWS resources

Associated AWS resources

  • 作成済みのCroudFrontディストリビューションを選択
    • Add

Add AWS Resources

以上でOK。試しにCloudFrontのURLにアクセスすると、許可したIP以外からはブロックされます。

参考

関連記事

その他

@EventEmitter @Input @Output @ViewChild ACM AMP API Gateway AR AR.js AR.js Studio AWS AWS Amplify AWS Budgets AWS Cost Explorer AWS SDK for JavaScript AddThis Adobe XD Alexa Amazon CloudWatch Amazon Honycode Amazon SNS Android Angular Angular Material AngularFire AppSync Augury C CDN CI/CD Cloud Craft Cloud9 CloudFormation CloudFront CloudTrail Cognito Cost Anomaly Detection Cubase ai Cubasis LE DTM Disqus DynamoDB Elgato HD 60S Firebase Firebase Hosting Former2 Github Github Actions Github.com GithubEnterprise GithubPages Google Chrome Google Cloud Shell GraphQL Hexo Hosting IAM Ionic JSON JavaScript LadioCast Logging LowCode MFA MS Authentication MacBook Pro 16 Mind Node NETDUETTO Netflix Party Netlify Network NoCode Observable PO PdM Promise RPA ReactiveForm Recognition Route53 S3 SAM(Serverless Application Model) SAR SSL SYNCROOM Schematics ScrumInc Serverless Service Siri Sitemap Spark AR Steinberg UR44C Teams Touch Cast Studio Treetable TypeScript UI UI Bakery WAF WAFv2 WEB Page Dev WEB会議 WebAR WebSocketAPI Webhook Windows Power Automate Wireshark aot async/await aws config cloud9 display.land draw.io e2e test filter() forkJoin() google search console hexo-generator-amp iOS iPad Pro iPhone icarus map() mat input mat tree mat-checkbox mat-input mat-selection-list mmhmm ngFor plantUML popIn Aladdin2 then() vscode ”global is not defined” らくがきAR アジャイル アジャイル開発 クロスプラットフォーム ショートカット スクラム スクラム開発 テレワーク ファイル操作 ブラウザ型IDE プロダクトオーナー プロダクトマネージャー プロトタイピング リモートセッション 共同開発 双方向データバインディング 待ち合わせ処理 認定スクラムマスター 静的WEB Hosting 静的WEBサイトHosting
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×