直接信頼を使用して接続済みアプリを設定する

Tableau Server バージョン 2022.1 以降、Tableau に接続しているアプリによって Tableau Server サイトと外部アプリケーションとの間に明示的な信頼関係を構築することで、シームレスで安全な認証エクスペリエンスを実現できるようになりました。

注:

  • Tableau Server の UI なしの接続アプリ機能は、Tableau REST API の接続済みアプリのメソッド(新しいウィンドウでリンクが開く)を介して Tableau Server バージョン 2021.4 で使用できるようになりました。
  • 接続済みアプリを介した埋め込みを有効にするには、HTTP トラフィックに対して SSL を使用するように Tableau Server を構成する必要があります。
  • セッション トークンを有効にするためには、外部アプリケーションと外部アプリケーションをホストするサーバーの時計が協定世界時 (UTC) に設定されている必要があります。いずれかの時計が異なる規格を使用している場合、接続済みアプリは信頼されません。

Tableau 接続済みアプリが直接的な信頼関係と連携するしくみ

Tableau Server サイトと外部アプリケーション間の信頼関係は、JSON Web Token (JWT) 標準の認証トークンによって確立および検証されます。この認証トークンは、Tableau 接続済みアプリによって提供され、外部アプリケーションによって署名される共有シークレットを使用します。

接続済みアプリの主要コンポーネント

接続済みアプリの次のコンポーネントは、外部アプリケーションの JWT と連携して、ユーザーを認証し、埋め込みコンテンツを表示します。

  • シークレット: シークレットは、Tableau と外部アプリケーションで共有されるキーです。これらは、JWT を形成する署名で使用されます。接続アプリを使用して認証または REST API 認証を埋め込む場合は、シークレットが必要です。シークレットは接続済みアプリで作成できます。シークレットの有効期限はなく、削除されるまで有効です。
  • ドメイン許可リスト (埋め込みのワークフローのみ): 各接続済みアプリで許可されているドメインのリストを指定できます。接続済みアプリを介して埋め込まれた Tableau コンテンツは、指定されたドメインでのみ許可されます。これにより、ビジネスで保護および承認されたドメインでコンテンツを公開することができます。
  • アクセス レベル (埋め込みのワークフローのみ): 接続済みアプリを 1 つのプロジェクトまたはすべてのプロジェクトに関連付けることにより、接続アプリを介して埋め込むことができるコンテンツを指定できます。1 つのプロジェクトを指定した場合、選択したプロジェクトのコンテンツのみを接続済みアプリを介して埋め込むことができます。複数のプロジェクトを指定する場合は、Tableau REST API を使用する必要があります。

接続済みアプリのワークフロー

埋め込みのワークフロー

次の図は、外部アプリケーション (Web サーバーと Web ページ) と Tableau 接続済みアプリ間の認証のしくみを示しています。

  1. ユーザーが Web ページにアクセスします: ユーザーが Web ページに埋め込まれたコンテンツにアクセスすると、Web ページが外部アプリケーションに GET 要求を送信し、その Web ページの HTML を取得します。
  2. 外部アプリケーションが認証トークンを構築します: 外部アプリケーションが JWT を作成します。この JWT には、接続アプリからのシークレット (追加の JWT 要件については以下のステップ 3 を参照) と、埋め込みコンテンツに対するユーザー アクセスの範囲が含まれます。シークレットは外部アプリケーションによって署名され、後のステップで信頼関係の検証に使用されます。
  3. 外部アプリケーションが認証トークンを使用して応答します: 外部アプリケーションが、Web ページによって呼び出された埋め込みコンテンツの URL に JWT が含まれているページに応答します。
  4. Web ページが Tableau のコンテンツを要求します: 埋め込みコンテンツを読み込むために、Web ページが埋め込みコンテンツの URL を呼び出し、Tableau に GET 要求が送信されます。
  5. Tableau がトークンを検証します: Tableau が JWT を受信し、接続済みアプリと JWT で使用される共有シークレットを識別して、外部アプリケーションとの信頼関係を検証します。次に、Tableau はユーザーのセッションを作成します。このセッションでは、JWT で定義された埋め込み範囲だけでなく、許可されたドメインやプロジェクトなど、接続済みアプリで指定された制限も考慮されます。
  6. Tableau が、埋め込みの制限付きコンテキストに基づいてコンテンツを返します: 埋め込みコンテンツは、ページが許可されたドメインの下にあり、かつ、コンテンツが許可されたプロジェクトにパブリッシュされている場合にのみ読み込まれます (該当する場合)。認証されたユーザーは、JWT で定義された範囲で埋め込みコンテンツを操作できます。

接続済みアプリの作成

ステップ1: 接続済みアプリを作成する

Tableau Server の [設定] ページから接続済みアプリを作成します。

  1. サーバー管理者として、Tableau Server にサインインします。

  2. 左側のペインから、[設定] > [接続済みアプリ] の順に選択します。

  3. [New Connected App (新しい接続済みアプリ)] ボタンのドロップダウン矢印をクリックして、[Direct Trust (直接信頼)] を選択します。

    注: Tableau Server 2023.3 以前を使用している場合は、[新しい接続済みアプリ] ボタンをクリックします。

  4. [接続済みアプリの作成] ダイアログ ボックスで、次のいずれかの手順を行います。
    • REST API 認可ワークフローの場合 (認証に REST API を使用するメタデータ API ワークフローを含みます)、[接続済みアプリ名] テキスト ボックスに接続済みアプリ名を入力し、[作成] ボタンをクリックします。

      注: REST API とメタデータ API の認可用に接続済みアプリを構成する場合は、アクセス レベルドメイン許可リストを無視できます。

    • 埋め込みのワークフローの場合、次の手順を実行します。

      1. [接続済みアプリ名] テキスト ボックスに、接続済みアプリ名を入力します。
      2. [適用先] ドロップダウン メニューから、[すべてのプロジェクト] または [1 つのプロジェクトのみ] を選択して、埋め込むことができるビューまたはメトリクスを制御します。[1 つのプロジェクトのみ] オプションを選択した場合は、スコープを設定する特定のプロジェクトを選択します。これらの 2つ のオプションの詳細については、「アクセス レベル (埋め込みのワークフローのみ)」を参照してください。

        注: 

      3. ドメイン許可リストで、以下の「ドメインの書式設定」に記載されているルールを使用してドメインを指定し、ビューまたはメトリクスを埋め込むことができる場所を制御します。

        重要: Tableau コンテンツが許可した場所にのみ埋め込まれるように、セキュリティのベスト プラクティスとしてドメイン許可リストを使用することをお勧めします。

      4. 完了したら、[作成] ボタンをクリックします。

  5. 接続済みアプリ名の横にあるアクション メニューをクリックし、[有効] を選択します。セキュリティ上の理由から、接続済みアプリは作成時に既定で無効に設定されています。

  6. 接続済みアプリ ID (クライアント ID とも呼ばれます) をメモして、以下のステップ 3 で使用します。

ステップ 2: シークレットを生成する

接続済みアプリごとに合計 2 つのシークレットを生成できます。2 番目のシークレットは、シークレットのローテーションの目的で使用し、シークレットが侵害された場合の問題からシークレットを保護することができます。

  1. ステップ 1 で作成した接続済みアプリの詳細ページで、[Generate New Secret (新しいシークレットの生成)] ボタンをクリックします。

  2. 以下のステップ 3 で使用するシークレット ID とシークレット値をメモします。

ステップ 3: JWT を構成する

シークレットを生成したら、外部アプリケーションから有効な JWT を送信できるようにします。JWT は、2 者間で情報を安全に転送するために使用される標準規格です。JWT は、Tableau Server に情報を安全に送信するために、外部アプリケーションによって署名されています。JWT は、接続済みアプリ、セッションが生成されるユーザー、およびユーザーが持つ必要があるアクセス レベルを参照します。

有効な JWT には、次の情報が含まれます。

  • ステップ 1 の接続済みアプリ ID (クライアント ID とも呼ばれます)
  • ステップ 2 で生成されたシークレット ID とシークレット値

  • 登録されたクレームとヘッダー:

    クレーム名前説明または必要な値
    "kid"シークレット ID必須 (ヘッダー内)接続済みアプリのシークレット キー識別子
    "iss"発行者必須 (ヘッダー内)信頼できる接続済みアプリとその署名キーを識別する一意の発行元 URI
    "alg"アルゴリズム必須 (ヘッダー内)JWT 署名アルゴリズム。HS256 のみがサポートされています。
    "sub"サブジェクト認証された Tableau Server ユーザーのユーザー名
    "aud"オーディエンス値は "tableau" である必要があります。
    "exp"有効期限JWT の有効期限が切れないようにする必要があります。JWT の有効期限 (UTC) は、設定された最大有効期間の範囲内である必要があります。この最大有効期間は、Tableau サービス マネージャーの vizportal.oauth.connected_apps.max_expiration_period_in_minutes コマンドを使用して構成できます。
    "jti"JWT IDクレームとして必要です。JWT ID クレームは、JWT に一意の識別子を提供し、大文字と小文字を区別します。
    "scp"

    重要: "scope" は使用しないでください。

    範囲埋め込みのワークフローの場合、サポートされる値は次のとおりです。

    "tableau:views:embed"
    "tableau:views:embed_authoring"Tableau Server 2022.3 で追加
    "tableau:metrics:embed" (Tableau Server 2023.3 で廃止)
    "tableau:ask_data:embed" (Tableau Server 2023.1 で廃止)

    注:

    • 値はリスト型として渡す必要があります。
    • tableau:views:embedtableau:views:embed_authoring の場合、この範囲は、Tableau Server で既に構成されているユーザーのパーミッションを考慮し、元のビューで使用可能な場合は、ユーザーが埋め込みビューのツールを操作できるようにします。
    • 埋め込みコードでは、ツールバー パラメーターを除外することをお勧めします。詳細については、以下の「既知の問題 (埋め込みのワークフローのみ)」を参照してください。

    REST API 承認ワークフローの場合は、「JWT 認可をサポートする REST API メソッド」を参照してください。

    認証に REST API を使用するメタデータ API ワークフローの場合、サポートしているスコープは tableau:content:read のみです。

    https://tableau.com/groups 埋め込みのワークフローのみ。

    値は、Tableau Server の 1 つまたは複数のグループ名に一致する必要があります。詳細については、以下のセクション「動的グループ メンバーシップ (埋め込みワークフローのみ)」を参照してください。

JWT の例

以下に、Java 言語と Python 言語の両方の JWT の 例を示します。Java と Python の例では、それぞれ nimbus-jose-jwt ライブラリと PyJWT ライブラリを使用しています。

Java

import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.*;
import com.nimbusds.jwt.*;

import java.util.*;

...

String secret = "secretvalue";
	String kid = "connectedAppSecretId";
	String clientId = "connectedAppClientId";
	List<String> scopes = new
ArrayList<>(Arrays.asList("tableau:views:embed"));
	String username = "username";
	JWSSigner signer = new MACSigner(secret);
	JWSHeader header = new
JWSHeader.Builder(JWSAlgorithm.HS256).keyID(kid).customParam("iss", clientId).build();
	JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
		.issuer(clientId)
		.expirationTime(new Date(new Date().getTime() + 60 * 1000)) //expires in 1 minute
		.jwtID(UUID.randomUUID().toString())
		.audience("tableau")
		.subject("username")
		.claim("scp", scopes)
		
		
		.build();
	SignedJWT signedJWT = new SignedJWT(header, claimsSet);
	signedJWT.sign(signer);
	model.addAttribute("token", signedJWT.serialize());

