6
6

More than 3 years have passed since last update.

s3 パブリックからファイルアップロードや削除はできないが、パブリックからファイル閲覧できるという確認をダメパターンも含めて実際に試す

Last updated at Posted at 2019-10-11

目的

  • s3のブロックパブリックアクセスとアクセスコントロールリスト(ACL)、バケットポリシー(Policy)の関連性がややこしくてイマイチピンとこない
  • s3のドキュメントがカオス
  • なので把握も兼ねて、実際のユースケースを元にセキュリティ的にダメなパターンと、どんな設定でできるのかを試す
  • ユースケース

    • awscliでサーバ等から画像をS3へアップロードさせて、S3のオブジェクトURL( https://[バケット名].s3-ap-northeast-1.amazonaws.com/[オブジェクト名] )でパブリックから画像を閲覧させたい場合
    • = パブリックからファイルアップロードや削除はできないが、パブリックからファイル閲覧できる という確認をダメパターンも含めて実際に試す
  • 前提条件
    s3リージョン:ap-northeast-1

パブリックからファイルアップロードされてしまうことの確認(ダメパターン)

パターンA

  • ブロックパブリックアクセス -> パブリックアクセスをすべてブロック オフ 且つ
  • ACL -> パブリックアクセス -> グループ Everyone -> オブジェクトの書き込み はい (他は -) 且つ
  • Policy 何も記述しない

  • アップロードされてしまう事を確認

    • 確認用HTML
<html>
  <body>
    <form action="https://[バケット名].s3-ap-northeast-1.amazonaws.com/" method="post" enctype="multipart/form-data" >
      <input type="hidden" name="key" value="uploads/[アップロードファイル名]">
      <input type="file" name="file"> <br>
      <input type="submit" value="送信">
    </form>
  </body>
</html>
  • Webページアクセスし、ファイルアップロード マネコンからアプロードしたファイルを確認

パターンB

  • ブロックパブリックアクセス -> パブリックアクセスをすべてブロック オフ 且つ
  • ACL -> パブリックアクセス -> グループ Everyone -> オブジェクトの書き込み - (他も -) 且つ
  • Policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::[バケット名]/*"
        }
    ]
}

ポイントはPutObject

  • アップロードされてしまう事を確認
    • HTMLは上記同様
    • Webページアクセスし、ファイルアップロード
    • マネコンからアプロードしたファイルを確認

結論

  • パブリックからファイルをアップロードされてしまう設定(ダメパターン)

    • ブロックパブリックアクセス -> パブリックアクセスをすべてブロック オフ 且つ
    • ACL、ポリシーどちらかで書き込み/PutObjectが許可
  • パブリックからファイルアップロードされることはない設定

    • ブロックパブリックアクセス -> パブリックアクセスをすべてブロック オン
    • ACL -> パブリックアクセス -> グループ Everyone -
    • Policy PutObject を許可しない

アップロード(PutObject)以外にオブジェクト閲覧(GetObject)、削除(DeleteObject)の場合も同様

パブリックからファイル閲覧させる確認

パターンC

  • ブロックパブリックアクセス -> パブリックアクセスをすべてブロック オン 且つ
  • ACL -> パブリックアクセス -> グループ Everyone -> 全て - 且つ
  • Policy 何も記述しない

  • アップロードされてるオブジェクトへWebアクセス
    https://[バケット名].s3-ap-northeast-1.amazonaws.com/[オブジェクト]

    • Access Deniedでオブジェクトが表示されない

これだとCLIからアップロードされても、閲覧できないので、、

パターンD

  • ブロックパブリックアクセス -> 任意のパブリックバケットポリシーを介して、バケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする のみ オフ (他は オン) 且つ
  • ACL -> パブリックアクセス -> グループ Everyone -> 全て - 且つ
  • Policy 何も記述しない

  • アップロードされてるオブジェクトへWebアクセス
    https://[バケット名].s3-ap-northeast-1.amazonaws.com/[オブジェクト]

    • Access Deniedでオブジェクトが表示されない

これでもCLIからアップロードされても、閲覧できないので、、

パターンE

  • ブロックパブリックアクセス -> 任意のパブリックバケットポリシーを介して、バケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする のみ オフ (他は オン) 且つ
  • ACL -> パブリックアクセス -> グループ Everyone -> 全て - 且つ
  • Policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[バケット名]/*"
        }
    ]
}

ポイントはGetObject

  • アップロードされてるオブジェクトへWebアクセス https://[バケット名].s3-ap-northeast-1.amazonaws.com/[オブジェクト]
    • オブジェクトが表示される

念のためこの設定で、パブリックからファイルアップロードできないことも確認

結論

パブリックからファイル閲覧させつつ、アップロード/削除はさせたくない場合
パターンE の設定でOK

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6