プログラミング備忘録

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

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

あらすじ

黒田家のAWSのS3にあるファイルやAPIを特定の相手のみが利用できる形で公開するために、CloudFrontを使用する。

亡き友、竹中半兵衛重治が残した言葉を胸に刻み・・・(エモポイント)

CloudFrontとは

S3やAPIAWSのアカウントを持っていない人でも、条件に合致するならアクセスできるようにする、という仕組みです。 もしくはWeb上のアクセスの関所。

設定をしていく ver20210531

AWSコンソールからCloudFrontを立ち上げる

コンソールにログイン後、一番上の検索フィールドでCloudFrontと入力します。 サービスに表示されるCloudFrontを押下しましょう。 f:id:nigou2:20210710152846p:plain

下図のように左上にCloudFrontと表示される画面が立ち上がります。

f:id:nigou2:20210710152917p:plain

今回の目的 Distribution を作る

Distributionとは

Distributionとは、Web上に置かれるアクセスの関所そのものを指します。 Distributionの設定要素はいくつかありますが、

Origin
関所を通ってアクセスを許可するAWSの何か(APIやAPIなど)
Behabior アクセスをどのOriginに振り分けるかのルール

の2つだけ押さえておけば一旦は大丈夫です。 逆に言えば、Distributionを作成する際に、最低でも一つずつOriginBehabiorは必要になります。

Distribution初期設定

画面左のペインから一番上のDistributionsを押下します。 f:id:nigou2:20210710153056p:plain

表示された画面の一番上部のCreate Distributionを押下します。 f:id:nigou2:20210710153115p:plain

英語で記載されたページに遷移したかと思います。 f:id:nigou2:20210710153132p:plain

一応、英文の内容ですが

以下のことがしたい場合はDistributionを作成します。
・静的および動的コンテンツ (.html、.css、.php、グラフィック ファイルなど) の配布を高速化します。
・HTTP または HTTPS を使用してメディア ファイルを配布します
・オブジェクトを追加、更新、または削除し、Web フォームからデータを送信します。
・ライブ ストリーミングを使用して、イベントをリアルタイムでストリーミングします。

ファイルをオリジン (Amazon S3 バケットまたはウェブサーバー) に保存します。
ディストリビューションを作成した後、ディストリビューションにオリジンを追加できます。

つまりDistributionでできることを説明しています。Get Startedしましょう。 するとやたら入力ボックスのある画面が表示されます。 f:id:nigou2:20210710153156p:plain

ただし、これを全部入力する必要はありません。 ここで行うのは上から、前掲の必須の2要素、OriginBehavior、最後にDistibutionの設定になります。

Origin設定

OriginにS3バケットを設定する場合

先頭のOriginDomainNameの枠をクリックし、プルダウン表示される中から対象のバケットを選びます。 f:id:nigou2:20210710153324p:plain 加えてバケット内の特定のフォルダオブジェクトを対象に取りたい場合は、Origin Pathにスラッシュとフォルダ名を記載します。 f:id:nigou2:20210710153338p:plain

Restrict Bucket AccessはYesにします。

Origin Access Identityはそのまま、Grant Read Permissions on BucketYes, Update Bucket Policyとします。 これをしないと、S3側のバケットポリシーが更新されず、Distributionからのアクセスも弾いてしまうので注意が必要です。

また、Distributionの初期設定が終わったらバケットのアクセス状態は公開になっていることを確認してください。 f:id:nigou2:20210710153728p:plain これがONになっていると、Distributionからのアクセスも拒否されてしまいます。

OriginにAPI Gatewayを設定する場合

エンドポイントのURLのうち、ステージ名以降を除いた部分をOriginDomainNameの枠に貼り付けます。 f:id:nigou2:20210710154053p:plain 勝手にhttps://が省略されますが問題ございません。 加えてOrigin Pathにスラッシュとステージ名を記載します。 f:id:nigou2:20210710154117p:plain

共通