Python

import jwt

token = jwt.encode(
	{
		"iss": connectedAppClientId,
		"exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=5),
		"jti": str(uuid.uuid4()),
		"aud": "tableau",
		"sub": user,
		"scp": ["tableau:views:embed", "tableau:metrics:embed"]
		
	},
		connectedAppSecretKey,
		algorithm = "HS256",
		headers = {
		'kid': connectedAppSecretId,
		'iss': connectedAppClientId
        }
  )

JWT を構成した後、外部アプリケーションでコードを実行すると、トークンが生成されます。

ステップ 4: 次のステップ

埋め込みのワークフローの場合

JWT を構成したら、埋め込みコードを外部アプリケーションに追加する必要があります。外部アプリケーションが呼び出す Web コンポーネントに、上記のステップ 3 で構成した有効な JWT が含まれていることを確認します。

Tableau コンテンツの埋め込みの詳細については、次のいずれかまたは両方を参照してください。

注: 埋め込みコンテンツにアクセスするユーザーを正常に認証するには、ブラウザーがサードパーティーの Cookie を許可するように設定されている必要があります。

REST API 認証ワークフローの場合

JWT を構成したら、認証アクセスのために、有効な JWT を REST API サインイン要求に追加する必要があります。詳細については、「接続済みアプリのアクセス スコープ」を参照してください。

メタデータ API ワークフローの場合

JWT を構成したら、有効な JWT を REST API サインイン要求に追加する必要があります。詳細については、「接続済みアプリのアクセス スコープ」を参照してください。

接続済みアプリの管理

[接続済みアプリ] ページでは、サイトのすべての接続済みアプリを管理できます。接続済みアプリの作成、削除、無効化などのタスクを実行できるほか、既存のシークレットが侵害されている場合は、新しいシークレットを取り消したり、生成したりすることができます。

  1. サーバーTableau Server にサインインします。

  2. 左側のペインから、[設定] > [接続済みアプリ] の順に選択します。

  3. 管理する接続済みアプリの横にあるチェック ボックスを選択し、次のいずれか 1 つまたは複数の操作を実行します。

    • 組織のセキュリティ ポリシーで指定されたローテーション タイムラインに従って、新しいシークレットを生成します。追加のシークレットを生成するには、接続済みアプリの名前をクリックしてから、[Generate New Secret (新しいシークレットの生成)] ボタンをクリックします。接続済みアプリは、最大 2 つのシークレットを持つことができます。両方のシークレットは同時にアクティブにすることができ、有効期限はなく、削除されるまで有効です。

    • 接続済みアプリの名前をクリックして接続済みアプリの詳細を表示し、接続済みアプリの作成日、ID、プロジェクトとドメインの範囲、およびシークレットを確認します。

    • プロジェクトの範囲またはドメインを変更し、[アクション] メニューで [編集] を選択します。変更を加えて、[更新] をクリックします。

      注: プロジェクトまたはドメインの範囲を変更していて、埋め込みコンテンツが新しいプロジェクトまたは新しいドメインのいずれにも存在しない場合は、埋め込みビューまたはメトリクスを表示することができなくなるため、ユーザーが埋め込みコンテンツにアクセスするとエラーが表示されます。

    • 接続済みアプリの名前をクリックして、シークレットを削除します。接続済みアプリのページで、シークレットの横にある [アクション] をクリックし、[削除] を選択します。確認ダイアログ ボックスで、もう一度 [削除] を選択します。

      注: 接続済みアプリのシークレットが外部アプリケーションで使用されている場合、シークレットを削除すると、埋め込みビューやメトリクスを表示できなくなります。詳細については、以下の「接続済みアプリの無効化と削除、およびシークレットの削除による影響」を参照してください。

    • 接続済みアプリを無効にし、[アクション] メニューで [無効] を選択します。接続済みアプリが外部アプリケーションで使用されている場合、接続済みアプリを無効にすると、埋め込みビューやメトリクスを表示できなくなります。詳細については、以下の「接続済みアプリの無効化と削除、およびシークレットの削除による影響」を参照してください。

