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


site

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がないと動かないので念のためチェック。

.conf
    include /etc/nginx/conf.d/*.conf;
# cd /etc/nginx/conf.d
# cp -p default.conf growthforecast.conf
# > growthforecast.conf
# vi growthforecast.conf
.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認証設定をしてみて

今のところ、特に不都合もないし、パスワードも割と強力なものを設定してみた。 が、平文で流れてると思うと気持ち悪いよね。 つうわけで、違う認証を試すか。