質問: ### 前提・実現したいこと AWSのS3を使用して、Webサイトを構築しようと作業を進めています。そこで、そのサイトに、IPアドレスでのアクセス制限を設定したいと思っています。 ### 問題点 書籍を読み、S3バケットを「Static website hosting」として設定しました。また、Route53でドメインを設定し、CloudFront経由でHTTPSで接続できるようにも設定しました。 そのあと、そのサイトにIPアドレスによる制限をかけたいと思いネットで調べたところ、以下の2通りの方法を見つけました。 1. S3の「アクセス権限」「パケットポリシー」で、アクセス許可したいIPアドレスを設定する。 2. WAFでアクセス許可したいIPアドレスのルールを作成し、CloudFrontの「AWS WAF Web ACL」でそのルールを指定する。この場合、上記の1.は設定しません。 S3を静的WEBサイトとして使用する場合、どちらの方法が良いのかよく理解できていません。 ### 試したこと 自分の環境では、どちらのやり方でも、IPアドレスによるアクセス制限ができました。ただし、WAFを使用した場合は、S3エンドポイントのURLでアクセスできてしまいました。 なお、自分は固定IPアドレスを取得しており、パソコンのLAN接続とスマートフォンのLTE接続で確認しています。 ### 質問 Static website hostingとしてのS3へのIPアドレスによるアクセス制限を、S3の「パケットポリシー」とWAFで、どちらがより安全かご意見を伺いたいと思っています。 また、それぞれの使用場面なども教えていただけると助かります。
回答: 結論として、CloudFrontにWAFを設定し、IPアドレスで制限する方法にしました。 S3エンドポイントのURLでS3バケットに直接アクセスできてしまう件は、S3バケットへのアクセスをCloudFront経由のみに限定することで対応できました。 CloudFront経由でのS3へのアクセスは、CloudFrontディストリビューション作成時に、「Origin Setttings」の「Restrict Bucket Access」を「Yes」にしなければならないようです。 そうすることで、S3のバケットポリシーの「Principal」が、自動的に以下のように更新されます。 ``` "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXX" }, ``` ただし、CloudFrontのディストリビューション作成時に、「Origin Setttings」の「Origin Domain Name」をS3エンドポイントのURLに変えてしまうと、「Restrict Bucket Access」オプションが非表示になってしまうようなので、そこで迷ってしまいました。