接続済みアプリの無効化と削除、およびシークレットの削除による影響

接続済みアプリを介してユーザーに埋め込みコンテンツを表示したり、REST API アクセスを有効にしたりするには、接続済みアプリを有効にして、そのシークレットを生成する必要があります。接続済みアプリが外部アプリケーションで使用されていて、無効化または削除されているか、そのシークレットが削除または置換されている場合、403 エラーが発生します。

この問題を回避するには、接続済みアプリが有効になっていて、JWT で正しいシークレット ID と値が使用されていることを確認します。

アクセス レベル (埋め込みのワークフローのみ)

接続済みアプリのアクセス レベルを構成する際は、次の 2 つのプロジェクト タイプのうちいずれかを選択できます。アクセス レベルは、どのコンテンツを埋め込むことができるかを制御します。

  • すべてのプロジェクト: このオプションを使用すると、すべてのプロジェクトのコンテンツを埋め込むことができます
  • 1 つのプロジェクトのみ: このオプションを使用すると、指定されたプロジェクト内のコンテンツのみを埋め込むことができます。指定したプロジェクトにネストされたプロジェクトが含まれている場合、そのネストされたプロジェクトにコンテンツを埋め込むことはできません。

複数のプロジェクトについて

Tableau Server 2024.2 以降、Tableau REST API のみを使用して接続済みアプリの複数のプロジェクトでコンテンツを有効にすることができます。プロジェクトを指定するには、接続済みアプリの作成(新しいウィンドウでリンクが開く)、または接続済みアプリの更新(新しいウィンドウでリンクが開く)のいずれかのメソッドで「プロジェクト ID」を使用します。

注: 接続済みアプリに複数のプロジェクトが構成されている場合、Tableau は接続済みアプリのアクセス レベルに対応する複数のプロジェクトを表示します。[1 つのプロジェクトのみ] または [すべてのプロジェクト] を選択して接続済みアプリを更新すると、[Multiple projects (複数のプロジェクト)] オプションは表示されなくなります。複数のプロジェクトに対して接続済みアプリをもう一度構成する必要がある場合は、REST API を使用する必要があります。

ドメイン許可リスト ルール (埋め込みのワークフローのみ)

接続済みアプリのドメイン許可リストを使用すると、埋め込まれた Tableau コンテンツへのアクセスをすべてのドメインまたは一部のドメインに制限するか、一部のドメインを除外するか、またはすべてのドメインをブロックすることができます。

重要: Tableau コンテンツが許可した場所にのみ埋め込まれるように、セキュリティのベスト プラクティスとしてドメイン許可リストを使用することをお勧めします。

ドメイン オプション

接続済みアプリのドメイン許可リストを構成する際は、次の 2 つのオプションのいずれかを選択できます。

  • すべてのドメイン: 既定のオプションとして、このオプションは埋め込みコンテンツへの無制限のアクセスを有効にします。
  • 特定のドメインのみ: このオプションを使用すると、埋め込みコンテンツへのアクセスの範囲を限定できます。このオプションを使用する場合は、次のセクション「ドメインの書式設定」指定されている書式設定ルールに従ってください。

ドメインの書式設定

[domain allowlist (ドメイン許可リスト)] テキスト ボックスには、以下の書式設定の例を使用して、1 つまたは複数のドメインを入力することができます。

注: ドメインの書式設定のルールは、Tableau REST API で 接続済みアプリのメソッド(新しいウィンドウでリンクが開く)を使用する場合にも適用されます。

一般的なシナリオに基づく書式設定の例をいくつか示します。

