静的ウェブサイトホスティングでブロックパブリックアクセスを有効にしたまま運用できるケースについて

静的ウェブサイトホスティングでブロックパブリックアクセスを有効にしたまま運用できるケースについて

はじめに

こんにちは、パオの人ことさすけです!
突然ですが、S3 に「ブロックパブリックアクセス設定」ってありますよね。これを設定しておくと、パブリックアクセスを許可するバケットポリシーの保存が制限されたりする機能です。(※パブリックアクセスを許可するバケットポリシーを パブリックバケットポリシー と言います。)

今回は、静的ウェブサイトホスティングの検証を行っていた際に発見した、「ブロックパブリックアクセス」が有効でもアクセスを許可する仕様を活用した方法をご紹介します。

パブリックアクセスって何?

まず、ここでいう「パブリックアクセス」ってなんだと思います?
ここでいう「パブリックアクセス」とは、AWS において Principal: "*" で条件なしにアクセスを許可する状態を指します。

たとえば、誰でもアクセス可能なバケットポリシーは「パブリックアクセス」と見なされますが、一部の IP 制限などの条件付き許可は「パブリック」と見なされません。

さきに結論

さっそく結論にはなるのですが、バケットポリシーにおいて「パブリックアクセスを許可している」とみなされるのは /8 よりも狭い範囲のみです。[1]
つまり以下のような感じですね。

「パブリック」とみなされない: xxx.xxx.xxx.xxx/8(以上、例:/24 32
「パブリック」とみなされる: xxx.xxx.xxx.xxx/7(以下、例:/6 1

この仕様が作り出した、静的ウェブサイトホスティングのライフハックのようなものを検証とともにご紹介しましょう!

静的ウェブサイトホスティングの手順と関連性

さて、まずは静的ウェブサイトホスティングとの関連性を説明するために、設定手順を追ってみましょうか。
AWS ドキュメントに記載されている設定手順としては、ざっと以下の通りになっています。[2]

  1. 静的ウェブサイトホスティングを有効にする
  2. ブロックパブリックアクセス設定を無効化する
  3. バケット内容を公開するバケットポリシーを追加する

通常、静的ウェブサイトホスティングでは「ブロックパブリックアクセス」を無効化する必要があります。これは、静的ウェブサイトホスティングが「パブリックアクセス」を前提としているためです。

しかし、今回の検証では、「パブリックアクセス」と 見なされない範囲 でアクセス制御を行うことで、ブロックパブリックアクセスを有効にしたままでも静的ウェブサイトホスティングを実現できるケースがあることをご紹介します。

検証

さて、それでは検証していきましょうか。
最初は公式ドキュメントと同じ手順なので、テスト用として S3 バケット(test-pao-pk10)を作成し、静的ウェブサイトホスティングを有効にするところまでしておきましょう。(インデックスドキュメントには test.jpg を指定)

今回の検証として、以下の設定で行います。

  • ブロックパブリックアクセス設定はすべて有効化
  • バケットポリシーに以下の IP 制限を設定
バケットポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::test-pao-pk10/pk10/test.jpg",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "xxx.xxx.xxx.xxx/32"
                }
            }
        }
    ]
}

この状態で当該オブジェクト(test.jpg)の URL にアクセスしてみましょう。
すると、アクセスが成功し下記画像が表示されました。

image-4

まとめ

検証にお付き合いいただき、ありがとうございます!
今回はバケットポリシー設定の際に、「パブリックアクセス」とみなされる範囲と、それに伴って静的ウェブサイトホスティングをブロックパブリックアクセス設定を有効なまま行う方法のご紹介でした。

参考文献

[1] Amazon S3 ストレージへのパブリックアクセスのブロック - Amazon Simple Storage Service
[2] チュートリアル: Amazon S3 での静的ウェブサイトの設定 - Amazon Simple Storage Service

アノテーション株式会社

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.