Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アクセスログを見て学ぶAWSサービスとネットワーク
Search
mai miya
February 16, 2024
2
500
アクセスログを見て学ぶ AWSサービスとネットワーク
2024/02/16
【AWS】AWS10分LT会 - vol.3
https://aws-likers.connpass.com/event/307986/
mai miya
February 16, 2024
Tweet
Share
More Decks by mai miya
See All by mai miya
AWS Well-Architected Framework をみんなで読んでいる話
maimyyym
1
29
課金体系を紐解いて学ぶAWS WAF
maimyyym
2
110
自由で便利なLaravelのしんどいポイントを楽しさに変える
maimyyym
1
110
LandingZoneAccelerator と学ぶ 「スケーラブルで安全なマルチアカウントAWS環境」と 私たちにもできるベストプラクティス
maimyyym
1
210
初めての札幌と初めてのBedrock ~Bedrock Converse API×SAMで遊んでみる~
maimyyym
1
290
S3操作の落とし穴から学ぶ Laravel File Storageと例外処理
maimyyym
2
630
タイパ重視×アウトプット駆動ではじめるAWS 〜認定資格とコミュニティの先で考えるAWSの学び方〜
maimyyym
2
280
SREがいない”今いる場所”で 「SRE」について聞いて、考えてみた
maimyyym
2
380
IaCからAWSに入門した初心者が CloudFormationを通して考えた「AWS操作」の使い分け
maimyyym
4
950
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Side Projects
sachag
452
42k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
The Invisible Side of Design
smashingmag
298
50k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Building a Scalable Design System with Sketch
lauravandoore
459
33k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Adopting Sorbet at Scale
ufuk
73
9.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Statistics for Hackers
jakevdp
796
220k
Writing Fast Ruby
sferik
627
61k
Transcript
アクセスログを⾒て学ぶ AWSサービスとネットワーク 【AWS】AWS10分LT会 - vol.3 2024.02.16 宮崎 真⾐ (@maimyyym) 1
サブタイトル Hello Worldしているだけの 静的なindex.htmlへのアクセスログを⾒る話 (CloudFront+S3+Athena) 2
アジェンダ 1. 私の現在地 2. 前提知識と構成について 3. CloudFrontのログを覗いてみる 4. 考えてみる 3
01 私の現在地
私の現在地 # 私の現在地(物理) 5 at 福岡
まず⾃⼰紹介 宮崎 真⾐ Miyazaki Mai - Account - :@maimyyym -
Work at - 株式会社 Fusic (at 福岡!) 技術本部/技術開発部⾨所属 - Webエンジニア - Skill - PHP(Laravel) - AWS - TypeScript 6 image
私の現在地 # 私の現在地(経験値) 7 • 未経験⼊社 → 案件に⼊り始めた • AWS利⽤の経験値は個⼈レベル
私の現在地 # Webエンジニアによる AWS個⼈利⽤ 8 【個⼈利⽤】 とりあえずサービスを使って動かしてみる 【実際】 インターネット上でサービスを使う IP制限や不特定多数のアクセスを意識する
私の現在地 # 私のモチベーション 9 ネットワークを学びたい!!!
私の現在地 # 私のモチベーション 10 ネットワークを学びたい!!! どんなアクセスがあるんだろう?
私の現在地 # 私のモチベーション 11 ネットワークを学びたい!!! どんなアクセスがあるんだろう? ログを⾒てみよう!
02 前提知識と構成
前提 # 話すこと 13 当たり前かもしれないことに 改めて考えさせられた、という話をします。 (ログを⾒てみるだけでも学びがある、という話)
前提 # 話さないこと 14 ログ分析の詳細な⽅法 ネットワークに関する詳細な内容
構成 # まずは簡単にページを公開 15 S3に置いたindex.htmlをCloudFront経由で公開する + OAC(Origin Access Control)を利⽤してindex.htmlへの アクセスはCloudFrontのみに限定
構成 # まずは簡単にページを公開 16 S3に置いたindex.htmlをCloudFront経由で公開する + OAC(Origin Access Control)を利⽤してindex.htmlへの アクセスはCloudFrontのみに限定
せっかくなのでドメインとSSL証明書も取ってみる(Route53, ACM)
構成 # アクセスログを⾒る 17 CloudFrontのビューワーリクエストログをS3に保存 これをAthenaでクエリ!
構成 # アクセスログを⾒る 18 CloudFrontのビューワーリクエストログをS3に保存 これをAthenaでクエリ! ※ Amazon Athena とは
AWSのデータ分析サービス SQLが使える S3に保存されたデータは直接分析できる
構成 # 構成 19
前提知識 # 前提知識のおさらい 20 【CloudFront】 ユーザーへのコンテンツ配信を⾼速化するCDNサービス [CDNとは?] エッジロケーションと呼ばれる世界各地に分散されたネットワーク拠点を介して、 コンテンツ配信を⾏う。ユーザーのリクエストは最も近い拠点にルーティングされる。 ★
CloudFrontはアプリケーション層(レイヤー7)で動作する ★ [レイヤー7] ユーザーが操作するアプリケーション・ソフトウェアとネットワーク通信機能の間で、 HTTP/HTTPSやファイル転送など、ユーザー(アプリケーション)のリクエストを処理する。
前提知識 # 前提知識のおさらい 21 【CloudFront】 ユーザーへのコンテンツ配信を⾼速化するCDNサービス [CDNとは?] エッジロケーションと呼ばれる世界各地に分散されたネットワーク拠点を介して、 コンテンツ配信を⾏う。ユーザーのリクエストは最も近い拠点にルーティングされる。 ★
CloudFrontはアプリケーション層(レイヤー7)で動作する ★ [レイヤー7] ユーザーが操作するアプリケーション・ソフトウェアとネットワーク通信機能の間で、 HTTP/HTTPSやファイル転送など、ユーザー(アプリケーション)のリクエストを処理する。 CloudFrontのアクセスログはレイヤー7に関わる情報が含まれているはず! ここで 予測!
03 CloudFrontのログを 覗いてみる
CloudFrontのログを覗いてみる # ⼿順 23 - CloudFrontの標準ログ記録をオンにしてS3にログを保存 - Athenaクエリ結果を保存するS3バケットを作成‧設定する
CloudFrontのログを覗いてみる # ⼿順 24 - Athenaでクエリを実⾏、CloudFrontのログからテーブル作成 - テーブルを分析していく! クエリエディタでデータソースから SQLを⽤いてテーブルを作成する
※今回は、公式ドキュメントのSQLを参照
CloudFrontのログを覗いてみる # ⼿順 25 ※公式ドキュメントのSQLを参照 【参考】 https://docs.aws.amazon.com/ja_jp/ athena/latest/ug/cloudfront- logs.html#create-cloudfront-table
CloudFrontのログを覗いてみる # おや‧‧‧?🤔 26 ※公式ドキュメントのSQLを参照 ↓ ここで使用しているフィールド=CloudFrontのログの中身 【参考】https://docs.aws.amazon.com/ja_jp/athena/latest/ug/cloudfront-logs.html#create-cloudfront-table
CloudFrontのログを覗いてみる # 覗いてみる 27 CloudFrontのアクセスログはレイヤー7に関わる 情報が含まれているはず! 予測 (少し前のスライド) cs_method クライアントのリクエストメソッド(例:
GET, POST) cs_host リクエストされたホスト名 cs_uri_stem リクエストされたURIのパス cs_uri_query クエリ⽂字列 cs_cookie HTTPクッキー cs_referrer 参照元のURL cs_user_agent クライアントのユーザーエージェント cs_protocol 使⽤されるプロトコル(例: HTTP, HTTPS) 【参考】 「Amazon CloudFront デベロッパーガイド」 - 標準ログファイルフィールド
CloudFrontのログを覗いてみる # 覗いてみる 28 SELECT * FROM "default"."logs" limit 10;
というクエリが発⾏される
CloudFrontのログを覗いてみる # 覗いてみる 29 【昨⽇(2⽉15⽇)のログを⾒てみる】 SELECT * FROM ”{データベース名}"."{テーブル名}" WHERE
"date" = DATE '2024-02-15' limit 100; あとはSQLを使って⾃在にデータを⾒るだけ
CloudFrontのログを覗いてみる # 覗いてみる 30 【昨⽇(2⽉15⽇)のログを⾒てみる】 SELECT * FROM ”{データベース名}"."{テーブル名}” WHERE
"date" = DATE '2024-02-15’ limit 100; 〈 結果 〉 ⾃分⾃⾝は⼀度も当該Webサイトに アクセスしていないが、69件のログが! エッジロケーションを⾒ると様々な場所から アクセスされていることが分かる(計10箇所)
04 考えてみる
考えてみる # ログを⾒るのは楽しい 32 ログを⾒ると、そのサービスがネットワーク上で 何を取り扱って処理しているか分かる。 AthenaはSQLを使⽤するので、 ⾃在 && ⾝近に分析できる
考えてみる # インターネットとは何たるか思い知る 33 HelloWorldだけのindex.htmlも 世界中からアクセスされている たったこれだけの静的サイトでした。
Point 個⼈利⽤では意識することが少ないネットワーク → まず⾒てみる⼿段としての”ログ” Point 3 S3にログ保存できる場合、Athenaで⼿軽にログを⾒ることができる(例:CloudFront) 34 Point 1
各サービスのログはネットワーク上の該当レイヤーに関する情報が含まれる Point 2 HelloWorldだけのindex.htmlも世界中からアクセスされている…! Point 4
ご清聴いただきありがとうございました Thank You We are Hiring ! https://recruit.fusic.co.jp/