1. はじめに
- 前回の記事「【初心者】AWS Transfer Family Web Apps を使ってみる」で、S3バケットのフォルダ/ファイルを、ユーザ認証をかけた上で外部公開できることを確認した。
- 追加で以下の改善を行う。
- CloudFront/WAFを追加し、WAFでSRCIP制限を行う(前回記事での設定では、許可されていないSRCIPからもログイン自体はできてしまうため、そもそもログイン画面に到達できないようにする)
- Route53/ACMで、自ドメインのFQDNをCloudFrontに付与し、ユーザ向けのエンドポイントをわかりやすいURLに変更する。(前回記事の設定ではTransfer Family Web Appsの標準URLを用いているため)
2. やったこと
- AWS公式から提供されているCloudFormationテンプレートを用いて、Transfer Family Web Appsをオリジンとし、カスタムドメイン名を持つCloudFrontディストリビューションを作成する。
- カスタムドメイン名でユーザがWebAppsにアクセスできることを確認する。
- CloudFrontにWAFをアタッチし、SRCIP制限を行う。
3. 構成図
作業前の構成図(前回の記事で作成した環境)
- Transfer Family Web Apps のURLに直接アクセスさせる。
作業後の構成図
- CloudFrontとWAF(付随してRoute53レコード及びACMでの証明書)を追加。
4. 手順
4.1 カスタムドメイン名(FQDN)の作成
- Route53 パブリックホストゾーンにて、TransFer Family Web Appsのユーザ向けのエンドポイントとするレコードを作成する。本記事では仮に「webapp-demo.xxxxx.net」とする。(手順は割愛)
- 最終的な設定は 「webapp-demo.xxxxx.net CNAME [CloudFrontディストリビューション名]」とするが、レコード登録時にCloudFrontが未設定のため、いったん適当な値にしておく。
4.2 証明書の作成
- 作成したカスタムドメイン名(FQDN)に対する証明書をACMで作成する。(手順は割愛)
4.3 CloudFront ディストリビューションの作成
- AWS公式ドキュメント「Update your access endpoint with a custom URL」を用いて、CloudFrontディストリビューションを作成する。
- パラメータとして以下3点を設定する。
- WebAppEndpoint: Transfer Family WebApps作成時に生成されたURL
- AccessEndpoint: 手順4.1で作成した、カスタムドメイン名のURL
- AcmCertificateArn: 手順4.2で作成した、証明書のARN
- Stackの作成完了後、Transfer Family Web Appsをオリジンとし、カスタムドメイン名が設定されたCloudFrontディストリビューションが作成されていることを確認する。
4.4 Route53 レコードの修正
- Route53の該当レコードのCNAME設定を、作成したCloudFrontディストリビューション名に変更する。
4.5 Transfer Family Web Apps のカスタムURL設定
- 作成済のTransfer Family Web Appsの「カスタムURL」の値を、作成したカスタムドメイン名に変更する。
4.6 S3バケットのCORS設定修正
- 対象のS3バケットのCORSの設定(AllowedOrigins)を、作成したカスタムドメイン名に変更する。
- ここまで設定した内容で以下が実現できる。
- ユーザ(ohtani)は、カスタムドメイン名を用いてアクセスする。
- ID認証後、Transfer Family Web Appsにアクセスできる。SRCIPが許可されたものである場合はフォルダ・ファイルの参照が可能だが、SRCIPが許可されていない場合、バケットポリシーによりアクセスが拒否される。
4.7 WAFの追加
-
SRCIPが許可されたものでない場合、そもそもTransfer Family Web Appsのログイン画面にアクセスできないようにするため、CloudFrontディストリビューションに対してWAFを追加し、SRCIP制限を行う。
-
手順は「AWS WAFで特定IPのリクエストからアクセス許可しよう」を参照。詳細は割愛するが、主な設定内容は以下。
- 「IP set」を作成する。アクセスを許可するCIDRのリストを登録する。
- 「Web ACL」を作成する。
- このWeb ACLの適用先として、作成したCloudFrontディストリビューションを指定する。
- Rule typeを「IP Set」として、リストにあるSRCIPからのアクセスを許可する。
- RuleにマッチしないアクセスはBlockする。
-
WAF設定の追加後、許可されたSRCIP以外からカスタムドメイン名にアクセスすると、403 ERRORとなるようになった。
5. 所感
- SRCIP制限をより確実な形で実装することができて満足感があった。コストは余計かかってしまうが、、