アレコレ・ティプス

これ便利だな〜と思ったことなど

HAproxy  BASIC認証 REST API 用 と ブラウザ GUI 認証で 処理を切り分ける

HAproxy の BASIC 認証で、REST API 用 に適した処理の 記述 と ブラウザから ユーザー パスワードを手入力させるBASIC 認証では、適した書き方が違うようなので、処理を書き分けた。
 

 
 

( 動作環境メモ )
 
Ubuntu 18.04.4 LTS
HA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22
 

 
 
 
## ( 上段 global のコンフィグ等は 略します。 )
## -------------------------------------------------------
## userlist
## -------------------------------------------------------
userlist 管理者_user
  user   管理者     password   ハッシュ化したパスワード
userlist panpy_user
  user   一般usr   insecure-password   パスワード平文    
 
# ---------------------------------------------------------------
# フロントエンドを定義
# port : 80  で待ち受け
# ---------------------------------------------------------------
frontend http-in
 
        bind    *:80
 
        # forntend 内に BASIC認証を記述しない。
        # backendの定義で記述し、BASIC認証の処理を用途で分ける。
 
        # DashBoard GUI
        acl url_gui        path_beg    /gui
        use_backend        gui_servers    if    url_gui
 
        # API SERVER 
        acl url_api        path_beg    /api
        use_backend        api_servers    if    url_api
 
        default_backend        get_away
 
# -------------------------------------------
# バックエンドを定義
# -------------------------------------------
backend gui_servers
 
#       GUI用のBASIC認証処理
        acl auth_一般_ok http_auth(panpy_user)
        http-request     auth if !auth_一般_ok
        server        gui-app        127.0.0.1:1880 check
 
backend api_servers
 
#       REST API用のBASIC認証処理
        acl auth_管理者_ok http_auth(管理者_user)
        http-request    deny unless auth_管理者_ok
        server        api-svr        127.0.0.1:1881 check
 
# -------------------------------------------
# Good-bye
# -------------------------------------------
backend get_away
    http-request deny
 
# -----------------------------------------------
# 上記、漢字のところは適宜 半角英数に修正すると使えるかと思います。
 
 
ーーー
 
ポイントは、
 
・フロントエンド定義のところで BASIC認証を記述しない。
・バックエンド定義のところで、BASIC認証を記述する。
 
こうすることで、 それぞれに意図したBASIC認証が動作してくれるようになりました。
 
HAproxy は、フロントに立たせると、 NodeRED のセキュリティを高めてくれたり相性いいと思うので、どんどん積極的に組み合わせて 使っていきたい!
 
 

 
参考: