今回はWordPressの /wp-admin
配下をALBのリスナールールでIP制限をしてみたのですが、Terraformでの参考サイトが全く見つからないということでブログします。以前書いたブログを参考にすればできるはず!!
しかし今まではNginxで以下のように書けばIP制限が可能なのですが、設定ファイルにごちゃごちゃ書きたくないということもあり、ALBで処理するのがベストですね。
1 2 3 4 5 |
location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ { allow xxx.xxx.xxx.xxx; allow xxx.xxx.xxx.xxx; deny all; } |
■ALBリスナールール
- 送信元IPを適当に、パスが
/wp-admin
と/wp-login.php
に対して転送先を適当なターゲットグループを指定 - パスが
wp-admin
とwp-login.php
に対して固定レスポンスを返す、404のtext/plan Not Foundを指定
上記のように特定のIP以外アクセスするとNot Foundと返ってくればOK。これをTerraform化します。
■Terraform
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb_listener_rule
- elb.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
## ALB listener_rule resource "aws_lb_listener_rule" "adachin-wordpress-wp-admin" { listener_arn = aws_alb_listener.adachin-app-https.arn priority = 100 action { type = "forward" target_group_arn = aws_lb_target_group.adachin-wordpress.arn } condition { source_ip { values = ["xxx.xxx.xxx.xxx/32", "xxx.xxx.xxx.xxx/32"] } } condition { path_pattern { values = ["/wp-admin", "/wp-login.php"] } } } resource "aws_lb_listener_rule" "adachin-wordpress-wp-admin-response" { listener_arn = aws_alb_listener.adachin-app-https.arn priority = 200 action { type = "fixed-response" fixed_response { content_type = "text/plain" message_body = "Not Found" status_code = "404" } } condition { path_pattern { values = ["/wp-admin", "/wp-login.php"] } } } |
ハマったところは
Error: Only one of field, host_header, http_header, http_request_method, path_pattern, query_string or source_ip can be set in a condition block
10~13行目のsource_ip(送信元IP)をpath_patternと同じcondition内に書いてエラー食らったところですかね。別conditionとして分ければOK。他にも複数のIPを指定しまくるとリスナールールの条件値制限が5つまでなので注意するところですかね。以下より。
- 条件値のルール制限、ワイルドカード、および全体のルール。
- 100 アプリケーションのロードバランサーごとの合計ルール
- 5 ルールあたりの条件値
- 5 ルールあたりのワイルドカード
- 5 ルールあたりの加重ターゲットグループ
あとpriorityは全てのリスナーグループに設定しないと優先順位固定化されないので気をつけましょう
■まとめ
ALB凄すぎか!ちなみにTerraformでのALBリスナールールは手動で優先順位を変更しても差分にならないことを知った。
0件のコメント