Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新(準備中)

Jan 30, 2021 - コメント - 日記

traefik配下のサービスにBasic認証を設定する

traefik で自分で建てたウェブサービスにパスワードを設定する方法を紹介します。以前の記事(1つのサーバにたくさんのWebサービスを詰め込む方法) で使ったwhoamiサービスを例に設定方法をメモします。

traefikでは、さまざまな追加機能をミドルウェアと呼ばれる仕組みで提供しています。使い方は簡単です。

追加前のwhoamiサービスはこんな感じでした

1
2
3
4
5
6
7
8
services:
  whoami:
    image: containous/whoami
    labels:
      - "traefik.http.routers.whoami_example.rule=Host(`whoami.example.com`)"
      - "traefik.http.routers.whoami_example.tls=true"
      - "traefik.http.routers.whoami_example.tls.certresolver=dnsresolver"
      - "traefik.http.routers.whoami_example.tls.domains[0].main=whoami.example.com"

labelsにBasic認証の項目を以下のように追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
services:
  whoami:
    image: containous/whoami
    labels:
      - "traefik.http.routers.whoami_example.rule=Host(`whoami.example.com`)"
      - "traefik.http.routers.whoami_example.tls=true"
      - "traefik.http.routers.whoami_example.tls.certresolver=dnsresolver"
      - "traefik.http.routers.whoami_example.tls.domains[0].main=whoami.example.com"
      - "traefik.http.middlewares.whoami_example_basicauth.basicauth.realm=MyRealm"
      - "traefik.http.middlewares.whoami_example_basicauth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
      - "traefik.http.routers.whoami_example.middlewares=whoami_example_basicauth@docker"

9-10行目でwhoami_example_basicauthというミドルウェアを定義して、11行目でこのミドルゥエアをwhoami_exampleルータに追加しています。

パスワードをエンコードしているこの部分はhtpasswdコマンドで生成できます

test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/
$ echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g

参考