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


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

1. GrowthForecast導入とCloudWatch連携理解
1. GrowthForecastの情報が生で見えるのは精神衛生上悪いので認証プロクシ化
1. Fluentd導入とログ連携理解
1. Apacheベースでnginx理解
1. 各種OSリソース情報等の出力
1. 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かと。

あらためて[ここ](http://memoyasu.blogspot.jp/2011/11/openid-saml.html)とか[ここ](http://www.goodpic.com/mt/archives2/2008/01/openid_oauth.html)を参考にしてみた。

* **OpenID**
様々なWebサイトで共通のID情報を利用できる認証方式
認証のIDとして、URL使用する。
OpenIDの仕様として、信頼関係（トラストサークル）を構築する必要がない。
SAMLに比べて信頼関係を構築する必要がないことからエンタープライズ向けではなく、グローバルなWebサービス向けな感じ。

* **OAuth**
「あらかじめ信頼関係を構築したサービス間」で「ユーザの同意の元」「セキュアにユーザ権限の受け渡し」をするという『認可情報の委譲』がOAuth。
OpenIDとSAMLが入り口の鍵という感じのところ（認証）、OAuthは許可したリソースへのアクセスなど権限の受け渡し（認可）をすることが目的。

* **SAML**
認証情報を表現するためのXML仕様。
一度の認証で様々なサイトが利用できる認証方式というところはOpenIDと違いない。
が、SAMLは信頼関係（トラストサークル）を構築する必要がある。
この信頼関係はLDAPとかADとか社内認証情報を利用するのが一般的。
なので、エンタープライズ向け。


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

参考にしたサイトは[こちら](http://www.totalsolution.biz/growthforecast_sakura/)

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