プログラミング備忘録

仕事で覚えたことのまとめ

AWSコンテンツへのアクセスを限定開放する黒田如水の画像下さい!!!!(1)CloudFrontって何?

序文

慶長3年、太閤豊臣秀吉崩御。天下人を失った諸大名は徳川、石田の2つの陣営に分かれて政争を始める。 そんな折、九州豊前の大名にして織豊に仕えた名軍師、黒田如水は・・・

S3に格納したファイル、Lambda関数の展開に頭を悩ませていた。

ファイル、家臣にも展開したい。API、同盟相手にも使ってみてもらいたい。が、いずれも敵対する他の大名に見られるわけにはいかない秘中の秘。どうにか安心できる相手にのみファイルやAPIの利用権限を与えられないものだろうか。

そして亡き友、竹中半兵衛重治の遺した言葉を思い出す。

CloudFrontがよいぞ」

目的

S3に格納されている画像ファイルやHTML、RestAPIを、自社の人間に限定して展開したい。 ただし展開対象はAWSCLIはおろかAWSアカウントすら持っていないとする。

CloudFrontとは

Amazon CloudFront は、データ、動画、アプリケーション、および API をすべてデベロッパーにとって使いやすい環境で、低レイテンシーの高速転送により世界中の視聴者に安全に配信する高速コンテンツ配信ネットワーク (CDN) サービスです。 Amazonの説明

分かりやすく説明すると、S3やAPIAWSのアカウントを持っていない人でも、条件に合致するならアクセスできるようにする、という仕組みです。

一応ですが、S3やAPI単位でそれぞれにアクセスを制限する方法もあります。 S3であればバケットポリシーAPIであればリソースポリシーがアクセス時の制限を規定しています。 下図のように特定のリソースについてアクセス可能な相手を制限することも可能ですが、複数のバケットAPIのアクセス条件を一元的に管理することはできません。

f:id:nigou2:20210710150656p:plain
今のままでもよいが、管理が面倒ではある

都度都度APIバケットを解放する度、に設定が必要な上、アクセス制御の条件が変わるたびにバケットAPIを1つ1つ編集しなければなりません。 f:id:nigou2:20210710150534p:plain

戦国きっての名軍師の黒田如水さんはこう考えました。

複数の守城がある場合、敵の進行経路を隘路に制限し、そこにて防陣を敷くべし。 同じアクセス制限のルールを複数に同時に適用するなら、アクセスについての関所を設けるべし。

ということで、複数のリソースについてアクセス制限を同時同義にて行う関所の役割を果たすのがCloudFrontというわけです。

f:id:nigou2:20210710151006p:plain
関所の管理で一元管理

一つ一つのS3やAPIのポリシーを設定する必要もありませんから、管理コストを下げることができます。

f:id:nigou2:20210710151056p:plain

マジですぞ、黒田殿。