前回のレッスンではCloudFrontの設定を行ってみました。しかしELBへまだ直接アクセスできる状態です。今回のレッスンではELBへ直接アクセスさせないように設定してみましょう!
【ハンズオン】CloudFront+ELBの構成でELBに直アクセスを制限する

前回のハンズオンからの続きとなります。構成概念は以下の内容です。

ELBへの直接アクセスが可能な状態になっているはずです。制限をしていきます。
【ハンズオン:01】事前動作確認をする。
まずはELBに直接アクセスをしてみます。ホスト名なしのドメイン名のみでアクセス可能なはずです。

このELBへの直接アクセスをできないようにしていきます。
【ハンズオン:02】CloudFrontでカスタムヘッダを設定する
今回はCloudFrontアクセス時にhttpヘッダー内にカスタムヘッダを設定し、ELBに引き渡す際にそのカスタムヘッダ内容をチェックし、マッチした場合のみELBを利用するという内容です。
CloudFrontで設定していきましょう。

設定済のDistributionを選択します。

Originals and Origin Groupsタブ内から対象の転送先ELB項目を選択し、Editボタンを押します。

次にOrigin Custome HeadersにてHeader Nameや値(Value)を指定します。ここでの値などは他の人が推測できないような内容にします。

入力が終了したらYes Editボタンを押します。

反映に時間を要します
設定内容の反映にまた時間を要します。
【ハンズオン:03】ELB側でカスタムヘッダの受け入れ設定をする
リクエストを受付するCloudFrontでカスタムヘッダの設定をしましたので、受け入れをするELB側で設定をします。
マネージメントコンソールのEC2画面よりELBを選択します。

CloudFrontからはhttps接続ですので、リスナー設定のhttps部分を選択しルールの表示/編集を押します。

新しく受け入れのルールを追加しますので、丈夫にあるプラスマークをクリックして追加設定を行います。

既存ルールの上にあるルールの挿入を押します。

条件の追加でHTTPヘッダーを追加します。

CloudFrontで指定したカスタムヘッダー内容を入力します。

カスタムヘッダー内容が一致した場合に、EC2ターゲットへ転送します。

転送先には先に作成したターゲットグループを指定します。

入力が終わりましたら保存します。

末尾にあるデフォルトのルール内容を変更します。編集ボタンを押してデフォルトアクションを修正します。

デフォルトアクションの転送先を削除します。

カスタムヘッダーに一致しないリクエストならば、デフォルトで404エラーとするように固定レスポンスを返すようにします。

レスポンスコード404。レスポンス本文は適当に入力します。

編集が終了しましたので更新ボタンを押します。

ルールが更新されました。

【ハンズオン:04】動作確認を行う。
それではELBはCloudFrontからのみ接続できるようになったのか?動作確認をしましょう!
まずはCloudFront経由でのアクセスをしてみます。アクセス先はcdn.ドメイン名です。

ただしくEC2のコンテンツがCloudFront経由で閲覧出来ていますね。次にELBに直接アクセスしてみます。アクセス先はドメイン名です。

ELB側のリスナールールに一致しないリクエストでしたので、404エラーとなります。
まとめ
以上、CloudFrontからのみ受け付けるようにELBのリスナー内容を変更してみました。ちなみにカスタムヘッダー内容が漏れてしまうと、CloudFront以外からもアクセスが可能です。

今回の実習では、リスナールールの編集が出来る事を一番の目的にしています。リスナールールは色々と条件指定が出来ますので、「特定のIPからのみ指定URLへアクセスを許可する」や「httpリクエストをhttpsへリダイレクトする」など試してみてください!
ちなみに既存のリスナールールのhttpは今回の構成では削除した方がよいです(CloudFrontからはhttps接続のみとなっている為)
以上、CloudFront実習②は終了です。
各リソースは削除してください。
今回までの実習で作成した以下の各リソースは削除してください。
・CloudFrontのDistribution(Disable後にDeleteする事)
・Route53で追加したAレコードやCNAMEレコード
・ELB
・ターゲットグループ
・EC2インスタンス
・ACMで作成した証明書
・NAT Gateway(時間かかります)
・ElasticIP
・VPC