Tableau Server on Linux with SAML

Tableau Server on Linuxが10.5でリリースされたので試してみました。

環境はAWS上で以下の構成です

- インスタンス r4.2xlarge
- OS CentOS 7.4
- ルート領域 30GB
- データ領域 300GB

# CentOSの設定

インスタンス起動後は以下を実行
ホスト名は変更していません。ホスト名を変更する場合は外部からDNSで参照可能なホスト名(FQDN)を設定する必要があります。
外部からアクセスするDNS名と同じである必要はありません。

#### ロケール関係の設定

```shell-session
localectl set-keymap jp106
timedatectl set-timezone Asia/Tokyo
```
#### 初期設定

```shell-session
yum -y update
yum -y groupinstall base "Development tools"
setenforce 0
vi /etc/sysconfig/selinux
SELINUX=enforcing
↓
SELINUX=disabled
```

#### パスワードの設定

AWSのログインユーザである"centos"にパスワードの設定を行う
tsmコマンド実行時に必要になります

```shell-session
sudo passwd centos
```

# Tableauのインストール

Tableau社より日本語のインストール手順が書かれていますので以下はポイントだけです
https://onlinehelp.tableau.com/current/server-linux/ja-jp/server_linux.htm

## パッケージのインストール

https://onlinehelp.tableau.com/current/server-linux/ja-jp/install_tsm.htm

sudo ./initialize-tsm --accepteula を行う際にはデータ領域にデータが入るように
sudo ./initialize-tsm -d /data/tableau --accepteula として変更します。
初期設定のままでデータ領域を変更する場合はシンボリックリンクでデータ領域にリンクを張るほうがいいかもしれません

イニシャライズが終わったら別途シェルコンソールを立ち上げるかログインしなおすか、
source /etc/profile.d/tableau_server.sh
を実行します

日本語文字化け対策のため以下のパッケージをいれておく

```shell-session
rpm -qa | grep epel-release
sudo yum install epel-release.noarch
yum search noto japanese
sudo yum install google-noto-sans-japanese-fonts.noarch <-- 日本語のみ
sudo yum install google-noto* <-- 日本語含む他の言語
```

## Tableau Server のアクティブ化と登録

https://onlinehelp.tableau.com/current/server-linux/ja-jp/config_linux_act_reg.htm

tsm register --template > /path/to/registration_file.json で再インストールなどする場合のためにテンプレート化しておいた方がいいです

## ローカル ファイアウォールの構成

https://onlinehelp.tableau.com/current/server-linux/ja-jp/config_firewall_linux.htm

ここでは特に設定を行わず、AWS側のセキュリティグループで任意のポートをオープンしました

## 初期ノード設定の構成

https://onlinehelp.tableau.com/current/server-linux/ja-jp/config_linux_gen_server.htm

アイデンティティ ストア及びゲートウェイ設定用のjsonファイルを作成しインポートします。
以下は例です

```json
{
   "configEntities": {
      "gatewaySettings": {
         "_type": "gatewaySettingsType",
         "port": 80,
         "firewallOpeningEnabled": true,
         "sslRedirectEnabled": false,
         "publicHost": "localhost",
         "publicPort": 80
      },
      "identityStore": {
         "_type": "identityStoreType",
         "type": "local"
      }
    },
     "configKeys": {
        "gateway.timeout": "900"
     }
}
```

Windows環境からリストアする場合は、サンプルワークブックを入れても上書きされます

## インストールのファイナライズ

https://onlinehelp.tableau.com/current/server-linux/ja-jp/config_linux_apply_start.htm

Tableau Server の初期化と起動 まで行った後、Windows環境からリストアする場合は

- ユーザは作らない
- https://onlinehelp.tableau.com/current/server-linux/ja-jp/restore_from_backup_linux.htm を参考にリストアする

# SAMLの設定

idPはOneloginで行いました
Oneloginのアプリケーション選択は、"Tableau Server(Signed Response)"を選択しています

参考情報は
https://onlinehelp.tableau.com/current/online/ja-jp/saml_config_onelogin.htm
https://www.interworks.com/blog/tkau/2016/03/30/how-configure-tableau-server-saml-onelogin-idp

Tableau Server側の設定は https://onlinehelp.tableau.com/current/server-linux/ja-jp/config_saml_linux.htm です

tsm authentication saml export-metadata -f <file-name.xml> のコマンドはSAMLの設定があればエクスポートできるようです

SAMLの設定に必要なファイルは [data directory]/data/saml に保存します
証明書が必要で
https://onlinehelp.tableau.com/current/server-linux/ja-jp/ssl_cert_create.htm
を参考に作成します
しかしながら、 /opt/tableau/tableau_server/packages/apache.<番号>/bin/openssl は実行しても

```
/opt/tableau/tableau_server/packages/apache.10500.18.0109.1050/bin/openssl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
```

となって、利用できなかったのでcentos側のopensslを使用して以下を実行します

```shell-session
openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
```

ここで作成したserver.key, server.crt, oneloginのmetadataを <data directory>/data/saml に保存します

また、設定用のjsonファイルを以下のように作成します
returnUrl及びentityIdは外部からアクセス可能なDNS名で登録します
サーバーのホスト名と一致させる必要はありません

```json
{
  "configEntities": {
    "samlSettings": {
      "_type": "samlSettingsType",
      "enabled": true,
      "returnUrl": "https://tableau.example.com",
      "entityId": "https://tableau.example.com",
      "certFile": "/data/tableau/data/saml/server.crt",
      "keyFile": "/data/tableau/data/saml/server.key",
      "idpMetadataFile": "/data/tableau/data/saml/onelogin_metadata_698075.xml"
    }
  }
}
```

上記のファイルをインポートし設定反映させます

```shell-session
tsm settings import -f /path/to/file.json
tsm pending-changes apply
```

# 問題点

- initialize-tsm を実行時にDNS参照できないホスト名にしているとエラーになる
- 日本語を含むワークブックで一部文字化け(□に☓がついたようになる)

文字化けは以下で解決します
http://kb.tableau.com/articles/issue/text-renders-as-square-boxes-instead-of-expected-non-english-characters

```shell-session
EPELリポジトリを追加してNOTO CJK fontsをインストール
rpm -qa | grep epel-release
sudo yum install epel-release.noarch
yum search noto japanese
sudo yum install google-noto-sans-japanese-fonts.noarch
tsm restart
```