Looker を使用した署名付き埋め込み

1. 始める前に

署名付き埋め込みは、Looker の独立したログインを必要とせずに、埋め込まれた Look、可視化、Explore、ダッシュボードをユーザーに非公開で提供する手段です。代わりに、ユーザーは自社のアプリケーションを介して認証されます。

署名付き埋め込みは、iframe で使用される特別な Looker URL を作成することから始まります。このURLには、共有したい情報、システムにおけるユーザーのID、そのユーザーに付与する権限を含めます。その後、URLに、Lookerから提供されたシークレットキーを使用して署名します。

前提条件

  • 実行中の Looker インスタンスがある
  • Looker インスタンスの管理者である

学習内容

  • 署名付き埋め込みを許可するように Looker インスタンスを設定する方法
  • 秘密鍵の生成方法
  • 署名付き埋め込み URL に含めるために収集する必要がある情報
  • 署名付き埋め込み URL を生成する方法
  • 埋め込みアイテムをアプリケーションに追加する方法

2. 適切な Looker ホスティング

一部のブラウザでは、サードパーティの Cookie をブロックするセキュリティ ポリシーがデフォルトで設定されているため、署名付き埋め込みが機能しません。この Codelab では、この問題を解決する最も簡単な方法は、ブラウザでサードパーティ Cookie を一時的に許可することです。

本番環境の設定では、サードパーティ Cookie に対応するために次のいずれかの戦略を選択する必要があります。

  • Looker インスタンスと署名付き埋め込みを使用するアプリケーションを同じドメインに配置します。たとえば、Looker インスタンスが looker.mycompany.com にあり、署名付き埋め込みサイトが analytics.mycompany.com にある場合などです。
  • Cookieless Embed 機能を有効にします。これにより、サードパーティ Cookie をブロックするブラウザで、複数のドメインにわたる認証が可能になります。このオプションを使用するには、Looker のクッキーレス埋め込みのドキュメント ページで説明されているように、追加の設定が必要です。

3. 秘密鍵を生成する

署名付き埋め込み URL を作成するには、Looker のシークレット キーが必要です。手順は次のとおりです。

  1. Looker の [管理者] セクションにある [埋め込み] ページに移動します。
  2. [埋め込み SSO 認証] プルダウンから [有効] を選択し、続いて [更新] を選択します。
  3. [Embed Secret] セクションで [シークレットをリセット] ボタンを選択して、埋め込みシークレットを生成します。

このシークレットは、リセットしない限り再度 Looker から取得できないため、必ず安全な場所にコピーしておいてください。キーをリセットすると、古いキーを使用する埋め込みがすべて解除されます。

4. 署名付き埋め込み URL の入力を収集する

署名付き埋め込み URL を作成するには、次の情報を収集する必要があります。

表示するデータの URL

埋め込む Look、Explore、クエリ ビジュアリゼーション、ダッシュボードの URL を取得します。その後、ドメインを削除し、パスの前に /embed を追加します。

たとえば、https://instance_name.cloud.looker.com/looks/4/embed/looks/4 になります。

または、https://instance_name.cloud.looker.com/explore/my_model/my_explore/embed/explore/my_model/my_explore になります。

埋め込みユーザーに付与する権限

埋め込みユーザーに付与する権限を選択します。署名付き埋め込みに関連する権限については、Looker の署名付き埋め込みのドキュメント ページをご覧ください。

この Codelab では、次の権限が最小限のリストになる可能性があります。

  • access_data
  • see_lookml_dashboards
  • see_looks
  • see_user_dashboards
  • explore

埋め込みユーザーがコンテンツを閲覧して保存できるかどうかをテストする場合は、次の点も考慮してください。

  • save_content
  • embed_browse_spaces
  • embed_save_shared_space

埋め込みユーザーに付与するモデル アクセス権

埋め込みユーザーにアクセス権を付与する Looker モデルを選択します。少なくとも、表示する Look、Explore、クエリの可視化、ダッシュボードの基盤となるモデルへのアクセス権が必要です。

埋め込みユーザーに付与するユーザー属性

埋め込みユーザーに設定する Looker のユーザー属性を選択します(存在する場合)。この Codelab では、ユーザー属性を追加する必要はないかもしれません。

埋め込みユーザーに付与するグループ

ユーザーが属している必要があるグループ ID(グループ名ではない)を決定します(存在する場合)。この Codelab では、グループを追加する必要はないかもしれません。

会社のユーザー ID とグループ

Looker の署名付き埋め込み URL では、埋め込み Looker 要素を表示するアプリケーションの各ユーザーに一意の識別子を指定する必要があります。Looker では、これは「外部ユーザー ID」と呼ばれ、任意の文字列にできます。

関連する場合は、「外部グループ ID」も指定できます。これは、アプリケーションでユーザーが属するグループの一意の識別子です。

5. URL 生成スクリプトを選択します。

適切な署名付き埋め込み URL を構築するには、コードを使用して、URL をシークレットキーで適切にエンコードし、他のセキュリティ関連項目を生成する必要があります。

幸いなことに、Looker の looker_embed_sso_examples Github リポジトリには、さまざまなプログラミング言語のサンプル スクリプトがいくつか用意されています。関連するスクリプトを選択して、開発環境にコピーします。

6. データを入力してスクリプトを実行します。

選択した URL 生成スクリプトには、以前に収集したすべての情報を配置できる変数またはオブジェクトと、その情報の表示方法の例が含まれています。

スクリプト名

入力の概算行数

LookerEmbedClientExample.java

15 - 28

csharp_example.cs

18 ~ 35 歳

go_example.go

193 ~ 202

node_example.js

87 - 104

python_example.py

103 - 111

ruby_example.rb

88 ~ 101

sso_embed.php

14 - 27

収集したデータで例を置き換えたら、スクリプトを実行して署名付き埋め込み URL を生成します。次の手順で使用するため、URL をメモしておきます。

7. URL をテストする

最終的な URL をテストする場合は、Looker の [管理] セクションの [埋め込み] ページにある [Embed URI Validator] に URL を貼り付けます。この機能は、想定したデータや権限が正しく設定されているかどうかを判別するためのものではなく、認証が正しく機能するかどうかを検証するためのものです。

8. URL を iframe に埋め込む

最後に、生成した URL を iframesrc 属性に追加して、Look、Explore、クエリ ビジュアリゼーション、ダッシュボードをアプリケーションに埋め込みます。その iframe をアプリケーションまたはテスト環境に配置します。

必要に応じて、Looker の埋め込み JavaScript イベントを利用して、JavaScript を使用して iframe を操作できます。

9. 追加情報

埋め込みユーザーが目的のデータの可視性と権限に制限されるように、Looker の署名付き埋め込み機能を慎重に構成する必要があります。以下の点にご留意ください。

  • Looker の署名付き埋め込みのドキュメント ページでは、署名付き埋め込み URL の生成方法と、使用可能なすべての構成オプションについて詳しく説明しています。
  • Looker の埋め込み分析向けのセキュリティに関するベスト プラクティスのドキュメント ページには、署名付き埋め込みを安全に構成するためのガイダンスが記載されています。
  • 署名付き埋め込みは、Looker のお客様が自分のクライアントにデータを提示する際に、異なる企業やグループのクライアントが互いを認識できないようにするために使用されることがよくあります。このようなシナリオでは、Looker をクローズドシステム(マルチテナント インストールとも呼ばれる)として設定することを強くお勧めします。
  • 署名付き埋め込み機能は、Looker の API を介して利用できます