OpenAMをスタンドアローン構成でセットアップする（CentOS + Apache + Tomcat）

## 今日やること

これからOpenAMのいろいろな機能を試していくわけなのですが、まず、**OpenAMをセットアップ**しないことには何もはじまりません。

## セットアップ環境

OpenAMをデプロイするサーバーのFQDNを決めましょう。後ほどセットアップのパラメーターとして使うためです。

* OS
    - CentOS 6.8 (Vagrant)
* Memory 
    - 2048 MB 
* FQDN
    - iam.example.com

## 前準備

ここからVM上で作業を行います。

### hostsで名前解決

OpenAMをセットアップする際、FQDNで名前解決できないとセットアップに失敗するので、hostsで名前解決をします。
IPアドレスは適宜読み替えてください。

```bash
$ diff /etc/hosts{,.org}
3d2
< 192.168.33.10 iam.example.com
```

### hostnameを設定

もしかしたらいらないかもしれないですが、気持ち悪いので。

```bash
$ sudo hostname iam.example.com
```

設定の方も変えておきます。

```bash
$ sudo diff /etc/sysconfig/network{,.org}
2,3c2
< #HOSTNAME=localhost.localdomain
< HOSTNAME=iam.example.com
---
> HOSTNAME=localhost.localdomain
```

### openamユーザーの作成

所謂、tomcatユーザーをopenamユーザーとしています。

```bash
$ sudo useradd -s /sbin/nologin openam
```

### openjdkのインストール

OpenJDK 1.8.0 系を使用します

```bash
$ sudo yum -y install java-1.8.0-openjdk
```

### tomcat8をインストール

OpenAMの実行環境はtomcat8としています

```bash
$ sudo wget http://ftp.riken.jp/net/apache/tomcat/tomcat-8/v8.0.39/bin/apache-tomcat-8.0.39.zip -P /opt/
$ sudo unzip /opt/apache-tomcat-8.0.39.zip -d /opt/
$ sudo ln -s /opt/apache-tomcat-8.0.39 /opt/tomcat
```

### ファイルディスクリプタの上限値設定

OpenAM内蔵のデータストアは多くのファイルをオープンするようなので、上限値を上げておきます。

```bash
$ diff /etc/security/limits.conf{,.org}
49,50d48
< openam soft nofile 65536
< openam hard nofile 131072
```

### Apacheのインストール

検証用とはいえ、認証サーバーに非暗号通信でアクセスするのは気持ちが悪いので、オフロード用にApache HTTP Serverを導入します。

```bash
$ sudo yum -y install httpd mod_ssl
```

tomcatにプロキシする設定を行い、Apacheを再起動します。

```bash
$ sudo cat /etc/httpd/conf.d/openam.conf 
Proxypass / ajp://localhost:8009/
$ sudo service httpd restart
```

## OpenAMのデプロイ

### OpenAMのダウンロード

Nightly Buildのリンクは古いものから削除されているようなので、`Not found`となる場合は、リンクの日付を変更して試してみてください。

```bash
$ sudo wget http://download.forgerock.org/downloads/openam/OpenAM-14.0.0-SNAPSHOT_20161122.war -O /opt/tomcat/webapps/openam.war
```

### JVMオプションの設定

セットアップ時に結構メモリを使うので、`setenv.sh`ファイルにJVMオプションの設定を記述します。

```bash
$ sudo cat /opt/tomcat/bin/setenv.sh
#!/bin/sh

JAVA_OPTS="-server -Xmx1024m"

export JAVA_OPTS
```

### 権限の変更

openamユーザーで実行するので、所有権の変更します。
さらに、起動・停止のスクリプトに実行権限を付与します。

```bash
$ sudo chown -R openam. /opt/tomcat/
$ sudo chmod +x /opt/tomcat/bin/*.sh
```

### Tomcatの起動

`startup.sh`を実行し、Tomcatを起動します。

