Posted at

GrowthForecast+FluentdでWeb管理を素敵にしよう!② 〜Web認証について纏めて、とりあえずnginxでBasic認証〜

More than 5 years have passed since last update.


GrowthForecast+FluentdでWeb管理を素敵にしよう!のゴール


  1. GrowthForecast導入とCloudWatch連携理解

  2. GrowthForecastの情報が生で見えるのは精神衛生上悪いので認証プロクシ化

  3. Fluentd導入とログ連携理解

  4. Apacheベースでnginx理解

  5. 各種OSリソース情報等の出力

  6. GrowthForecast+FluentdでWeb管理を素敵にしよう!

段階的にnginxやGrowthForecast、Fluentdを理解して、Zabbix無しでも軽くて素敵な運用が出来ることがゴール。

で、今回はWeb認証について理解し、簡単なBasic認証の設定をしてみる。

余裕があれば、他の認証も実装してみる予定。

検証用で「5」のOS各種リソースを取得するスクリプトを仕込んだのだが、さすがに見られると気持ち悪い情報が晒されることに躊躇して、BASIC認証でお茶を濁した。

本来はOpenIDとかOAuthをやってみたいなと思ってたけど。

なので、近々「5」の監視シェル群を公開するよ。

基本OneLinerだからいろいろと使えると思う。


Web認証って何?

所謂ユーザ認証のことをここではWeb認証と取り扱う。


  • Basic認証やDigest認証

  • OpenID、OAuth、SAML


について纏めてみよう。

他にもDBにアクセスして云々とかあるけどね。

それを取り扱うと際限がない。

が、そのうちWebサーバからDB認証する仕組みがあるので、それを整理しておこう。


Basic認証やDigest認証


  • Basic認証

    Basic認証は広く知れ渡っている認証方法のひとつだと思う。

    Apacheやnginxで設定し、ユーザ・パスワードを登録し認証する方式。

    ほとんどのブラウザはBasic認証に対応しているが、ユーザ・パスワードを平文で送ってしまうのが難点。

    だが、とりあえずサクッと出来てしまうので、初期段階でセキュアにしたい場合に持って来いだろう。

    エンタープライズ向けのサービスの場合、Basic認証を使用することはほとんどない。

    ローカルアクセスのみのサーバについては、Basic認証で問題ないが、情報漏洩が怖いので、使う場所が限られているのが現状。


  • Digest認証

    Basic認証が平文でユーザ・パスワードを送ってしまう部分の改善バージョンがDigest認証だ。

    MD5でエンコードして暗号化するため、Basic認証よりも安全である。


結局、伝送は平文なのでSSLトンネル化とかするのが望ましいよね。


OpenID、OAuth、SAML

なんとなく理解はしているけど、細かいところで違いって何?って感じだ。

拙い知識では、OpenIDは共通ID(鍵)、OAuthはソーシャルなSNSアカウントによる許認可、SAMLはLDAPやADと連携したSSO(Single Sign-On)認証ってとこか。

基本どれもSSOかと。

あらためてこことかここを参考にしてみた。


  • OpenID

    様々なWebサイトで共通のID情報を利用できる認証方式

    認証のIDとして、URL使用する。

    OpenIDの仕様として、信頼関係(トラストサークル)を構築する必要がない。

    SAMLに比べて信頼関係を構築する必要がないことからエンタープライズ向けではなく、グローバルなWebサービス向けな感じ。


  • OAuth

    「あらかじめ信頼関係を構築したサービス間」で「ユーザの同意の元」「セキュアにユーザ権限の受け渡し」をするという『認可情報の委譲』がOAuth。

    OpenIDとSAMLが入り口の鍵という感じのところ(認証)、OAuthは許可したリソースへのアクセスなど権限の受け渡し(認可)をすることが目的。


  • SAML

    認証情報を表現するためのXML仕様。

    一度の認証で様々なサイトが利用できる認証方式というところはOpenIDと違いない。

    が、SAMLは信頼関係(トラストサークル)を構築する必要がある。

    この信頼関係はLDAPとかADとか社内認証情報を利用するのが一般的。

    なので、エンタープライズ向け。



ではさくっと、Basic認証を設定

参考にしたサイトはこちら


まずは、BASIC認証設定をnginxへ

/etc/nginx/conf.d下のdefault.confというひな形をコピーして、BASIC認証用のconfファイルを作成。

nginx.confに以下のincludeがないと動かないので念のためチェック。


nginx.conf

    include /etc/nginx/conf.d/*.conf;


# cd /etc/nginx/conf.d

# cp -p default.conf growthforecast.conf
# > growthforecast.conf
# vi growthforecast.conf


growthforecast.conf

upstream growthforecast {

server 127.0.0.1:5125;
}

server {
listen 80;
server_name growthforecast.hoge.com;

proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
auth_basic "Secret Area";
auth_basic_user_file "/home/growthforecast/.htpasswd";

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://growthforecast;
proxy_redirect off;
}
}



次にBASIC認証用のユーザとパスワードを設定

で、BASIC認証のユーザとパスワードを設定。

$ htpasswd -c /home/growthforecast/.htpasswd hogeuser

New password:
Re-type new password:
Adding password for user hogeuser


更にBASIC認証用のサブドメインをDNSに設定

登録しているところで、growthforecastのサブドメインを設定した。


BASIC認証設定をしてみて

今のところ、特に不都合もないし、パスワードも割と強力なものを設定してみた。

が、平文で流れてると思うと気持ち悪いよね。

つうわけで、違う認証を試すか。