指定する内容埋め込みへのアクセス
ドメインの範囲*.myco.com埋め込みコンテンツには、myco.com のすべてのサブドメインからアクセスできます。
すべてのポートmyco.com:*埋め込みコンテンツには、myco.com のすべてのポートからアクセスできます。
特定のポートmyco.com:8080埋め込みコンテンツには、myco.com のポート 8080 からのみアクセスできます。
複数の個別のドメインmyco.com
events.myco.com
ops.myco.com

埋め込みコンテンツには、3 つのすべてのドメインからアクセスできます。

注: 複数のドメインを指定するときは、各ドメインを新しい行に入力するか、ドメインをスペースで区切ってください。REST API の場合は、ドメインをスペースで区切る必要があります。

セキュアなトラフィックのみhttps:埋め込みコンテンツには、ドメインに関係なく、安全にアクセスできます。
ドメインの範囲のすべてのポートへのセキュアなトラフィックhttps:*myco.com:*埋め込みコンテンツには、myco.com のすべてのサブドメインのすべてのポートから安全にアクセスできます。
ドメインなし[ドメインなし]埋め込みコンテンツへのアクセスはブロックされます。

動的グループ メンバーシップ (埋め込みワークフローのみ)

Tableau Server 2024.2 以降、接続済みアプリが設定されて機能が有効になっている場合、外部アプリケーションから送信した JWT に含まれるカスタム クレームを通じてグループ メンバーシップを動的に制御できます。

設定すると、ユーザー認証の際、外部アプリケーションは、ユーザーをアサートするグループ(https://tableau.com/groups) とグループ名 (「Group1」と「Group2」など) という、2 つのカスタム グループ メンバーシップ クレームを含む JWT を送信します。Tableau は JWT を検証し、グループと、そのグループにパーミッションが依存するコンテンツへのアクセスを有効にします。

詳細については、アサーションを使用した動的グループ メンバーシップを参照してください。

既知の問題 (埋め込みのワークフローのみ)

接続済みアプリの使用にはいくつかの既知の問題がありますが、これらは今後のリリースで対処される予定です。

  • ツールバー機能: 埋め込みコンテンツにツールバーのパラメーターが定義されている場合、すべてのツールバー機能が動作するとは限りません。この問題を回避するには、次の例のようにツールバーのパラメーターを非表示にすることをお勧めします。

    <tableau-viz id='tab-viz' src='https://<your_server>/t/<your_site>/...'
    	toolbar='hidden'>
    </tableau-viz>

  • パブリッシュされたデータ ソース: データベースの認証資格情報の入力を求める [ユーザーにメッセージを表示] が設定されているパブリッシュされたデータ ソースは表示されません。この問題を回避するには、可能であれば、データ ソースの所有者がデータベースの認証資格情報を埋め込むことをお勧めします。

  • 複数のサイトへの埋め込みビュー: Tableau Server 2023.1 以前では、同じブラウザーで異なるサイトのビューに切り替えると、エラー「1008: 接続アプリのシークレットを取得できませんでした」が発生します。この問題を回避するには、Tableau Server 2023.3 以降にアップグレードしてください。
  • 埋め込みダッシュボードの「データに聞く」オブジェクト: 埋め込みダッシュボードの「データに聞く」オブジェクトは読み込まれません。(Tableau Server 2024.2 では「データに聞く」は廃止されます。)

  • メトリクスとドメイン許可リスト: 接続済みアプリのドメイン許可リストでアクセス制限が指定されているかどうかにかかわらず、埋め込みメトリクスのビューが表示されます。注: 埋め込みビューのツールバーからアクセスされるメトリクス データは、期待どおりに機能します。( Tableau Server 2023.3 で、Tableau はメトリクスを埋め込む機能を廃止しました。)

トラブルシューティング

接続済みアプリに関連する可能性のあるエラーと、推奨されるトラブルシューティングのステップについては、「接続済みアプリをトラブルシューティングする - 直接信頼」を参照してください。

フィードバックをお送りいただき、ありがとうございます。フィードバックは正常に送信されました。ありがとうございます!