• DoRubyとは
  • お問い合わせ
  • Ruby/Rails
  • Web開発
  • Webマーケティング
  • アピリッツ
  • ライフハック
  • ゲーム制作/開発
  • Railsの小技
  • Rubyの小技
  • Gemの紹介
  • ActiveRecord
  • 初心者向け
  • Java/Scalaテク
  • Unixのあれこれ
  • データベース
  • スマホ開発
  • HTML/CSS/JavaScript
  • デザイン製作
  • インフラ
  • クラウド
  • セキュリティ
  • エディタ
  • バージョン管理
  • その他
  • python
  • アクセス解析
  • Googleアナリティクス
  • Googleデータスタジオ
  • Web広告
  • SEO
  • UI/UX
  • ソーシャルメディア
  • EC開発
  • Webシステム開発
  • コンサルティング
  • Webデザイン
  • ブロックチェーン
  • ゲーム紹介
  • アプリ紹介
  • ASP
  • 風景
  • パソコン
  • ツール
  • ガジェット
  • 仕事術
  • 健康
  • 生活
  • 書評
  • Excel(エクセル)
  • PowerPoint(パワーポイント)
  • ゲームプランニング
  • SpriteStudio
  • マスターデータ入力/作成
  • Unity
  • キャラクターデザイン
  • ゲームシナリオ
  • レベルデザイン
  • ゲーム分析
  • 3DCG
  • イラスト制作
  • CG/アニメーション
  1. ホーム
  2. Web開発
  3. クラウド
  4. CloudFrontの「Restrict Bucket Access」と「Restrict Viewer Access」の違いがよくわからなかったので検証してみた
  • 2017-03-08
    • カテゴリ:
    • クラウド
    • タグ:
    • aws
    • s3
    • CloudFront

CloudFrontの「Restrict Bucket Access」と「Restrict Viewer Access」の違いがよくわからなかったので検証してみた

この記事は公開から1年以上が経過しています。情報が古い可能性がありますのでご注意ください。

CloudFront の設定項目「Restrict Bucket Access」と「Restrict Viewer Access」がそれぞれどのような役割をもっているか理解が曖昧だったので実験で検証してみました。

TL;DR

  • S3バケット上のオブジェクトのACLをprivateにすると一般ユーザはS3のURLでオブジェクトへのアクセスが行えなくなる。
  • Restrict Bucket Access を Yes に設定すると、ユーザ自身の代わりに「オリジンアクセスアイデンティティ」に設定された権限によりS3にアクセスできるようになる。
  • Restrict Viewer Access を Yes にすると、署名付きURL(または署名付きCookie)によるアクセスしか許可しなくなる。
  • Restrict Bucket Access を Yes, Restrict Viewer Access を No の組み合わせで設定したら、署名付きURL/署名なしURLいずれでもアクセス可能となる。さらに署名付きURLの期限が切れていても問題なくアクセスできてしまうので注意‼️

上記については以下の公式ドキュメントに詳しく記載されています。(といっても初見ではイマイチ理解できなかったので結局検証したんですが...😅)

CloudFront を使用してプライベートコンテンツを供給する - Amazon CloudFront

実験内容

実験方法は以下のとおり。

  • S3 バケットのオブジェクトは private (オーナー以外のアクセス権なし)と、public(EveryoneのRead権あり)の 2 種類用意。
  • S3 バケット自身には以下のように CloudFront のオリジンアクセスアイデンティティによる参照アクセスを許可(以下は例のためIDとかバケット名は存在しないものになっている)
{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity xxxxxxxxxxxxx"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::xxxxxx-bucket/*"
        }
    ]
}
  • CloudFront で Restrict Bucket Access, Restrict Viewer Access それぞれの設定の組み合わせによって、S3の public/private それぞれのオブジェクトへのアクセス結果がどのようになるか検証。

実験結果

実験の結果は以下のとおり

実験結果

実験の結果以下のことがわかりました。
(以下では、Restrict Bucket Access を "Bucket"、Restrict Viewer Access を "Viewer" と表現してます)

  • Bucket:YES, Viewer:YES の場合:
    • 現時点で有効な署名付きURLでのみアクセス可能。
    • 署名無しのURLでアクセスするとステータス 403 でXMLのエラーメッセージとして"Missing Key"が返ってくる。
  • Bucket:YES, Viewer:NO の場合:
    • 署名付きURL/署名なしURLいずれでもアクセス可能。
    • しかも、署名付きURLの有効期限が切れてもアクセス可能。
  • Bucket:NO, Viewer:YES の場合:
    • publicなS3コンテンツに署名付きURLでのみアクセス可能。
    • privateなコンテンツに署名付きURLでアクセスすると、ステータス 403 でXMLのエラーメッセージは"Access Denied"が返ってくる。
    • privateなコンテンツに署名なしURLでアクセスすると、ステータス 403 でXMLのエラーメッセージは"Missing Key"が返ってくる。
  • Bucket:NO, Viewer:NO の場合:
    • privateなコンテンツには一切アクセスできない。
    • publicなコンテンツには署名付き/署名なしいずれのURLでもアクセス可能。

