Basic 認証かけるだけのプロキシサーバ Docker image 作った

Web アプリがあってとりあえず Basic 認証かけたいときは前段に Nginx 置けば楽なんだけど、毎回設定ファイル書いたり htpasswd 生成するのが面倒なので、サクッと用意できるよう Docker image を用意しました。

github.com

https://quay.io/repository/dtan4/nginx-basic-auth-proxy

以下のように、環境変数で username, password そしてプロキシ先の URL を指定すれば Basic 認証設定済みの Nginx が起動します。

$ docker run \
    --rm \
    --name nginx-basic-auth-proxy \
    -p 8080:80 \
    -e BASIC_AUTH_USERNAME=username \
    -e BASIC_AUTH_PASSWORD=password \
    -e PROXY_PASS=https://www.google.com \
    -e SERVER_NAME=proxy.dtan4.net \
    quay.io/dtan4/nginx-basic-auth-proxy

Docker Compose や Kubernetes を使って、メインの Web アプリコンテナは外部にポートを公開しない設定で立てた上でその前段に立ててあげるとセキュアで便利かもしれません。

version: '2'
services:
  web:
    image: tutum/hello-world:latest
  nginx:
    image: quay.io/dtan4/nginx-basic-auth-proxy:latest
    ports:
      - 8080:80
    environment:
      - BASIC_AUTH_USERNAME=username
      - BASIC_AUTH_PASSWORD=password
      - PROXY_PASS=http://web/

設定はサクッと書いただけなので、不備があればご指摘いただけると幸いです。

本当はなぜ作ったのか

ちょっと Amazon Elasticsearch Service を使い始めて Kibana も触ってたんですが、アクセス制限は IAM Policy 記述なので IAM リソース単位 or グローバル IP でしかいじれないのが悩みでした。ブラウザレベルで制限かけたかったので前段に何か噛ますか〜というので、とりあえず作ってみた形です。

毎回 Signed URL を発行するようにして Es クラスタドメインを隠すプロキシサーバを CoreOS が書いてたので、一緒に見てます。

github.com

余談でした。