これらの機能の利用を希望する場合は、Lookerアカウントマネージャーにご連絡ください。
シングル サインオン(SSO)埋め込みでは、非公開の Looker ビジュアリゼーション、ビジュアリゼーション、Explore、ダッシュボード、LookML ダッシュボードを、個別の Looker ログインなしでユーザーに提示できます。代わりに、ユーザーは自社のアプリケーションを介して認証されます。
SSO 埋め込みでは、iframe で使用する特別な Looker URL を作成します。URL には、共有する情報、システム内のユーザーの ID、そのユーザーに付与する権限が含まれています。その後、Looker から提供された秘密鍵を使用して URL に署名します。
公開埋め込みについては、Look の公開、インポート、埋め込みに関するドキュメント ページの iframe
タグによる公開埋め込みセクションをご覧ください。
SSO組み込みの適切なホスティング
Safari や、広告またはトラッキングをブロックする拡張機能がインストールされているブラウザなど、一部のブラウザは、デフォルトでサードパーティ Cookie をブロックする Cookie ポリシーを使用しています。Looker はユーザー認証に Cookie を使用するため、これらのブラウザでは埋め込み iframe の認証を行えません(ユーザーがブラウザの Cookie プライバシー設定を変更しない限り)。たとえば、https://mycompany.com
に情報を埋め込む場合、Looker が同じドメイン(https://analytics.mycompany.com
など)を共有することを確認する必要があります。
Looker がインスタンスをホストしている場合は、Looker サポートに連絡して、カスタム ドメインの使用に必要な DNS 構成を設定します。これにより、Looker が埋め込みアプリケーションと同じドメインを共有し、すべてのブラウザでデフォルトで受け入れられるファーストパーティの Cookie を利用できます。Looker のヘルプセンターで [お問い合わせ] をクリックしてサポート リクエストを開きます。
お客様がホストするLookerインスタンスがある場合、SSO組み込みを使用するアプリケーションがそのLookerインスタンスと同じドメインを使用していることを確認してください。
クローズドシステムを使用したクライアント可視性の制御
SSO 埋め込みの一般的な設定では、Looker ユーザーはデータを別のお客様に提供しながら、別の企業やグループのクライアント同士を関わらせるべきではありません。このシナリオでは、お客様の個人情報を保護するために、Looker をクローズド システム(マルチテナント インストールとも呼ばれます)として構成することを強くおすすめします。クローズド システムでは、コンテンツが分断され、異なるグループのユーザー間で情報が共有されなくなります。このため、外部ユーザーにインスタンスへのアクセス権を付与する前に、クローズド システム オプションを有効にすることをおすすめします。
詳細については、アクセスレベルのシステムの設計と構成と埋め込み分析のセキュリティに関するベスト プラクティスのドキュメントをご覧ください。
Looker の秘密鍵の生成
SSO 埋め込みリクエストが正当であり、他の誰かが偽造されていないことを確認するには、まず「埋め込みシークレット」を生成する必要があります。手順は次のとおりです。
- Looker の [Admin] セクションの [Embed] ページに移動します。
- [Embed SSO Authentication] プルダウンから [Enabled] を選択し、[Update] をクリックします。
- [シークレットをリセット] ボタンをクリックして、埋め込みシークレットを生成します。このシークレットは安全な場所に必ずコピーしてください。リセットしないと Looker から再取得できません。キーをリセットすると、古いキーを使用した埋め込みはすべて破損します。
秘密鍵にアクセスできるユーザーは誰でも、任意のユーザーが Looker インスタンスに接続しているモデルにアクセスするための URL を、任意のユーザーとして作成できます。SSO 埋め込みシークレットを保護します。埋め込み Looker インスタンスに対して管理者の認証情報を使用する場合と同様に、SSO 埋め込みシークレットを無効にします。
埋め込みURLの構築
適切な URL を作成するには、秘密鍵で URL を適切にエンコードし、その他のセキュリティ関連のアイテムを生成するために、コードを記述する必要があります。SSO サンプルの GitHub リポジトリで、いくつかのサンプル スクリプトを確認できます。以降のセクションでは、これらのスクリプトに入力する必要がある情報について説明します。
必要なLooker情報の収集
URL を作成する際は、まず含める必要があるすべての情報を決定します。次のものが必要になります。
組み込みURL
埋め込む Look、Explore、クエリの可視化、またはダッシュボードの URL を取得します。次のように、ドメインを削除してパスの前に /embed
を配置します。
項目 | 通常のURLパターン | 組み込みURL |
---|---|---|
Look | https://instance_name.looker.com/ looks/4 |
/embed/looks/4 |
探索 | https://instance_name.looker.com/ explore/my_model/my_explore |
/embed/explore/my_model/my_explore |
クエリの可視化 | https://instance_name.looker.com/ explore/my_model/my_explore?qid=1234567890abcdefghij12 Query.client_id は、Explore URL の qid= パラメータの後に続く 22 文字の英数字です。Query.client_id 値は、クエリとビジュアリゼーション設定を表す一意の文字列です。クエリのビジュアリゼーションを埋め込むには、クエリ ビジュアリゼーションの Query.client_id 値を取得し、Query.client_id を埋め込み URL にコピーします。Looker Explore UI を使用して、サポートされているビジュアリゼーションでクエリを作成し、 qid= パラメータから Query.client_id 値をコピーできます。または、Get Query メソッドを使用して Looker API で Query.client_id を取得できます。 |
/embed/query-visualization/Query.client_id |
ユーザー定義ダッシュボード | https://instance_name.looker.com/ dashboards/1 |
/embed/dashboards/1 |
ユーザー定義の以前の ダッシュボード |
https://instance_name.looker.com/ dashboards-legacy/1 |
/embed/dashboards-legacy/1 |
LookML ダッシュボード | https://instance_name.looker.com/ dashboards/my_model::my_dashboard |
/embed/dashboards/my_model::my_dashboard |
以前の LookML ダッシュボード |
https://instance_name.looker.com/ dashboards-legacy/my_model::my_dashboard |
/embed/dashboards-legacy/my_model::my_dashboard |
埋め込みコンテンツには、常に製品版のコンテンツが反映されています。開発モードで行われた変更のうち、コンテンツに影響を与えていて本番環境にデプロイされていない変更は、埋め込みに表示されません。
権限
権限セットは、ユーザーまたはグループの権限を定義します。権限は、次のいずれかの方法で適用できます。
- モデル固有: このタイプの権限は、同じロールの一部であるモデルセットにのみ適用されます。
- インスタンス全体: このタイプの権限は Looker インスタンス全体に適用されます。インスタンス全体の権限を持つ埋め込みユーザーは、Looker インスタンス全体で特定の機能を実行できますが、ロールのモデルセットに含まれないモデルに基づいてコンテンツにアクセスすることはできません。
ユーザーに付与する権限を決定します。次のリストは、SSO 埋め込みに使用できるすべての権限を示しています。次のリストに記載されていない権限はSSO埋め込みではサポートされていません。
権限 | 依存関係 | Type | 定義 |
---|---|---|---|
access_data |
なし | モデルに固有 | データにアクセスすることをユーザーに許可します(Look、ダッシュボード、Exploreを閲覧するために必要です)。 |
see_lookml_dashboards |
access_data |
モデルに固有 | ユーザーが LookML ダッシュボードを参照できるようにする |
see_looks |
access_data |
モデルに固有 | ユーザーが Look を表示できるようにする |
see_user_dashboards |
see_looks |
モデルに固有 | ユーザー定義のダッシュボードを表示し、埋め込みからフォルダを参照できます。 |
explore |
see_looks |
モデルに固有 | Exploreページを閲覧することをユーザーに許可します |
create_table_calculations |
explore |
インスタンス全体 | Explore で表計算を作成するために必要 |
create_custom_fields |
explore |
インスタンス全体 | 22.4 で追加 Explore でカスタム フィールドを作成するために必要です。 |
can_create_forecast |
explore |
インスタンス全体 | 22.12 で追加 ユーザーがビジュアリゼーションで予測を作成または編集できるようになりました。 |
save_content |
see_looks |
インスタンス全体 | ユーザーは Look とダッシュボードに変更を加えて保存できます。 |
send_outgoing_webhook |
see_looks |
モデルに固有 | 任意のウェブフックへのダッシュボードやLookの配信をスケジュールすることをユーザーに許可します |
send_to_s3 |
see_looks |
モデルに固有 | Amazon S3バケットへのダッシュボードやLookの配信をスケジュールすることをユーザーに許可します |
send_to_sftp |
see_looks |
モデルに固有 | SFTPサーバーへのダッシュボードやLookの配信をスケジュールすることをユーザーに許可します |
schedule_look_emails |
see_looks |
モデルに固有 | ダッシュボードと Look を、各自のメール(「email」というユーザー属性で設定されたもの)またはメールドメイン許可リストで設定された制限内にあるメールアドレスに送信するようにスケジュールできます。create_alerts 権限を持つユーザーは、メールドメイン許可リストで設定された制限内にあるメールアドレスにアラート通知を送信できます。 |
schedule_external_look_emails |
schedule_look_ emails |
モデルに固有 | ユーザーは、任意のメールに送信されるようにダッシュボードと Look をスケジュールできます。create_alerts 権限を持つユーザーは、任意のメールドメインにアラート通知を送信できます。 |
send_to_ integration |
see_looks |
モデルに固有 | ユーザーは、Looker Action Hub を介して Looker と統合されたサードパーティのサービスに Looker コンテンツを配信できます。この権限はデータ アクションとは無関係です。 |
create_alerts |
see_looks |
インスタンス全体 | 指定した条件が満たされるか超過したときに通知を受け取れるように、ダッシュボード タイルにアラートを作成できます。ユーザーは、自分自身のアラートやその他のユーザーを編集、複製、削除できます。公開アラート:ユーザーの Slack ワークスペースが Looker インスタンスに接続されていない場合、ユーザーは Slack に通知を送信するアラートを作成できません。 |
download_with_limit |
see_looks |
インスタンス全体 | ユーザーは制限付きでクエリの結果をダウンロードできます。 |
download_without_limit |
see_looks |
インスタンス全体 | ユーザーは制限なしでクエリの結果をダウンロードできます。 |
see_sql |
see_looks |
モデルに固有 | クエリ用のSQL、およびクエリの実行で発生したSQLエラーを見ることをユーザーに許可します。 |
clear_cache_refresh |
access_data |
モデルに固有 | 21.14 で追加 ユーザーはキャッシュを消去し、埋め込みダッシュボード、以前のダッシュボード、ダッシュボード タイル、Look、Explore を更新できます。 |
see_drill_overlay |
access_data |
モデルに固有 | 完全なExploreページに移動することなくドリルダウンすることをユーザーに許可します。 |
embed_browse_spaces |
なし | インスタンス全体 | ユーザーが埋め込みからフォルダを参照できるようにコンテンツ ブラウザを有効にします。embed_browse_spaces 権限が付与された埋め込みユーザーには、個人用埋め込みフォルダと、組織の共有フォルダ(ある場合)へのアクセス権が付与されます。embed_browse_spaces 権限は、ユーザーがコンテンツを保存する場所を選択する際にフォルダを参照できるように、save_content 権限を持つユーザーに推奨されます。フォルダ内のコンテンツを表示するには、 see_looks 権限、see_user_dashboards 権限、see_lookml_dashboards 権限も必要になります。 |
embed_save../_shared_space |
なし | インスタンス全体 |
21.4 で追加
save_content 権限も持っているユーザーが、[保存] ダイアログ ボックスから組織の [共有] フォルダに移動できます。save_content 権限を持っていても、embed_save_shared_space 権限がないユーザーは、個人用埋め込みフォルダにコンテンツを保存することのみ可能です。embed_save_shared_space 権限は、コンテンツのアクセス権限をオーバーライドしません。たとえば、ユーザーが「Shared」フォルダに保存できるようにするには、引き続き Shared フォルダに対する Manage Access, Edit アクセス権が必要です。さらに、embed_save_shared_space 権限がないために、save_content 権限があり、Shared フォルダに対する Manage Access, Edit 権限を持つユーザーが Shared フォルダに移動するための代替手段(埋め込みダッシュボードから [Explore from here] を使用するなど)でアクセスできない場合、そのコンテンツは保存されません。 |
モデルアクセス
ユーザーがアクセスできる LookML モデルを決定します。これは単にモデル名のリストです。
ユーザー属性
ユーザーが持つユーザー属性があれば決定します。Looker のユーザー属性の名前と、その属性に対してユーザーが持つ値が必要です。
グループ
ユーザーが所属するグループがあれば、決定します。グループ名ではなく、グループ ID が必要です。SSO 埋め込みユーザーを Looker グループに追加すると、そのユーザーの Looker フォルダへのアクセスを管理できます。SSO 埋め込みのユーザーは、Looker グループのメンバーと共有されているフォルダへのアクセス権を持ちます。
external_group_id
パラメータを使用して、通常の Looker グループの外部にあるグループを作成することもできます。その場合、同じ external_group_id
を持つ SSO 埋め込みユーザーは、外部グループに固有の共有フォルダ「Group,」にアクセスできるアクセス権を持ちます。
埋め込みのロール
permissions
および models
パラメータは、埋め込みユーザーのロールを作成します。このロールは、Looker の [Admin] セクションの [Users] ページに、「Embedded Role」として表示されます。permissions
、models
、group_ids
の各パラメータがすべて埋め込み URL で指定されている場合、埋め込みロールは、group_ids
パラメータにリストされているグループにすでに割り当てられているロールに追加されます。これは、Lookerですべてのロールが付加的であるという点で標準ロールと同じです。
たとえば、Looker にグループ ID 1
の既存のグループがあり、そのグループに model_one
という名前のモデルに対する explore
権限がすでにあり、次のパラメータを使用して埋め込み URL を作成するとします。
group_ids
=[1]
permissions
=["access_data","see_looks"]
models
=["model_two"]
その場合、埋め込みユーザーは model_one
のデータを表示、確認する権限を継承します。また、前のパラメータで作成した埋め込みロールでも、model_two
のデータを表示できるようになります。
埋め込みURLの作成
SSO埋め込みURLの書式は次のとおりです。
https://ホスト/login/embed/埋め込み URL?PARAMETERS&signature=署名
ホスト
ホストは、Looker インスタンスがホストされているロケーションです。例: analytics.mycompany.com
。ポート転送をまだ有効にしていない場合は、必ずポート番号を含めてください(analytics.mycompany.com:9999
など)。
組み込みURL
埋め込み URL は事前に決定されています。書式は次のようになります。
/embed/looks/4
/embed/explore/my_model/my_explore
/embed/query-visualization/Query.client_id
/embed/dashboards/1
または/embed/dashboards-legacy/1
/embed/dashboards/my_model::my_dashboard
または/embed/dashboards-legacy/my_model::my_dashboard
つまり、パターン /embed//embed/
は最終ページ URL に表示されます。これは正しい説明です。
埋め込み JavaScript イベントを使用している場合は、次のように埋め込み URL の末尾に embed_domain
(iframe を使用しているドメイン)を追加する必要があります。
/embed/looks/4
/embed/looks/4?embed_domain=https://mywebsite.com
embed_domain
は、埋め込み URL の後かつパラメータの前に追加されます。nonce=626
などの既存のパラメータがある場合、embed_domain
の追加は次のようになります。
/embed/looks/4?nonce=626
/embed/looks/4?embed_domain=https://mywebsite.com?nonce=626
Embed SDK を使用している場合は、次のように embed_domain
を追加し、埋め込み URL の末尾に sdk=2
も含めます。
/embed/looks/4
/embed/looks/4?embed_domain=https://mywebsite.com&sdk=2
sdk=2
パラメータを使用すると、SDK が存在しているかどうかを Looker が識別して、SDK によって提供される追加機能を利用できます。このパラメーターは署名付きSSO URLの一部であることから、SDK自体がこのパラメーターを追加することはできません。
パラメータ
次のURLパラメーターを使用して、SSO埋め込みに必要な情報を指定します。
パラメータ | 値が必須かどうか | 説明 | データ型 | 例 |
---|---|---|---|---|
nonce |
○ | 任意のランダムな文字列。ただし 1 時間以内に繰り返すことはできません。また、長さは 255 文字未満にする必要があります。 これにより、攻撃者が正当なユーザー URL を再登録して、収集すべきでない情報を収集できなくなります。 |
JSON文字列 | "22b1ee700ef3dc2f500fb7" |
time |
○ | UNIXタイムスタンプとしての現在時刻。 | Integer | 1407876784 |
session_length |
○ | ユーザーに許容されるLookerへの継続ログイン時間(0〜2,592,000秒(30日))。 | Integer | 86400 |
external_user_id |
○ | Looker を埋め込むアプリケーション内の各ユーザーの ID。Looker では SSO 埋め込みユーザーを区別するために external_user_id を使用するため、各ユーザーに一意の ID を割り当てる必要があります。任意の文字列を含むユーザー用に external_user_id を作成できます(文字列がユーザーごとに一意である限り)。各 ID は、一連の権限、ユーザー属性、モデルに関連付けられます。1 つのブラウザでサポートできる external_user_id (ユーザー セッション)は、一度に 1 つのみです。セッション中にユーザーの権限やユーザー属性を変更することはできません。セキュリティ上の理由から、異なるインタラクティブ ユーザーの異なる埋め込みセッションで同一の external_user_id を使用していないことを確認します。の複数のユーザーが、権限、ユーザー属性値、モデルへのアクセス権も異なっていることを確認してください。 複数のユーザー、またはアクセス権のあるユーザーからモデルにアクセスできるのは、同じユーザーに複数の権限、モデル、アクセス権が付与されているユーザーです。 |
JSON文字列 | "user-4" |
permissions |
○ | ユーザーが持つ必要がある権限のリスト。 許可される権限のリストについては、このページの権限をご覧ください。 |
文字列の配列 | [ "access_data", "see_looks" ] |
models |
○ | ユーザーがアクセスできるモデル名のリスト。 | 文字列の配列 | [ "model_one", "model_two" ] |
group_ids |
× | ユーザーがメンバーとなる Looker グループのリスト(存在する場合)。グループ名ではなくグループIDを使用します。 | 整数の配列 | [4, 3] |
external_group_id |
× | 必要に応じて、ユーザーが Looker を組み込んだアプリケーションが属するグループの一意の識別子。 コンテンツの保存権限を持ち、外部グループ ID を共有するユーザーは、「Q&A」という共有 Looker フォルダにコンテンツを保存、編集できます。 |
JSON文字列 | "Accounting" |
user_attributes |
× | ユーザーが持つべきユーザー属性のリスト(ある場合)。ユーザー属性名のリストと、その後にユーザー属性値が含まれます。 LookML モデルがローカライズされている場合は、埋め込み URL の locale ユーザー属性を使用して、埋め込み用の言語を指定できます。たとえば、パラメータ user_attributes { "locale" : "fr_FR" } を含めると、埋め込みでは、言語としてフランス語が読み込まれます。 |
文字列のハッシュ | { "vendor_id" : "17", "company" : "xactness" } |
access_filters |
○ | Looker 3.10 ではこのパラメータは削除されていますが、URL では必須です。空のプレースホルダとともに access_filters を使用します(例: access_filters={} )。 |
空のプレースホルダー | {} |
first_name |
× | ユーザーの名。空白のままにすると、first_name は最後のリクエストの値を保持します。名前が設定されていない場合は、「埋め込み」になります。 |
JSON文字列 | "Alice" |
last_name |
× | ユーザーの姓。空白のままにすると、last_name は最後のリクエストの値を保持します。または、姓が設定されていない場合は「埋め込み」になります。 |
JSON文字列 | "Jones" |
user_timezone |
× | ユーザー固有のタイムゾーンを有効にしている場合は、埋め込み Look またはダッシュボードの [タイムゾーン] プルダウンで [閲覧者のタイムゾーン] オプションの値を設定します。このパラメータを使用しても、コンテンツが表示されるタイムゾーンは直接変更されません。ユーザーは、プルダウンから目的のタイムゾーンを選択する必要があります。 有効な値については、SSO 埋め込みタイムゾーンのリファレンスに関するドキュメント ページをご覧ください。 チャットチームのヒント: 埋め込みコンテンツを閲覧者のタイムゾーンにするには、次のいずれかの方法を使用します。 ?query_timezone=user_timezone パラメータを埋め込み URL に追加します。例:/embed/dashboards/1?query_timezone=user_timezone |
JSON文字列またはnull | "US/Pacific" - または - null |
force_logout_login |
○ | 通常の Looker ユーザーがすでに Looker にログインしていて、SSO 埋め込みアイテムが表示される場合は、次のいずれかを選択できます。 1) ユーザーが現在の認証情報でアイテムを表示するかどうか または 再度ログインする必要があります。2) |
Boolean(trueまたはfalse) | true |
上記のパラメータはすべて必須ですが、「値が必要です」\utt; 列の「No」となっているパラメータは、空の値を指定して使用できます。たとえば、group_ids []
や user_attributes {}
を使用できます。
署名
署名を生成するには、以下の手順を行う必要があります。
- 次のパラメータ値をこの順序で収集します。
- ホストの後に
login/embed/
を続けます(例:analytics.mycompany.com/login/embed/
)。 - 組み込みURL
- ノンス
- 現在時刻
- セッションの長さ
- 外部ユーザーID
- 権限
- モデル
- グループID
- 外部グループID
- User Attributes
- アクセスフィルタ(空のプレースホルダーが必要です)
- ホストの後に
- ホストと埋め込みURL以外のすべての値をJSONとして書式設定します。
- 値を改行(
\n
)で連結する - Looker埋め込みシークレットを使用して連結文字列にHMAC署名を追加します。
エンコード
最後のステップはURLエンコーディングです。
URL をエンコードする前に、使用可能なすべてのパラメータを使用する埋め込み URL は次のような形式になります。
https://analytics.mycompany.com/login/embed//embed/dashboards/1?
nonce="22b1ee700ef3dc2f500fb7"&
time=1407876784&
session_length=86400&
external_user_id="user-4"&
permissions=["access_data","see_user_dashboards","see_looks"]&
models=["model_one","model_two"]&
group_ids=[4,3]&
external_group_id="Allegra K"&
user_attributes={"vendor_id":"17","company":"xactness"}&
access_filters={}&
first_name="Alice"&
last_name="Jones"&
user_timezone="US/Pacific"&
force_logout_login=true&
signature=123456789ABCDEFGHIJKL
前述のとおり、URL に /embed//embed/
は正しく表示されます。
URL をエンコードすると、次のように表示されます。
https://analytics.mycompany.com/login/embed/%2embed%2Fdashboards%2F1?
nonce=%2222b1ee700ef3dc2f500fb7&%22&
time=1407876784&
session_length=86400&
external_user_id=%22user-4%22&
permissions=%5B%22access_data%22%2C%22see_user_dashboards%22%2C%22see_looks%22%5D&
models=%5B%22model_one%22%2C%22model_two%22%5D&
group_ids=%5B4%2C3%5D&
external_group_id=%22Allegra%20K%22&
user_attributes=%7B%22vendor_id%22%3A%2217%22%2C%22company%22%3A%22xactness%22%7D&
access_filters%7B%7D%26%0A
first_name=%22Alice%22&
last_name=%22Jones%22&
user_timezone=%22US%2FPacific%22&
force_logout_login=true&
signature=123456789ABCDEFGHIJKL
create_sso_embed_url
API エンドポイントの使用
Looker API には create_sso_embed_url
エンドポイントが含まれています。このエンドポイントには、埋め込むコンテンツの URL を含む一連の SSO 埋め込みパラメータを取り、暗号化されたエンコード済みの完全な SSO URL を返します。
この API エンドポイントをウェブサーバーから使用するには、ウェブサーバーが管理者権限で Looker API に対して認証できる必要があります。また、埋め込みドメインの許可リストに、ウェブサーバーのドメインも登録する必要があります。
API Explorer を使用して、このエンドポイントを使用する SSO URL を生成することもできます。API Explorer は、Looker Marketplace から Looker インスタンスにインストールできます。また、Looker のデベロッパー ポータルで一般公開バージョンを表示することもできます。生成された SSO URL は正確にコピーし、1 回だけ使用できます。そうしないと、失敗します。API Explorer は、SSO URL を生成し、トラブルシューティングのために手動で作成された SSO URL と比較する際にも有用です。
Looker API の詳細については、Looker API のスタートガイドのドキュメントをご覧ください。
埋め込みURLのテスト
最終ページ URL をテストするには、Looker の [管理] セクションの [埋め込み] ページの [埋め込み URI 検証ツール] に貼り付けます。このオプションでは、想定しているデータと権限が正しく設定されているかどうかはわかりませんが、認証が適切に機能しているかどうかを確認できます。