Tableau ServerでSSOとパスワード認証を併用する
SSOとパスワード認証を使い分けるケース
Tableauを使っていてワークブックを作成する人に直接サーバーにアクセスしてもらいたい時ありませんか?
例えば、外部のデータサイエンティストが作成したTableauファイルを納品してくれる場合です。1回限りでTableauをメールでもらって自分でサーバーに入れるのもいいのだけれども、何回も続くと億劫になります。
その場合、社外にアカウントを発行すれば良いのですが、Tableau Serverがシングルサインオン(SSO)で運用されていると、社外にアカウントを発行できない場合があります。
今回は、社内のユーザーは引き続きSSOを使え、社外のユーザーにはID・パスワードでログインできるよう設定していきたいと思います。
認証構成
Tableau Server全体では「ローカル認証」(ID・パスワード認証)を採用します。Tableau Server内に「サイト」を作成し、「サイト固有のSAML認証」を設定します。SAML認証とはSSOの実現方法です。
社内のユーザーはサイト固有のSAML認証でSSOが利用できます。社外のユーザーはTableau Server全体のローカル認証を利用し、ID・パスワードでログインします。サーバーにログインした後で、ログインするサイトを選択すればSSOした社内ユーザーと同じ環境に到達します。
SSOにはGoogle WorkSpaceを利用して設定しました。
Tableau ServerでSAML認証を構成する
サイト固有のSAML認証を実現するために、Tableau ServerのSAMLを構成します。わかりづらいですが、「Tableau ServerがサイトごとにSAMLを使うときに共通でこういう前提条件を使います」という設定が必要です。以下のヘルプページを参考にします。
順番としては、「サーバー全体のSAML認証の構成」>「サイト固有のSAML設定」という順番になります。
Tableau Serverの秘密鍵・証明書発行
Tableau Server共通の条件として利用する「証明書」を発行します。証明書の発行には秘密鍵が必要です。ここではGoogle Workspace 管理者ヘルプを参考に秘密鍵、証明書を作成します。
rsaprivkey.pemという秘密鍵ファイルを作成します。以下のコマンドを実行します。
# 【Tableau Serverで以下のコマンドを実行】
openssl genrsa -out rsaprivkey.pem 2048
このコマンドにはopensslというライブラリを利用しています。インストールされていない場合はopensslをインストールする必要があります。
次に作成した秘密鍵を利用して、証明書を作成します。
# 【Tableau Serverで以下のコマンドを実行】
openssl req -new -x509 -key rsaprivkey.pem -out dsacert.pem
このコマンドを実行すると発行した人の情報などが必要になります。証明書はより信頼性を高めるために発行した情報を第三者の認証局が検証しセキュリティを高めるというプロセスが想定されているからです。単なる検証やテスト目的であればダミーの情報でも動作します。利用の目的に沿って質問に回答します。
次にTableau Serverに今作成した秘密鍵、証明書の情報を登録します。Tableau Serverのヘルプに従って以下のコマンドを実行します。
# 【Tableau Serverで以下のコマンドを実行】
tsm authentication saml configure \
--idp-entity-id <tableau-server-entity-id> \
--idp-return-url <tableau-server-return-url> \
--cert-file <path-to-dsacert.pem> \
--key-file <path-to-rsaprivkey.pem>
サーバーに証明書、鍵ファイルのアップロードが成功したことを確認します。以下のメッセージが表示されれば成功です。
Uploading file(s) [dsacert.pem, rsaprivkey.pem] to the controller. This may take a few seconds...
Files uploaded successfully.
この時点ではサーバーが「SAMLを使うときの条件」を設定しただけです。サーバーにログインする際にSAMLが利用できるわけではありません。今回はサーバーではID・パスワード認証を引き続き利用します。サーバー全体でのSAMLを設定しません。次に以下のコマンドを実行してサイト固有のSAMLを有効化します。
# 【Tableau Serverで以下のコマンドを実行】
tsm authentication sitesaml enable
tsm pending-changes apply
再起動するかどうかを問われたら「Y」と入力して承諾します。
Tableau Serverでサイトを作成する
変更が反映されたらTableauでサイトを作成します。サーバー管理者でログインし設定からサイトを作成します。
Tableau Serverのサイト固有SAMLを設定する
次に一旦ログアウトします。再度サーバー管理者でログインします。ログインするサイトが質問されますので、サイト固有のSAMLを設定したいサイトにログインします。
サイトの「設定」に進むと「認証」というタブが新たに作成されています。これからはサイトの認証タブの中で認証方法を追加します。
Google(IdP)とメタデータを交換する
まずTableau Serverの設定画面で「Tableau Serverのメタデータ」(xmlファイル)をダウンロードします。メタデータとはSAML認証に必要なものがひとまとめになっているファイルです。
Google Workspaceの場合、メタデータのみで足りますが他のプラットフォームを使う場合、「Tableau Server エンティティID」、「アサーションコンシューマーサービスURL(ACS)、「証明書」が必要になる場合もあります。
メタデータをダウンロードしたらGoogle Workspaceの管理コンソールにログインします。ログインしたら以下のURLを参考に作業します。
管理コンソールで「Google Workspaceのメタデータ」をダウンロードします。SAMLではTableauとGoogleで認証に必要なメタデータを交換する必要があります。
TableauとGoogle(IdP)でやりとりする情報の紐付け
次に、Google WorkspaceにTableauのメタデータをアップロードします。すると属性をマッピングする画面になります。
属性のマッピング画面では、Primary Basic > emailという項目に「email」という名前を入力します。これは「Primary Basic」(基本情報)に含まれる「email」という項目を、Tableauに送るときには「email」という名前そのままで送る、という意味になります。
Google Workspaceの設定が終わったら、Tableauで「Google Workspaceのメタデータ」をアップロードします。
次にTableauで属性の照合をします。「ユーザー名またはメール」という欄に「email」と入力します。これでTableauのログインIDとGoogle Workspaceのメールアドレスを紐付けが完了しました。
最後に接続のテストができるようになります。テストを実行して「正常に終了しました」と表示されることを確認します。
認証をテストする
Tableauでシングルサインオンのユーザーアカウントを作成してテストします。ログインIDをGoogleアカウントのメールアドレスに設定します。認証方法でSAMLを選択します。
一度ログアウトしログイン画面に行きます。すると今までID・パスワードを入力する画面だったが、IDのみを入力する画面に変わっています。IDを入力するとシングルサインオンのユーザーであればGoogle のログイン画面に遷移します。
Google側で2段階認証やその他セキュリティ対策を実施している場合はGoogleアカウントの認証時に必要になります。
Google以外のアカウントでログインする場合はID作成時にローカル認証を選択します。するとログイン画面でID入力後、パスワードの入力を求められます。パスワードでログインしたあとでログインするサイトを選択します。
これでSSOとID・パスワードの認証を併用できました。
SAMLの考え方で詰まったところ
SAMLを設定するにあたってどちらにどの証明書をアップロードするのかという点がわかりづらくしばらく悩みました。Tableau側でデフォルトの証明書もなく、自身で発行しないといけないことに気づくまでサポートに色々な観点で問い合わせました。
気づいたのはSAMLの認証では「お互いの秘密鍵で作った証明書を添えて認証情報を交換しましょう」というプロセスがあるということなんですね。
簡単にいうと、
Tableau「Googleに秘密の情報送らないといけないから貰った証明書で蓋をしよう」
Google「Tableauからの情報に自分の証明書ついてたな、返信するときTableauの証明書つけておこう」
というようにお互いの証明書を介して偽の情報を排除しているわけですね。
ここがとてもわかりづらかった。Tableau側のヘルプやGoogle側のヘルプを見ても「証明書」という一言で済まされてしまうので、 手元にあるGoogleの証明書を見つめながらTableau ServerのSAML構成してもうまくいかずエラーが連発しました。Tableau ServerのSAML構成するときにはTableau Serverの証明書が必要でした。