1.はじめに
AWS認定試験の中で頻出のS3やCloudFrontの署名付き~とかOAIとかワードについての理解がなんとなくだったのと、公式サイトなどを見ても初学者には何やら小難しいことが書いてあってよくわからないので、本質理解のために簡単に図でまとめてみました。
2.対象者
-
S3、CloudFrontについてふわっと理解している方 - AWS認定試験に向けて勉強している方
3.今回のゴール
-
S3とCloudFrontがどういうものか理解する。 - 署名付き~を理解する。
-
OAIを用いたアクセス制御の仕組みを理解する。 - キャッシュを理解する。
4.S3、CloudFrontとは?
CloudFront
・静的、動的なウェブコンテンツ(サイトや動画など)の配信を高速化できる。
・アクセス制御や暗号化など通信をセキュアにできる。(今回はここを紹介)
・AmazonやHuluにも採用されており、AWSでWebアプリケーションを利用する際も使われる。
S3
・クラウドストレージサービス。容量無制限でファイルなどのデータを格納できる。
・バージョン管理やバックアップ、暗号化など何かあったときに対する安全性が強い。
組み合わせることで出来ること
Webアプリケーションを作り、htmlをS3に上げたものの、コンテンツが表示されるのが重いなどの場合にCloudFrontをはさんであげることで早くユーザにコンテンツを届けることができる。
5.署名付き~とは?
インターネットはだれでもアクセスできてしまうので、S3に上げた内容そのままだと他の人に見られてしまう。
なので、知っている人(例えばログインユーザなど)しか見られないようにするための仕組み。
署名付きURL
AWS認定試験で、まず登場するであろうワード。
文字通り、URLの後ろにこんな感じで署名がくっついてます。
https://s3-ap-northeast-1.amazonaws.com/index.html?X-Amz-Algorithm=cnhidnkjnjweqlmf~~~
署名用のタグはX-Amz-Algorithm以外にもいくつかあるのですが長いので割愛します。。
このURL+署名の形でリクエスト送ってくれないとアクセス通さないよ?というのがこれです。
この署名もいつまで有効にするかの時間設定が可能になってます。
署名付きCookie
二つ目が署名付きCookieで、何が違うかというと署名情報をURLにくっつけるのではなくてHTTPリクエストする際にCookieに署名情報を乗っけて認証する点です。
署名付きURLだと、URLが変わってしまうので変えたくない場合などはこちらを使用する形になると思います。
要件的にCookieを使えないという場合は署名付きURLになったりするので、この辺りはケースバイケースですね。
5.OAIとは?
オリジンアクセスアイデンティティの略称です。
(と言われても私は分からなかったので、ワードをかみ砕きました…笑)
オリジン...目的のものが置いてある場所。実際はS3のバケットを指定します。
アクセス...これはそのままアクセスですね。
アイデンティティ...その人(ユーザ)だと証明できること。
なので、OAIは 目的のもの(html)を取りに行く(アクセス)ための正しいユーザですよ。 という証明書のようなものの理解でよいと思います。
実際はCloudFrontで作成できる特別なユーザのことを指しており、作成したOAIをS3のバケットポリシーに設定してあげると、OAIのみアクセスを許可するように機能してくれるようになります。
S3をセキュアにするために、CloudFront経由でアクセスしないと受け付けないようにしてくれるので、ありがたい機能ですね。
最近はもはやレガシーな仕組みで、現在はOACという仕組みがAWSから推奨されているようです。
6.キャッシュとは?
CloudFrontの良い点としてキャッシュを保存しておける点があります。
ユーザがリクエスト投げたときにS3まで毎回取りに行ってもらうのではなく、同じリクエスト結果をすでにCloudFront側で保持しているのであれば、そのまま返してくれるというものです。
CloudFrontでは、あらかじめキャッシュの保持時間(TTL)などを設定したり、リクエストのパスパターンを設定しておくことで、パスパターンに応じてリクエストをさばくことができます。
このリクエストパターンの設定がビヘイビアとも呼ばれていてリクエストのURLによってどのオリジンを見に行くかの振り分け設定をすることができます。
※先ほどの署名付きURLやCookieもここで設定に絡んできます。
以下のようなイメージになります。
(ここにOAIや署名付きの設定、キャッシュがある場合はS3に取りにいかないなどありますが、簡易的な流れになります。)

7.最後に
S3やCloudFrontは細かく説明するとそれだけでびっしりなのであくまで要点を絞って内容を短めにしましたが、
AWSのサービスって本当に色々考えられててびっくりしました…。
AWS認定試験に限った話ではないですが、ちゃんと仕組みを理解したうえで覚える方がイメージとして頭に残るので遠回りのようで近道なのかもしれません。
同じような境遇の方に参考になれば幸いです。