Enable Origin Shield は指定しなくても大丈夫です。 指定すると、Origin Shield Regionを指定できるようになります。 Origin Shield Regionを指定すると、レイテンシが小さくなる=そのリージョンに通信が最適化される、らしいです。

f:id:nigou2:20210710153417p:plain

Origin IDを入力します。デフォルトで入るものは長いので、管理する際に分かりやすい文字列に差し替えることをお勧めします。 f:id:nigou2:20210710154142p:plain

Minimum Origin SSL ProtocolTLSv1.2Origin Protocol PolicyHTTPS Onlyを指定します。 詳細が気になる方は「こちら(外部)」を確認してください。 f:id:nigou2:20210710154208p:plain

他、接続のタイムアウト、レスポンスのタイムアウト、ヘッダー指定もありますが、基本はデフォルト値で大丈夫です。

Behavior設定

Viewer Protocol PolicyHTTP and HTTPSにします。HTTPリクエスト、HTTPSリクエストいずれも可という状態です。 Allowed HTTP Methods は許容するHTTPリクエストの種類です。POSTされて動くAPIをOriginに指定しているのであればに一番下のものにしないと動かないので、何も考えず一番下のものでいいと思います。

f:id:nigou2:20210710154316p:plain

その他は一切操作は不要ですが、Real-time Log Configurationについては, リアルタイムでログを蓄積したい、且Kinesisを導入しているなら有効化が可能です。 参考

Distribution設定

ここについても基本的には操作は不要です。 強いて言うと下図のAWS WAF Web ACLは、後から使用します。

f:id:nigou2:20210710154345p:plain これが、Distributionに対して適用するアクセス制限のルールをつかさどります。 ※逆に言うとDistributionを作成するだけだと門番がいない関所を立てたにすぎないので注意

最後に画面最後のCreate Distributionを押下したら完成です。

テスト

再び、左のペインからDistributionsに戻ります。 Create Distributionsの下に、今まで作ったDistributionが並んでいるので、作成したもののIDをクリックします。 f:id:nigou2:20210710154443p:plain

下図のような画面が表示されたら、Domain Nameをコピーしましょう。 f:id:nigou2:20210710154839p:plain

OriginにS3バケットを設定した場合

ブラウザのURLにDomain Name/[ファイル名]を入力します。

例)

Origin Domain Nameを「my_bucket」、Origin Pathを「my_folder」、Domain Nameを「hogehoge.cloudfront.net」と設定しているとします。

画像ファイルであるhttps://my_bucket.s3-ap-northeast-1.amazonaws.com/my_folder/myImage.pnghttps://my_bucket.s3-ap-northeast-1.amazonaws.com/my_folderまでがDomain Nameであるhogehoge.cloudfront.netで代替されているので、 ブラウザにはhogehoge.cloudfront.net/myImage.pngと入力します。

OriginにAPI Gatewayを設定した場合

実際にHTTPリクエストを実行して動作を確認します。 例えばPOSTメソッドのAPIなら下図のようになります。

f:id:nigou2:20210710160238p:plain

もし、POSTしたにもかかわらずThe request could not be satisfied.のようなHTML形式のアラートが返った場合は タブのBehaviorAllowed HTTP MethodsでPOSTが許可されているか確認して下図の通りに設定してください。 f:id:nigou2:20210710160302p:plain

ここまででできたこと

関所と、関所を通らないと辿り着けない場所1個の設定

やらないといけないこと

アクセス制限のルールの設定 (関所に門番を立てる) 関所を通らなければ辿り着けない場所の追加

f:id:nigou2:20210710160352p:plain

f:id:nigou2:20210710160407p:plain

流石「今世の張良」とうたわれた名軍師、黒田如水。今時点で使い道がイメージできている・・・・ 次は複数のコンテンツをCloudFrontに紐づかせる、通称マルチオリジンについてです。

参考

Distribution作成時の設定内容:もっとちゃんとしたやつ