シングルサインオン(SSO)埋め込みは、埋め込まれた安全な Look、Explore、ダッシュボード、または LookML ダッシュボードの情報をユーザーに提供する手段です。この際、別途 Looker にログインするようユーザーに要求しません。代わりに、ユーザーは自社のアプリケーションを介して認証されます。
SSO埋め込みは、iFrameで使用される特別なLooker URLを作成することで機能します。 このURLには、共有したい情報、システムにおけるユーザーのID、そのユーザーに付与する権限を含めます。 その後、URLに、Lookerから提供されたシークレットキーを使用して署名します。
SSO組み込みの適切なホスティング
一部のブラウザでは、サードパーティのCookieをブロックするCookieポリシーがデフォルトで適用されています(このドキュメンテーションの執筆時点でInternet ExplorerやSafariが該当します)。 Lookerはユーザーの認証にCookieを使用するため、これらのブラウザでは、ドメインをまたいだ組み込みiFrameの認証の試みは失敗します(ただし、ユーザーがブラウザのCookieプライバシー設定を変更している場合はその限りではありません)。 たとえば、https://mycompany.com
に情報を埋め込むには、Looker が https://analytics.mycompany.com
などのサブドメインにあることを確認する必要があります。
インスタンスがLookerによってホストされている場合は、Lookerサポートにお問い合わせの上、必要なDNS構成を設定してください。 Looker のヘルプセンターで [お問い合わせ] をクリックして、サポート リクエストを開始してください。
顧客がホストするLookerインスタンスがある場合、SSO埋め込みを使用するアプリケーションがLookerインスタンスと同じベースドメイン上にあることを確認してください。
クローズドシステムを使用したクライアント可視性の制御
SSO埋め込み構成では一般的に、Lookerユーザーがそれぞれ独自の顧客にデータを提供し、さまざまな会社やグループのクライアントを扱い、これらのクライアントが相互に認識できないようにします。 このようなシナリオでは、顧客の個人情報を保護するため、Lookerをクローズドシステム(マルチテナントインストールとも呼ばれる)として設定することを強くお勧めします。 クローズドシステムでは、コンテンツがサイロ化されるので、異なるグループのユーザーが相互を認識することが防止されます。 このため、外部ユーザーにインスタンスへのアクセスを許可する前に、クローズド システム オプションを有効にすることをおすすめします。
詳細については、アクセスレベルのシステムの設計と構成と、埋め込み分析向けのセキュリティに関するベスト プラクティスのドキュメント ページをご覧ください。
Looker のシークレットキーの生成
SSO埋め込み要求が正当なものであり、他の誰かによって偽装されたものでないことを検証できるように、最初に「埋め込みシークレット」を生成する必要があります。手順は次のとおりです。
- Looker の [管理者] セクションにある [埋め込み] ページに移動します。
- [埋め込み SSO 認証] プルダウンから [有効] を選択し、続いて [更新] をクリックします。
- 埋め込みシークレットを生成するには、[Reset Secret] ボタンをクリックします。このシークレットは、リセットしない限り再度 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/ dashboards-next/1 |
/embed/dashboards-next/1 |
ユーザー定義のレガシー ダッシュボード |
https://instance_name.looker.com/ dashboards/1 |
/embed/dashboards/1 |
LookML ダッシュボード | https://instance_name.looker.com/ dashboards-next/my_model::my_dashboard |
/embed/dashboards-next/my_model::my_dashboard |
レガシー LookML ダッシュボード |
https://instance_name.looker.com/ dashboards/my_model::my_dashboard |
/embed/dashboards/my_model::my_dashboard |
埋め込まれたコンテンツは、常にコンテンツの実働バージョンを反映します。 コンテンツに影響を与えるものの、プロダクションにまだデプロイされていない、開発モードで加えられた変更すべては、埋め込みでは表示されません。
権限
権限セットは、ユーザーまたはグループが行えることを定義します。権限は、次の 2 つの方法のいずれかで適用できます。
- モデル固有: このタイプの権限は、同じロールに含まれるモデルセットにのみ適用されます。
- インスタンス全体: このタイプの権限は、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 から表計算を作成するために必要です。 |
save_content |
see_looks |
インスタンス全体 | ダッシュボードやLookを変更して保存することをユーザーに許可します。 |
send_outgoing_webhook |
see_looks |
モデルに固有 | 任意のWebhookへのダッシュボードやLookの配信をスケジュールすることをユーザーに許可します。 |
send_to_s3 |
see_looks |
モデルに固有 | Amazon S3バケットへのダッシュボードやLookの配信をスケジュールすることをユーザーに許可します。 |
send_to_sftp |
see_looks |
モデルに固有 | SFTPサーバーへのダッシュボードやLookの配信をスケジュールすることをユーザーに許可します。 |
schedule_look_emails |
see_looks |
モデルに固有 | ユーザーは、自分自身のメール(「email」という名前のユーザー属性で設定されたもの)またはメールドメイン許可リストで設定された制限内にある 1 つのメールアドレスに送信されるようにダッシュボードと Look をスケジュールできます。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エラーを確認することをユーザーに許可します。 |
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 |
なし | インスタンス全体 | save_content 権限を持つユーザーが、組織の共有フォルダがある場合に、そこにコンテンツを保存することを許可します。save_content 権限はあるものの embed_save_shared_space 権限はないユーザーは、個人用埋め込みフォルダにのみコンテンツを保存できます。 |
モデルアクセス
ユーザーにアクセス権限を付与するLookMLモデルを決定します。 これは単にモデル名のリストになります。
ユーザー属性
ユーザーが設定する必要があるユーザー属性を決定します(存在する場合)。Lookerからのユーザー属性の名前と、ユーザーがその属性に対して設定する必要がある値が必要になります。
グループ
ユーザーが属している必要があるグループを決定します(存在する場合)。グループ名ではなくグループIDが必要になります。SSO 埋め込みユーザーを Looker グループに追加することによって、Looker のフォルダへのユーザー アクセスを管理できます。SSO 組み込みユーザーは、Looker グループのメンバーと共有されているあらゆるフォルダにアクセスできます。
external_group_id
パラメータを使用して、通常の Looker グループの外部にあるグループを作成することもできます。その場合、同じ external_group_id
を持つ SSO 組み込みユーザーは、外部グループに固有の「グループ」という共有フォルダにアクセスできるようになります。
埋め込みのロール
permissions
パラメータと models
パラメータは、埋め込みユーザーの ロールを作成します。このロールは、Looker の [管理者] セクションの [ユーザー] ページに「埋め込みのロール」として表示されます。埋め込み URL で permissions
、models
、group_ids
のすべてのパラメータが指定されている場合、埋め込みのロールが、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?パラメータ&signature=署名
Host(ホスト)
ホストは、Lookerインスタンスがホストされている場所です。 例: analytics.mycompany.com
ポート転送をまだ有効にしていない場合は、analytics.mycompany.com:9999
のように、ポート番号を必ず含めてください。
組み込みURL
埋め込みURLは前述のとおり決定します。 書式は次のようになります。
/embed/looks/4
/embed/explore/my_model/my_explore
/embed/dashboards-next/1
または/embed/dashboards/1
/embed/dashboards-next/my_model::my_dashboard
または/embed/dashboards/my_model::my_dashboard
したがって、最終的な URL にはパターン /embed//embed/
が含まれることになります(これは正しい表記です)。
埋め込み JavaScript イベントを使用する場合は、次のように埋め込み URL の末尾に必ず embed_domain
(iFrame が使用されているドメイン)を追加してください。
embed_domain
は埋め込み URL の後、任意のパラメータの前に追加されます。したがって、nonce=62
のような既存のパラメータがある場合、embed_domain
の追加は次のようになります。
Embed SDK を使用している場合は、次のように embed_domain
を追加して、埋め込み URL の末尾に sdk=2
を含めてください。
sdk=2
パラメータを指定することで、Looker に SDK の存在が認識され、SDK によって提供される追加機能を利用できるようになります。このパラメーターは署名付きSSO URLの一部であることから、SDK自体がこのパラメーターを追加することはできません。
パラメータ
次のURLパラメーターを使用して、SSO埋め込みに必要な情報を指定します。
パラメータ | 値が必須かどうか | 説明 | データ型 | 例 |
---|---|---|---|---|
nonce |
あり | ランダムな任意の文字列。ただし、255 文字未満にし、1 時間以内に繰り返し使用することはできません。 これにより、攻撃者が正規ユーザーの URL を再送信して情報を不正に収集するのを防ぎます。 |
JSON文字列 | "22b1ee700ef3dc2f500fb7" |
time |
あり | UNIXタイムスタンプとしての現在時刻。 | Integer | 1407876784 |
session_length |
あり | ユーザーに許容されるLookerへの継続ログイン時間(0〜2,592,000秒(30日))。 | Integer | 86400 |
external_user_id |
はい | Lookerを組み込んでいるアプリケーションにおけるユーザーの一意のID。 Looker では、この値を使用して SSO 埋め込みユーザーが識別されます。 この文字列を作成する際には任意の値を使用できます。ただし、この値は、所定の権限セット、ユーザー属性、モデルに対して一意である必要があります。 例えば、同じユーザーが 2 つのコンテキストでそれぞれ異なる権限を持つ場合、2 つの異なる外部ユーザー ID が必要になります。 セキュリティ上の理由から、異なるインタラクティブ ユーザーの異なる埋め込みセッションで同じ 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 の共有の権限を持つユーザーは、「Group」という 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 には前回のリクエストからの値が保持されるか、過去に名が設定されていない場合は「Embed」が挿入されます。 |
JSON文字列 | "Alice" |
last_name |
いいえ | ユーザーの姓。 空白のままにした場合、last_name には前回のリクエストからの値が保持されるか、過去に姓が設定されていない場合は「Embed」が挿入されます。 |
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)一度ログアウトし、SSO資格情報でログインし直す。 |
Boolean(trueまたはfalse) | true |
前述のパラメータはいずれも必須ですが、「値が必須かどうか」列が「いいえ」になっているパラメータには空の値を使用してもかまいません。たとえば、group_ids []
または user_attributes {}
を使用できます。
署名
署名を生成するには、次の手順に従います。
- 次のパラメータ値をこの順序で収集します。
- ホストの後に
login/embed/
を指定します(例:analytics.mycompany.com/login/embed/
)。 - 組み込みURL
- ノンス
- 現在時刻
- セッションの長さ
- 外部ユーザーID
- 権限
- モデル
- グループID
- 外部グループID
- User Attributes
- アクセスフィルタ(空のプレースホルダーが必要です)
- ホストの後に
- ホストと埋め込みURL以外のすべての値をJSONとして書式設定します。
- 値を改行(
\n
)で連結します - Looker埋め込みシークレットを使用して連結文字列にHMAC署名を追加します。
エンコード
最後のステップはURLエンコーディングです。
想定されるすべてのパラメータを使用して適切に書式設定したエンコーディング前の埋め込み URL は、次のようになります。
https://analytics.mycompany.com/login/embed//embed/dashboards-next/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-next%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 に認証されるようにする必要があります。ウェブサーバー ドメインも [埋め込みドメイン許可リスト] に表示されている必要があります。
Looker インスタンス上の API Explorer を使用して、このエンドポイントを使用して SSO URL を生成することもできます。生成された SSO URL は、正確にコピーする必要があり、一度だけ使用できます。そうでない場合はエラーになります。インタラクティブなAPIドキュメントは、トラブルシューティングのため、SSO URLの生成、および手動で作成したSSO URLとの比較にも使用できます。
Looker API の詳細については、Looker API の概要のページをご覧ください。
埋め込みURLのテスト
最終的な URL をテストする場合は、Looker の [管理] セクションの [埋め込み] ページにある [Embed URI Validator] に URL を貼り付けます。このオプションは、想定したデータや権限が正しく設定されているかどうかを判別するためのものではなく、認証が正しく機能するかどうかを検証するためのものです。