この結果で予想外だったのが2番目のケースで、「署名付きURLの有効期限が切れていたとしても関係なく普通にアクセスできる」という点でした。

Restrict View Access で署名付きURLによるアクセス制限をかけていないので、当たり前と言えば当たり前のことなんですが、予想外の結果でびっくりしました。

もし設定をミスっても署名付きURLで普通にアクセスできてしまい、あえて有効期限切れの場合のテストを行わないと設定ミスに気付かずそのまま本番運用...😱 なんてことにならないように注意が必要ですね。

まとめ

CloudFont + S3 でプライベートなコンテンツを配信する場合、S3及びCloudFrontを以下のように設定する必要がある。

  • S3は以下のとおり設定する
    • S3にオブジェクトをアップロードする際のパーミッションは private(オーナーのみアクセス可能)とすること
    • S3バケットはバケットポリシーでオリジンアクセスアイデンティティによるアクセスを許可すること
  • CloudFront ディストリビューションは以下のとおり設定する
    • Restrict Bucket Access を Yes に設定し、S3のバケットポリシーで許可されているオリジンアクセスアイデンティティでS3にアクセスするように設定すること
    • Restrict Viewer Access を Yes に設定し、署名付きURLによるアクセスを必須とすること

設定内容を正しく理解して安全にシステムを運用したいですね。


  • 829 views
    • Tweet
    • このエントリーをはてなブックマークに追加

この記事を書いた人
nakamatsu
仕事ではRubyでサーバサイド/Node.jsでServerlessアプリケーション/AWSインフラ・DevOpsなど。 趣味で Alexa スキル作ったりしてます。 「俺のメモ」シリーズは DoRuby をメモ帳代わりに使う実験。 記事の内容についてのご連絡は 【e-mail: nakamatsu "at" appirits.com】 まで、お願いします。

「いいね!」するとDoRubyの最新記事を受け取ることができます。

Facebook

Twitterから最新記事を受け取るならこちら

Follow @doruby

Feedlyから最新記事を受け取るならこちら

follow us in feedly

おすすめの記事
  • 2,262 views
  • 2016-07-27
リニューアルをしたDoRubyの3つの目的
  • 2,120 views
  • 2016-08-15
ビット演算でフラグを管理する
  • 1,742 views
  • 2017-04-24
アピリッツの新卒合宿2017

カテゴリ

Ruby/RailsRailsの小技Rubyの小技Gemの紹介ActiveRecord初心者向けWeb開発Java/ScalaテクUnixのあれこれデータベーススマホ開発HTML/CSS/JavaScriptデザイン製作インフラクラウドセキュリティエディタバージョン管理その他pythonWebマーケティングアクセス解析GoogleアナリティクスGoogleデータスタジオWeb広告SEOUI/UXソーシャルメディアアピリッツEC開発Webシステム開発コンサルティングWebデザインブロックチェーンゲーム紹介アプリ紹介ASP風景ライフハックパソコンツールガジェット仕事術健康生活書評Excel(エクセル)PowerPoint(パワーポイント)ゲーム制作/開発ゲームプランニングSpriteStudioマスターデータ入力/作成Unityキャラクターデザインゲームシナリオレベルデザインゲーム分析3DCGイラスト制作CG/アニメーション

    人気の記事
    最近の記事
    • 3,531 views
    • 2020-04-02
    Kali Linux 2020.2 導入と日本語化
    • 812 views
    • 2020-03-06
    rack-lineprofを改造して管理画面からファイル指定&ログ追跡出来るように
    • 785 views
    • 2020-03-05
    FactoryBot と Gimei を使って架空のユーザを作る
    • 580 views
    • 2020-02-04
    ActionCable実装しようwith webpack
    • 512 views
    • 2020-01-27
    この頃のプルリクに対するレビュー
    Facebook

      サイト情報
      • DoRubyとは
      • 株式会社アピリッツ

      ソーシャルアカウント
      • Facebook
      • Twitter

      企業情報
      • 会社概要
      • 採用情報
      • お問い合わせ
      サービス製品
      • レコメンドASP
      • サイト内検索ASP「Advantage Search」
      • オープンソースECサイト構築パッケージ「エレコマ」
      • 受注・在庫・商品情報一元管理「モールコネクター」
      • セキュリティ診断サービス
      • Googleアナリティクスセミナー

      Copyright © Appirits All Rights Reserved.