SlideShare a Scribd company logo
4
Most read
6
Most read
8
Most read
CloudFront経由でのCORS利用
はじめに
• CloudFront経由でS3のCORS(Cross Origin
  Resource Sharing)を利用しようと思って少し
  ハマったので、CORSの仕様自体
  (http://www.w3.org/TR/cors/)から一度ちゃん
  と読んでまとめてみた。
通常のCORSリクエスト
リクエストにはOriginヘッダが必要!サーバー側の実装に依
存するが、仕様上ではOriginヘッダがあるときのみ、CORSリ
クエストとして認識し、レスポンスのヘッダ内でAccess-
Control-*を返す。
             ヘッダ
           Origin: http://test-domain

                        GETリクエスト
                                                             WEB
 Browser                                                     サー
                                                             バー
                       レスポンス
             ヘッダ
           Access-Control-Allow-Origin: http://test-domain
           Access-Control-Allow-Methods: GET
           Access-Control-Max-Age: 3000
           Access-Control-Allow-Credentials: true
CORSレスポンス
CORSのレスポンスには、ヘッダ内に以下のような項目が含
まれている。これらが含まれていないとCORSにはならな
い。リクエストにOriginヘッダがなかったり、後述のpreflight
リクエストに失敗したりするとこれらのヘッダはつかない。
  • Access-Control-Allow-Origin
  • Access-Control-Allow-Methods
  • Access-Control-Max-Age
  • Access-Control-Allow-Credentials

最低限、Access-Control-Allow-Originが含まれていればブラウ
ザ側で解釈してくれる。(少なくともChromedでは)

ex. Access-Control-Allow-Origin: http://test-domain
カスタムヘッダ付きCORSリクエスト
リクエスト内にX-hogeのようなカスタムヘッダが存在する場
合にはpreflightリクエストが発生する。OPTIONSメソッドで
利用可能なヘッダかどうかを確認する。
            ヘッダ
                                                        x-hogeが利用可
           Access-Control-Request-Headers: x-hoge
                                                        能かどうかを聞
                                                           きに行く
            OPTIONSリクエスト(preflightリクエスト)

                      レスポンス
            ヘッダ                                               WEB
 Browser   Access-Control-Allow-Headers: x-hoge
                                                              サー
                                                              バー
                   GETリクエスト                       x-hogeは利用
                                                   OK!と返答

                      レスポンス
S3のCORS
S3はOPTIONSによるpreflightリクエストを正しく解釈する。
許可対象を*で設定した場合、リクエストがあるごとにリク
エストに沿ったAllowed Headerを返す。

              ヘッダ
           Access-Control-Request-Headers: origin, accept, x-hoge

                       OPTIONSリクエスト

              ヘッダ              レスポンス
           Access-Control-Allow-Headers: x-hoge

 Browser      ヘッダ
                                                                    S3
           Access-Control-Request-Headers: origin, accept, x-test

                       OPTIONSリクエスト

              ヘッダ              レスポンス
           Access-Control-Allow-Headers: x-test
CloudFront + S3 通常のCORS
通常のリクエストなのでpreflightリクエストは飛ばないが、
CloudFrontからS3へのリクエストのところでいくつかのカス
タムヘッダがつくので、そこで動作がおかしくなるケースが
ある。
                                                 ヘッダ
            ヘッダ                                Origin: http://test-domain
          Origin: http://test-domain           X-Amz-Cf-Id: xxxx
                                               X-Forwarded-For: xxx

          GETリクエスト                             GETリクエスト

Browser                                CF                                   S3
     たとえば今回のケースでは                           ここで、preflightによる確
     X-Amz-Cf-Idなどをハード                      認なしで飛んできたカスタ
     コーディング的にS3の                            ムヘッダがあるのでCORS
     Allowed Headerに設定する                    とは認識されず、Access-
     と動くこともあるが、動い                           Control-*ヘッダを返せない
     たり動かなかったり。                             ことがある。
CloudFront + S3 カスタムヘッダ付きCORS
Cloud FrontがOPTIONSメソッドを禁止しているので、
preflightに失敗する。


        ヘッダ
       Access-Control-Request-Headers:
       origin, accept, x-hoge


          OPTIONSリクエスト

Browser 403 Forbidden                    CF   S3
CloudFront + EC2でCORS
EC2上にApache等を起動するケース。強制的にAccess-
Control-*ヘッダ群を返してやればうまく動く。


                                                   ヘッダ
            ヘッダ                                 Origin: http://test-domain
          Origin: http://test-domain            X-Amz-Cf-Id: xxxx
                                                X-Forwarded-For: xxx

          GETリクエスト                              GETリクエスト

Browser                                CF                                    EC2
           レスポンス                                   レスポンス
                  ヘッダ
                Access-Control-Allow-Origin: http://test-domain
                Access-Control-Allow-Methods: GET
                Access-Control-Max-Age: 3000
                Access-Control-Allow-Credentials: true
まとめ
• 現状、CloudFront経由でS3のCORSはうまく
  動かないケースがある。これはCORSの
  preflightリクエストの仕様上しようがないお
  話。
• ワークアラウンドとしては、EC2にWEBサー
  バーを立てて、強制的にAccess-Control-
  Allow-Originヘッダ等を返してあげるのがい
  いと思う。

More Related Content

PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
PDF
マルチテナント化で知っておきたいデータベースのこと
PPT
インフラエンジニアのためのcassandra入門
PDF
20200630 AWS Black Belt Online Seminar Amazon Cognito
PDF
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
PDF
AWSのログ管理ベストプラクティス
PDF
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
マルチテナント化で知っておきたいデータベースのこと
インフラエンジニアのためのcassandra入門
20200630 AWS Black Belt Online Seminar Amazon Cognito
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
AWSのログ管理ベストプラクティス
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces

What's hot (20)

PDF
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
PDF
Amazon Athena 初心者向けハンズオン
PDF
Google Cloud で実践する SRE
PDF
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
PDF
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
Fluentdのお勧めシステム構成パターン
PPTX
Redisの特徴と活用方法について
PDF
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
PDF
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PDF
[AKIBA.AWS] VPN接続とルーティングの基礎
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
PDF
CloudFrontのリアルタイムログをKibanaで可視化しよう
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PDF
AWS Black Belt Online Seminar 2016 AWS CloudFormation
PDF
AWS BlackBelt AWS上でのDDoS対策
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
Amazon Athena 初心者向けハンズオン
Google Cloud で実践する SRE
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
Azure Api Management 俺的マニュアル 2020年3月版
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Fluentdのお勧めシステム構成パターン
Redisの特徴と活用方法について
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
Infrastructure as Code (IaC) 談義 2022
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[AKIBA.AWS] VPN接続とルーティングの基礎
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
CloudFrontのリアルタイムログをKibanaで可視化しよう
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS BlackBelt AWS上でのDDoS対策
Ad

Viewers also liked (20)

PDF
CloudFront、RedshiftなどAWSが支える動画広告の舞台裏~インフラのイノベーションがもたらす動画広告のイノベーション~
PDF
送る言葉
PDF
FluentdとAWSを使ったログの運用
PPTX
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておく
PDF
RICOH THETAの全天球画像でペーパークラフト
PDF
EC2とVarnishで画像配信
PPTX
CloudFront最近の事例と間違った使い方
PPTX
GUERRA DE CANUDOS
PDF
例外設計における大罪
PPTX
Life of an Fluentd event
PDF
AWS OpsWorksハンズオン
PPTX
How I learned to stop worrying and love the cloud
PPS
Pakistan ky wasail
PPTX
Ilan Goren @ German Israel Congress 2013, Berlin
PDF
Embedded projects
PPTX
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...
PPTX
Over onze site
PDF
STRATEGIC MANAGEMENT - DRGORAD
PPTX
Promotion on pinterest
PDF
Como ser un gran maestro
CloudFront、RedshiftなどAWSが支える動画広告の舞台裏~インフラのイノベーションがもたらす動画広告のイノベーション~
送る言葉
FluentdとAWSを使ったログの運用
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておく
RICOH THETAの全天球画像でペーパークラフト
EC2とVarnishで画像配信
CloudFront最近の事例と間違った使い方
GUERRA DE CANUDOS
例外設計における大罪
Life of an Fluentd event
AWS OpsWorksハンズオン
How I learned to stop worrying and love the cloud
Pakistan ky wasail
Ilan Goren @ German Israel Congress 2013, Berlin
Embedded projects
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...
Over onze site
STRATEGIC MANAGEMENT - DRGORAD
Promotion on pinterest
Como ser un gran maestro
Ad

Similar to CloudFront経由でのCORS利用 (18)

PDF
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
PDF
HTML5 Security & Headers - X-Crawling-Response-Header - by 重森 友行
PDF
20101220 pixiv tech_meeting
PDF
Awsmeister cloudfront20120611-slideshare用
PDF
XML Http Request Level2 の噂を聞いたので調べてみた
PDF
20120611 aws meister-reloaded-cloud-front-public
PDF
Rails と Rack と HTTP と通信の話
PDF
AWS BlackBelt Online Seminar 2017 Amazon CloudFront + AWS Lambda@Edge
PDF
Aws summits2014 amazon_cloudfrontを利用したサイト高速化とセキュア配信
PDF
The Latest Specs of OpenID Connect at #idcon 9
PDF
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信
PDF
CDNの仕組み(JANOG36)
PDF
What is cors??
PDF
Beginning Java EE 6 勉強会(7) #bje_study
PPTX
AWSで認証機能のついたサイトを手軽に構築する(Cognito+CloudFront+API Gateway)
PDF
Yahoo!ボックスAPI Hackathon向け資料
PPTX
AWSとmod_pagespeedで 楽々サクサク高速化!!
PDF
Yahoo!ボックスAPI Hackday資料
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
HTML5 Security & Headers - X-Crawling-Response-Header - by 重森 友行
20101220 pixiv tech_meeting
Awsmeister cloudfront20120611-slideshare用
XML Http Request Level2 の噂を聞いたので調べてみた
20120611 aws meister-reloaded-cloud-front-public
Rails と Rack と HTTP と通信の話
AWS BlackBelt Online Seminar 2017 Amazon CloudFront + AWS Lambda@Edge
Aws summits2014 amazon_cloudfrontを利用したサイト高速化とセキュア配信
The Latest Specs of OpenID Connect at #idcon 9
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信
CDNの仕組み(JANOG36)
What is cors??
Beginning Java EE 6 勉強会(7) #bje_study
AWSで認証機能のついたサイトを手軽に構築する(Cognito+CloudFront+API Gateway)
Yahoo!ボックスAPI Hackathon向け資料
AWSとmod_pagespeedで 楽々サクサク高速化!!
Yahoo!ボックスAPI Hackday資料

More from Yuta Imai (20)

PPTX
Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no Internet
PDF
HDP2.5 Updates
PDF
Deep Learning On Apache Spark
PDF
Hadoop in adtech
PDF
Hadoop/Spark セルフサービス系の事例まとめ
PDF
IoTアプリケーションで利用するApache NiFi
PDF
OLAP options on Hadoop
PDF
Apache ambari
PDF
Spark at Scale
PDF
Dynamic Resource Allocation in Apache Spark
PDF
Apache Hiveの今とこれから - 2016
PDF
Hadoop最新事情とHortonworks Data Platform
PDF
Benchmark and Metrics
PDF
Hadoop and Kerberos
PDF
Spark Streaming + Amazon Kinesis
PDF
オンラインゲームの仕組みと工夫
PDF
Amazon Machine Learning
PDF
Global Gaming On AWS
PDF
Digital marketing on AWS
PDF
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no Internet
HDP2.5 Updates
Deep Learning On Apache Spark
Hadoop in adtech
Hadoop/Spark セルフサービス系の事例まとめ
IoTアプリケーションで利用するApache NiFi
OLAP options on Hadoop
Apache ambari
Spark at Scale
Dynamic Resource Allocation in Apache Spark
Apache Hiveの今とこれから - 2016
Hadoop最新事情とHortonworks Data Platform
Benchmark and Metrics
Hadoop and Kerberos
Spark Streaming + Amazon Kinesis
オンラインゲームの仕組みと工夫
Amazon Machine Learning
Global Gaming On AWS
Digital marketing on AWS
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-

CloudFront経由でのCORS利用