今回は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件のコメント