```bash
$ sudo -u openam /opt/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /opt/tomcat
Using CATALINA_HOME:   /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.
```

## OpenAMのセットアップ

### 初期設定画面にアクセス

ブラウザを起動して、`https://iam.example.com/openam`にアクセスします。
※ローカルPCの名前解決もhostsなどで行ってください。

**設定オプション**の画面が表示されるので、**新しい設定の作成**をクリックします。

<img width="765" alt="002.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/45605bc6-269d-841b-90cc-c02ef1e9689f.png">

**License Agreement**の画面が表示されるので、**条文の最下部にあるチェックボックス**を有効にして、**Continue**をクリックします。

<img width="448" alt="003.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/25ad23d9-b224-570d-4e60-da5fedec426d.png">

ここから初期設定のパラメータを設定していきます。まず、**OpenAMの管理者（ユーザー名は`amadmin`）のパスワード**を設定します。

<img width="469" alt="004.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/e9aca575-8f0b-5858-df13-bc0080a9421b.png">

**サーバー設定**の画面が表示されるので、Cookieドメインのところに**OpenAMサーバーのFQDNのドメイン部（ここでは`.example.com`）**を入力し、**次へ**をクリックします。

<img width="469" alt="005.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/8c7a08c0-627b-6e4f-1123-2ba0e42daef7.png">

**設定ストアの詳細**の画面が表示されます。ここでは、パラメータの変更を行わず、**次へ**をクリックします。外部のサーバー上の設定ストアを利用する場合は、ここを変更するみたいです。

<img width="473" alt="006.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/636a6134-b406-43e8-bb6f-a88bdab8990e.png">

**ユーザーストアの詳細**の画面が表示されます。ここでは、OpenAM内蔵のデータストアを使用するので、**OpenAMのユーザーデータストア**を選択し、**次へ**をクリックします。

<img width="467" alt="007.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/223ec252-228e-4665-1db2-a800e96b9999.png">

**サイト設定の詳細**の画面が表示されます。ここでは、パラメータの変更を行わず、**次へ**をクリックします。冗長構成をとる場合に使用するようです。

<img width="385" alt="008.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/a33bf2d0-5f3e-4a52-45c1-d5f58904d1fc.png">

**ポリシーエージェントユーザー**の画面が表示されます。ここのパラメータは正直、よくわかっていません。たぶん、**Sun時代の遺産のPolicy Agentと連携するときに使用するパスワード**なのかなぁと想像しています。ここでは、適当なパスワードを設定しておきます。

<img width="437" alt="009.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/aaf7b1a1-813e-ffe6-a636-ead415a353e3.png">

**設定ツールの概要と詳細**の画面が表示されます。設定したパラメータを確認し、**設定の作成**をクリックします。

<img width="441" alt="010.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/512e7492-3486-2dc5-ae48-6f892cd3436e.png">

1分ぐらい経つと、**設定が完了しました**と表示されますので、**ログインに進む**をクリックします。

<img width="441" alt="011.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/7ee294f5-f6ea-0455-c1cb-e6347c0e03f5.png">

**OpenAMのサインイン**の画面が表示されます。先ほど設定したOpenAMの管理者アカウント（ユーザー名は`amadmin`）でサインインします。ちなみに、サインインのURLは`
https://iam.example.com/openam/XUI/#login/`となります。

<img width="430" alt="012.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/a798686b-16ac-3123-3d98-1c5ff8d59235.png">

サインイン後は、設定画面のトップページが表示されます。

<img width="788" alt="013.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/148404/c0adf4af-28b7-f887-c13b-7ac51094b314.png">

こんな感じで、OpenAMのセットアップは完了です。

## まとめ

* CentOS ＋ Apache ＋ TomcatにOpenAMをデプロイできる
* セットアップのための初期設定はWebからできる
* セットアップ後は管理者アカウントでサインインできる
* セットアップする前にやっといたほうがいい設定が何個かある

明日はPolicy Agentネタの予定です。

ばい！