はじめに

ここでは、Qlik Senseのセキュリティルールを活用して、マルチテナントの運用を行うアプローチをご紹介します。ここでご説明するセキュリティルールの設定により、1つのQlik Sense Enterpriseのシステムの中から、ユーザーは自分が所属するテナントのユーザーが所有するアプリのみが参照可能となります。

image

また、ContentAdmin(コンテンツ管理者)のセキュリティルールの定義を変更し、ContentAdminのロールを付加されたユーザーは自分が属するテナントのコンテンツのみを管理できる設定とします。ここではマルチテナントの運用を行うためのセキュリティルールの基本設定をご説明しますが、実際の環境では要件に応じてルールの調整が必要となりますのでご注意ください。

テナントのカスタムプロパティの作成

まず、ユーザーがどのテナントに属するかを識別するための「@tenant」という名称のカスタムプロパティを作成します。QMCを開き、「Custom properties」をクリックします。

image

「Create new」をクリックします。

image

以下の入力を行い、「Apply」をクリックしてカスタムプロパティの作成を行います。ここでは「Tenant1」と「Tenant2」という2つのテナントを定義しており、必要に応じて追加を行います。

  • Name: 「tenant」と入力
  • Resource Types: 「Users」にチェック
  • Values: 「Create new」をクリックして「Tenant1」と「Tenant2」を追加

image

テナントのカスタムプロパティのユーザーへの設定

先ほど作成したテナントのカスタムプロパティをユーザーに対して設定します。QMCのトップ画面から、「Users」を選択します。

image

一覧からテナントの設定を行うユーザーをダブルクリックします。

image

「Custom properties」をクリックしてプロパティを展開し、「tenant」のカスタムプロパティからテナントを選択します。必要に応じて「Role」で「ContentAdmin」の管理者ロールを付与して「Apply」をクリックします。

image

上記作業をテナントに参加させるユーザーに対して繰り返します。尚、ユーザーの属するテナントを一覧上で確認するには、ユーザー一覧を開き、右上の「Column Selector」から「@tenant」のチェックをONにします。

image

そうすると一覧にテナントのカスタムプロパティの列が追加され、ユーザーが属するテナントを一覧上で確認することができます。

image

セキュリティルールの設定

次に、セキュリティルールの設定を行います。QMCのトップ画面から、「Security rules」を選択し、対象のセキュリティルールを修正します。(ここでは既存のセキュリティルールを直接変更していますが、実際の環境では既存のルールをDisableして新規ルールの作成を行うなどの対応を行ってください。)

image

「Stream」ルールの変更

「Stream」ルールを開き、以下の形に設定内容を変更して「Apply」をクリックして変更を適用します。ここではデフォルトの設定に「resource.owner.@tenant=user.@tenant」の条件を追加することで、ストリームに含まれるアプリの中からアプリの所有者とアクセスしているユーザーが同一テナントのもののみ利用可能とする設定としています。

プロパティ 設定内容
Advanced Conditions
(resource.resourcetype = "App" and resource.stream.HasPrivilege("read")) or ((resource.resourcetype = "App.Object" and resource.published ="true" and resource.objectType != "app_appscript" and resource.objectType != "loadmodel") and resource.app.stream.HasPrivilege("read")) and (resource.owner.@Tenant=user.@Tenant)

「ContentAdminQmcSections」ルールの変更

「ContentAdminQmcSections」ルールを開き、以下の形に設定内容を変更して「Apply」をクリックして変更を適用します。

プロパティ 設定内容
Resource filter License_*,TermsAcceptance_*,QmcSection_Stream,QmcSection_App,QmcSection_App.Object,
QmcSection_DataConnection,QmcSection_Tag,QmcSection_Task,QmcSection_Event,
QmcSection_SchemaEvent,QmcSection_CompositeEvent,QmcSection_ReloadTask,QmcSection_ContentLibrary

ここでは、ContentAdminロールのユーザーは自分が属するテナントの管理のみを行える権限のみを与えるために、デフォルト設定から以下をリソースフィルタを削除して他のテナントに影響を与える操作を行えるメニューをQMC上で操作できないようにしています。

  • QmcSection_User,QmcSection_CustomPropertyDefinition,QmcSection_Extension,QmcSection_UserSyncTask,QmcSection_Audit

「ContentAdmin」ルールの変更

「ContentAdmin」ルールを開き、以下の形に設定内容を変更して「Apply」をクリックして変更を適用します。ここでは、QMC上でアクセス可能なリソースを制限しています。

プロパティ 設定内容
Resource filter Stream_*,App*,ReloadTask_*,SchemaEvent_*,Tag_*,
DataConnection_*,CompositeEvent_*,ContentLibrary_*
Action read, update, delete,publish
Advanced Condition
((user.roles="ContentAdmin" and resource.owner.@Tenant=user.@Tenant) and (resource.resourcetype="App" or resource.resourcetype="DataConnection" or resource.resourcetype="ContentLibrary"))
or ((user.roles="ContentAdmin" and resource.app.owner.@Tenant=user.@Tenant) and (resource.resourcetype="Stream" or resource.resourcetype="ReloadTask" or resource.resourcetype="App.Object"))
or ((resource.resourcetype="SchemaEvent" or resource.resourcetype="CompositeEvent" or resource.resourcetype="Tag"))

ここでは、リソースの作成やオーナーの変更などの操作を行えないようにしているとともに、以下のリソースへのアクセスを削除しています。

  • UserSyncTask_*,User*,CustomProperty*,Extension_*

「ContentAdminCreate」ルールの新規作成

「ContentAdminCreate」ルールを新たに作成し、以下の形に設定内容を変更して「Apply」をクリックして変更を適用します。「ContentAdmin」ルールの変更によりタスクなどのリソースの作成が行えないようになっていますが、ここの設定でタスク作成は行えるようにします。

プロパティ 設定内容
Resource filter ReloadTask_*,SchemaEvent_*,CompositeEvent_*
Condition ((user.roles=”ContentAdmin”))
Action create

設定の確認

これまでの設定を行ってアプリを作成してストリームに公開すると、例えば以下の形で同じストリームを開いてもユーザーは自分が属するテナントのユーザーが作成したアプリのみしか参照できない形となり、それぞれテナント毎に独立した単位でアプリの運用を行うことができます。

image

同様に、テナントのContentAdminでQMCにログオンすると、自分が属するテナントのユーザーが作成したアプリや接続定義などのみが管理対象として参照することができます。

image

また、ここでご説明したテナントレベルでのアクセス制御の設定に加えて、アプリやストリームなどのレベルでセキュリティルールの設定を別途行ってより細かなアクセス制御を追加することもできます。

まとめ

以上、このエントリではQlik Senseのセキュリティルールを活用して、マルチテナントの運用を行うアプローチをご紹介しました。