Tableau ServerのビューをWebページに埋め込む『信頼できる認証』
Tableau ServerのインタラクティブなビューをパーソナライズされたWebサービスに埋め込む方法をご紹介します。誰もが気になるのは、パーソナライズしたビューのアクセス制御がどのように実現されているかでしょう。今回はTableau Serverが提供する「信頼できる認証(Trusted Authentication)」という方式をご紹介します。
信頼できる認証(Trusted Authentication)とは
信頼できる認証(Trusted Authentication)とは、Tableau Server に対して 1 つ以上の Web サーバーとの間で信頼関係が設定されていることを意味します。信頼関係を設定するには、事前に Tableau Server へ信頼する Web サーバーの登録が必要です。
Tableau Server が信頼できる Web サーバーから要求を受け取ると、Web サーバーで必要とされる認証は既に処理されていると見なし、「チケット」と呼ばれるを文字列を返します。
Web サーバーはこのチケットを 含めたURLをそのページの HTML に埋め込みます。Web ブラウザはチケットを含んだURLを引き換えに Tableau Server へのログインと埋め込みビューの最終的な URL を取得します。
認証と表示の流れ
0.信頼関係の設定
上記の図にはありませんが、事前準備として Tableau Server に信頼する Web サーバーのIPアドレスやホスト名の登録します。
Tableau Server への信頼できる IP アドレスまたはホスト名の追加
1.ブラウザからウェブサーバーへ
この Web サービスの利用者はウェブブラウザで Web ページにアクセスします。
2.Web サーバーからチケットの取得要求
Web サーバーは Tableau Server に チケットの取得するためのリクエストを送信(POST)します。Web サーバーは、Tableau Server (例: http://tabaserver/trusted) を送信します。
この POST 要求には username パラメーターが必要です。username の値は、Tableau Server のライセンス ユーザーのユーザー名でなければなりません。
サーバーで複数のサイトを実行し、ビューが「既定」サイト以外のサイトにある場合、POST 要求には target_site パラメーターも含める必要があります。
3.Tableau Server からチケットを取得
Tableau Server ではこの Web サーバーが信頼できるホストであり、かつ、パラメータの値が正しく設定されている場合、Tableau Server は一意の 24 文字列形式 (URL 用に安全な、Base64 エンコード) のチケットを作成して返します。それ以外のエラーが発生した場合は、文字列”-1”を返します。
4.Web サーバーからビューのURLを埋め込んだHTMLを返す
Web サーバーが ビューの URL またはそのオブジェクト タグ (埋め込みビューの場合) を使用してビューの URL を生成し、その Web ページの HTML に挿入します。その HTML にはチケットも含まれています。
(例: http://tabserver/trusted/<ticket>/views/requestedviewname) Web サーバーはそのページのすべての HTML をクライアントの Web ブラウザーに返します。
Tableau Server ビューや埋め込まれたビューの例については、チケット付きビューの表示 をご参照ください。
5.ブラウザーが Tableau Server のビューを要求
クライアントの Web ブラウザーは、チケット付きが含まれているURLに対して、Tableau Server に GET 要求を送信します。
6.Tableau Server からビューの読み込み
Tableau Server は URLにチケットが含まれていることを確認し、チケットを引き換えます。チケットは、発行後 3 分以内に引き換える必要があります。
チケットが引き換えられると、Tableau Server にユーザーがログインし、URL からチケットが削除され、埋め込みビューの最終的な URL が送信されます。実際の表示は最終的な URL から取得した内容が表示されます。
動作の確認
認証と表示の流れに従いについて、実際に動作を確認しましょう。
- 信頼関係の設定
- チケットの取得
- 取得したチケットを引き換えにビューの読込む
信頼関係の設定
事前準備として、Tableau Server を 1 つ以上の Web サーバーからの要求を認証して信頼するように設定します。
以下の作業は、Windows Serverの管理者としてコマンドプロンプトを開き、Tableau Server の bin ディレクトリ (C:\Program Files\Tableau\TableauServer\8.3\bin) に移動します。
Tableau Server を停止
PS C:\Users\Administrator> cd "C:\Program Files\Tableau\Tableau Server\8.3\bin" PS C:\Program Files\Tableau\Tableau Server\8.3\bin> ./tabadmin stop ===== Stopping service... -- Service stopped successfully
Tableau Server へ信頼できる IP アドレスまたはホスト名の追加
tabadmin set wgserver.trusted_hosts "<trusted IP addresses or host names>"
上記のコマンドで、<trusted IP addresses> は使用している 1 台以上の Web サーバーの IPv4 アドレスまたはホスト名のコンマ区切りリストである必要があります。例は次のとおりです。
tabadmin set wgserver.trusted_hosts "192.168.1.101, 192.168.1.102, 192.168.1.103"
または
tabadmin set wgserver.trusted_hosts "webserv1, webserv2, webserv3"
注: コンマ区切りリストは、引用符で囲まれ、各コンマの後にスペースを 1 つ挿入する必要があります。 ここでホスト名を使用する場合でも、指定する Web サーバーには静的 IP アドレスを使用する必要があります (詳細について)。
ここでは以下のように設定します。
PS C:\Program Files\Tableau\Tableau Server\8.3\bin> ./tabadmin set wgserver.trusted_hosts "10.0.0.22"
補足: 信頼関係のある Web サーバーと Tableau Server の間に 1 台以上のロードバランサーやプロキシサーバーが存在する場合、これらを信頼できるゲートウェイとして追加する必要もあります。手順については、プロキシ サーバーを使用するための Tableau の構成 を参照してください。
すべてのサーバー構成ファイルへの変更を保存
PS C:\Program Files\Tableau\Tableau Server\8.3\bin> ./tabadmin config ===== Wrote configuration files to C:/ProgramData/Tableau/Tableau Server/data/tabsvc/config
Tableau Server を再起動
PS C:\Program Files\Tableau\Tableau Server\8.3\bin> ./tabadmin start ===== Starting service... -- Service was started successfully
※ 再起動はは3分ほどかかりました。
チケットの取得
信頼関係のある Web サーバーから curlコマンドを使って、チケットを取得します。
以下では、Tableau Server(10.0.0.93)の"TableauUser"ユーザーのチケット取得リクエストに対して、"7Eml_6kv0SP1ifBRVJndi-Xo"というチケットの取得に成功しました。
$ curl -F "username=TableauUser" http://10.0.0.93/trusted 7Eml_6kv0SP1ifBRVJndi-Xo
以降では、取得したチケットを利用してビューへのアクセスを試みます。
実際の Web サービスに組み込む場合は、取得したチケットを使って、Tableau Server のビューを埋め込むためのURLを生成してブラウザに返します。
取得したチケットを引き換えにビューの読込む
外部のPCのウェブブラウザから、先ほど取得したチケットを利用してビューへのアクセスを試みます。
以下のURLをiframeのURLに指定します。
https://develb-1111111111.ap-northeast-1.elb.amazonaws.com/trusted/7Eml_6kv0SP1ifBRVJndi-Xo/views/Sales/2013SalesGrowth
このURLをiframeに指定したHTMLをブラウザから起動しますと、埋め込まれて表示されることが確認できます。
htmlは以下のとおりです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> </head> <body> <iframe src="https://develb-1111111111.ap-northeast-1.elb.amazonaws.com/trusted/7Eml_6kv0SP1ifBRVJndi-Xo/views/Sales/2013SalesGrowth?:embed=yes" width="800" height="600"></iframe> </body> </html>
チケットが引き換えられると、Tableau Server にユーザーがログインし、URL からチケットが削除され、埋め込みビューの最終的な URL が送信されます。
http://develb-1111111111.ap-northeast-1.elb.amazonaws.com/trusted/views/Sales/2013SalesGrowth
チケットが引き換えられるとそのチケットは無効となりますので、別のPCやブラウザからは同じチケット付きURLによるビューの参照できませんので安心です。
また、既定では、Tableau Server はチケットの作成または引き換え時に、クライアントの Web ブラウザーの IP アドレス照合を実行しません。これを変更するにはオプション: クライアント IP 照合の設定 を参照してください。
トラブルシューティング
信頼できる認証を構成するときに発生する可能性のある一般的な問題とエラーは 信頼できる認証のトラブルシューティング を参照してください。
まとめ
Tableau Server のビューを埋め込むには、信頼する Web サーバーを登録し、信頼関係があるかを判定するための設定が必要となります。信頼関係がある場合は「チケット」と呼ばれる一時的なキーを取得して、それを引き換えにビューを読み込むことが確認できました。
今回は信頼関係があるかを判定するのに同じVPC内のローカルアドレスによって判定をしましたので、Web サーバーのローカルアドレスを登録する簡単な設定で実現できました。チケットの取得は内部で、ELB配下のコンテンツはHTTPS経由でセキュアにブラウザに読み込んでいます。
ロードバランサを経由した異なるネットワークから Tableau Server チケットの取得をする場合は、信頼するロードバランサやプロキシサーバーの緻密な設定が必要となります。