Web アプリがあってとりあえず Basic 認証かけたいときは前段に Nginx 置けば楽なんだけど、毎回設定ファイル書いたり htpasswd 生成するのが面倒なので、サクッと用意できるよう Docker image を用意しました。
https://github.com/dtan4/nginx-basic-auth-proxy
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 が書いてたので、一緒に見てます。
https://github.com/coreos/aws-auth-proxy
余談でした。
(This post was imported from https://dtan4.hatenablog.com/entry/2017/02/10/005335)