cloud frontを使ったサイト公開とハマりどころ
TRANSCRIPT
Copyright ©2016 HAW International Inc. all rights reserved.
CloudFrontを使ったサイト公開とハマりどころ
2016/06/11株式会社ハウインターナショナル
安土茂亨
Copyright ©2016 HAW International Inc. all rights reserved.
自己紹介
株式会社ハウインターナショナル
•クラウド事業
‣AWSのインテグレーションサービス
‣セキュアかつ高速な
WordPressホスティングサービス
•Blockchian事業
‣P2P型投票システムCongrechain
‣ブロックチェーン実証環境Chaintope
‣Blockchain Explorer
Copyright ©2016 HAW International Inc. all rights reserved.
AWSでサイト公開といえば?
Amazon S3Static Site Hosting
● 安い
● 速い
● スケール
Copyright ©2016 HAW International Inc. all rights reserved.
でも動的な機能ある
簡単な機能であれば
サーバレスな実装
API Gateway AWS Lambda
Request
Response
Copyright ©2016 HAW International Inc. all rights reserved.
AWSが提供する高速なコンテンツ配信ネットワーク
でも今日はCloudFront
Amazon CloudFront
● 世界各地のエッジロケーションから
コンテンツを高速配信
● 独自ドメインのSSL証明書のサポート
● AWS Certificate Managerによる無料SSL
● HTTPのメソッド(GET、HEAD、POST、PUT、
DDELETE、etc)に応じたキャッシュ設定
● デバイスを検出してヘッダに付与
● AWS WAFによる保護
Copyright ©2016 HAW International Inc. all rights reserved.
CloudFrontのマルチオリジン機能
Amazon CloudFront
Amazon S3
Amazon EC2
静的コンテンツ
動的コンテンツ
静的コンテンツのオリジンとして S3、動的コンテンツのオリジンとして EC2を配置しBehaviorのPath Patternでアクセスを切り替える
CloudFrontが前面なのでどちらのコンテンツに対してもAWS WAFが適用可能
Copyright ©2016 HAW International Inc. all rights reserved.
静的サイトのログの集約
Amazon CloudFront Amazon S3 Lambda
CloudWatch Logs
アクセスログ
ファイルのPUTをトリガーにLambda Function
実行
ログデータをCloudWatch Logs
にプッシュ
無期限にログを保持可能普通のCloudWatchのデータも無期限になればいいのに。。
Copyright ©2016 HAW International Inc. all rights reserved.
CloudFrontでサイト公開ハマリどころ
Copyright ©2016 HAW International Inc. all rights reserved.
index.htmlの補完
よくあるURL
https://www.haw.co.jp/
/index.html
index.htmlの補完
● CloudFrontのDefault Root Object
補完可能なのはホントにRoot Objectだけなので、
以下のようなパスのindex.htmlは補完されない
https://www.haw.co.jp/category/
● S3のStatic Site Hostingを有効化
index.htmlの補完はStatic Site Hostingのインデックスドキュメントにお任せ
省略されてる
Copyright ©2016 HAW International Inc. all rights reserved.
CloudFrontとS3の連携方法
Amazon CloudFront Amazon S3
● S3バケット
Origin Access Identityでアクセス元をCloudFrontに限定可能
階層化したindex.htmlの補完はNG
● S3のStatic Site Hosting
アクセス元をCloudFrontに限定することは不可能
階層化したindex.htmlの補完はOK
Copyright ©2016 HAW International Inc. all rights reserved.
S3オブジェクトのキー名
S3のオブジェクトのキー名として利用可能な文字列
● 英数字[0〜9 a〜z A〜Z]
● 特殊文字 !、-、_、.、*、'、
16進数としてURLエンコードが必要な文字
● "&"、"$"、"@"、"="、";"、":"、"+"、","、"?"、"–"
● 16進数の 00~1F(10 進数の 0~31)の範囲および 7F(10 進数の 127)の ASCII 文字
使わない方がいい文字
● "\"、"{"、"}"、"^"、"`"、"["、"]"、">"、"<"、"#"、"|"、"~"、"%"
● 表示不可能な ASCII 文字(10 進数の 128 ~ 255 の文字)
Copyright ©2016 HAW International Inc. all rights reserved.
S3オブジェクトのキー名
16進数としてURLエンコードが必要な文字
● "&"、"$"、"@"、"="、";"、":"、"+"、","、"?"、"–"
● 16進数の 00~1F(10 進数の 0~31)の範囲および 7F(10 進数の 127)の ASCII 文字
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>?</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyPrefixWith>%3F</ReplaceKeyPrefixWith> </Redirect> </RoutingRule></RoutingRules>
S3のBucketのRedirection Rulesにエンコード文字列を指定することでアクセス可能
User-Agentに応じたリダイレクトルールが定義できるようになると便利
Copyright ©2016 HAW International Inc. all rights reserved.
EC2で公開するコンテンツのアクセス制限
Amazon CloudFront Amazon EC2
EC2へのアクセスはCloudFrontからのみに絞りたい
現状、EC2のセキュリティグループでCloudFrontの対象IPのみのInboundを許可す
る設定しかない。↓で対象がCLOUDFRONTのIPを判断(たまに追加される)
https://ip-ranges.amazonaws.com/ip-ranges.json
セキュリティグループで特定のAWSリソースが
指定できるようになるといいのに。
Copyright ©2016 HAW International Inc. all rights reserved.
CloudFrontとEC2間のSSL通信
Amazon CloudFront Amazon EC2
● Hostヘッダをオリジンに転送する
CloudFrontで使用している証明書(Common NameがCloundFrontで公開して
いるドメイン)を流用可能
● Hostヘッダをオリジンに転送しない
オリジンサーバ(EC2)に設定されているドメイン名の証明書を別途用意する
↑のルールから外れると502 Bad Gatewayになる。
Copyright ©2016 HAW International Inc. all rights reserved.
CloudFrontのタイムアウト時間の制約
Amazon CloudFront Amazon EC2
30秒
● HEAD、GETリクエスト
オリジンが30秒以内に応答を返さない場合、接続を中断しさらに2回接続を試み
る。3回目も失敗すると別のリクエストが来るまで接続を試みない。
● DELETE、OPTIONS、PATCH、POST、PUTリクエスト
オリジンが30秒以内に応答を返さない場合、接続を中断し再接続はしない。