ALBリスナールールで固定レスポンス、リダイレクト先指定してみた

# 目標
Application Load Balancerのリスナー設定(固定レスポンス、リダイレクト先指定)を理解する。

# Application Load Balancerのリスナーとは？
閲覧者毎にページの表示非表示、リダイレクト等を設定できます。
1.閲覧者Aには、ページA、B共に表示する。
2.閲覧者Bには、ページAは表示させない、ページBのみ表示する。
3.閲覧者Cには、ページAは表示させない、ページBを表示させた際はページCにリダイレクトさせる。

> リスナーとは、設定したプロトコルとポートを使用して接続リクエストをチェックするプロセスです。リスナーに対して定義したルールにより、ロードバランサーが登録済みターゲットにリクエストをルーティングする方法が決まります。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-listeners.html

# 1.事前準備
1.EC2を作成します。

```
$ sudo su -
# yum install httpd
# mkdir /var/www/html/admin
# vi /var/www/html/admin/index.html
Admin page
# vi /var/www/html/index.html
All can see
```

2.ALBを作成します。
3.ALBにEC2を紐付けます。

# 2.固定レスポンスを返す
許可したIPアドレスでアクセスした際は、admin配下含む全ページを閲覧可能に設定します。
指定していないIPアドレスでアクセスした際は、admin配下のページは閲覧不可能(403エラー)に設定します。

1.**[EC2]** で、 **[ロードバランサー]** を選択します。
2.**[リスナー]** タブで、 **[ルールの表示/編集]** を選択します。
3. 上部の **[+]** を選択します。
4. **[デフォルトアクション]** の上にある、 **[ルールの挿入]** を選択します。
5. 下記表を参照し、 **[IF(すべてに一致)]** 入力後に **[✓]** を選択します。

| 項目 | 値 |
|:-:|:-:|
| 条件の追加 | パス... |
| = | /admin/* |

6.下記表を参照し、 **[IF(すべてに一致)]** 入力後に **[✓]** を選択します。

| 項目 | 値 |
|:-:|:-:|
| 条件の追加 | 送信元 IP... |
| = | PCのIPアドレス/32 |

PCのIPアドレスが分からない方は、「[私のIPアドレスは何ですか？](http://www.ai-web-hosting.com/%E7%A7%81%E3%81%AEip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/
)」を参照してください。

7.下記表を参照し、 **[THEN]** 入力後に **[✓]** を選択します。

| 項目 | 値 |
|:-:|:-:|
| アクションの追加 | 転送先... |
| ターゲットグループ | `本手順1-2`で作成したターゲットグループ |
| 重み (0～999) | 100 |

8.右上の **[保存]** を選択します。
9.下記画像の様に設定できていればおｋです。
許可したIPアドレスでアクセスした際は、admin配下含む全ページ閲覧可能な設定を追加しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2088692/be0439d0-ba6f-304b-0658-49cb8b9ba54a.png)
10.上部の **[+]** を選択します。
11.先程作成したルールとデフォルトルールの間にある、 **[ルールの挿入]** を選択します。
12.下記表を参照し、 **[IF(すべてに一致)]** 入力後に **[✓]** を選択します。

| 項目 | 値 |
|:-:|:-:|
| 条件の追加 | パス... |
| = | /admin/* |

13.下記表を参照し、 **[THEN]** 入力後に **[✓]** を選択します。

| 項目 | 値 |
|:-:|:-:|
| アクションの追加 | 固定レスポンスを返す... |
| レスポンスコード | 403 |
| レスポンス本文| 403 ForbiddenTest |

14.右上の **[保存]** を選択します。
15.下記画像の様に設定できていれば成功です。
許可していないIPアドレスでアクセスした際は、admin配下のページは閲覧不可能(403エラー)に設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2088692/17343a25-65f1-d558-bbf9-e1addb6f325c.png)

# 3.サイト確認

1.下記ページが閲覧可能である事を確認します。

```
http://ALBのDNS名
http://ALBのDNS名/admin/index.html
```

2.上部の **[鉛筆マーク]** を選択します。
3.本手順2-6で設定したIPアドレスを、別のIPアドレスに編集後保存します。
4.下記ページが閲覧可能である事を確認します。

```
http://ALBのDNS名
```

5.下記ページが閲覧不可能である事を確認します。

```
http://ALBのDNS名/admin/index.html
```

# 4.リダイレクト先指定
指定したIPアドレス以外は/admin/*にアクセスした際、別サイトにリダイレクトされる様に設定します。

1.上部の **[鉛筆マーク]** を選択します。
2.上から2番目のルールの **[鉛筆マーク]** を選択します。
3.**[THEN]** に設定作成したアクションを **[ゴミ箱マーク]** で削除します。
4.下記表を参照し、 **[THEN]** 入力後に **[✓]** を選択します。

| 項目 | 値 |
|:-:|:-:|
| アクションの追加 | リダイレクト先... |
| HTTPS | 443 |
| ホスト| www.google.com |
| パス | / |

5.本記事「[3.サイト確認](https://qiita.com/drafts/8d05cf45724dd4d7c8c8/edit#3%E3%82%B5%E3%82%A4%E3%83%88%E7%A2%BA%E8%AA%8D)」を参照し、リダイレクト先が指定出来ているか確認します。
`本手順3-5`で閲覧不可能だったページを開くとgoogle.comにリダイレクトされたら成功です。

# 参考記事

https://dev.classmethod.jp/articles/alb-path-and-ip-based-restriction/

https://oji-cloud.net/2020/12/06/post-5729/