セキュリティ ルールの例: ある顧客のケース
以下の例は、セキュリティ ルールに関する顧客のニーズに合わせて柔軟なソリューションが開発された顧客のケースを示しています。
ユーザー ディレクトリ構造
顧客は次のユーザー ディレクトリ構造を持っており、それを再利用する必要がありました。
プロジェクト
ロール | アクセス | コンテンツ |
---|---|---|
開発者 | フォルダの接続 | Excel ファイル |
管理者 | QMCアクセス | アプリ、アプリ オブジェクト、タスク |
オーディエンス 1 | ストリーム | ダッシュボード 1、ダッシュボード 2、ダッシュボード 3 |
オーディエンス 2 | ストリーム | ダッシュボード 4、ダッシュボード 5、ダッシュボード 6 |
この構造は顧客のQlik Sense展開において複数のプロジェクトを持ち、その展開が複数のロールで構成されていることを示しています。
- 開発者: フォルダ接続を使って、このプロジェクトのための資料を作成することを許可されている。
- 管理者: プロジェクトのリソース管理を許可されているスーパー ユーザーの一種。
- オーディエンス: 各オーディエンスに関連付けられたストリームを通じてダッシュボードの定義済みセットの使用を許可されているユーザー
セキュリティ ロールとプロジェクト グループの追加
次のテーブルでは元のユーザー ディレクトリ構造を再利用します。ただし 2 つの新しいプロパティとして、セキュリティ ロールとプロジェクト グループを追加します。
プロジェクト (proj_X)
ロール (セキュリティ ロール) | プロジェクト (プロジェクト グループ) | コンテンツ |
---|---|---|
開発者 (role_dev) | DC_ProjectX (projX_dev) | Excel ファイル |
管理者 (role_admin) | QMCアクセス (projX_admin) | アプリ、アプリ オブジェクト、タスク |
オーディエンス 1 (role_ext) (ロールなし=読み取りアクセス) |
Proj1_Aud1 (projX_aud1) | ダッシュボード 1、ダッシュボード 2、ダッシュボード 3 |
オーディエンス 2 (role_ext) (ロールなし=読み取りアクセス) |
Proj1_Aud2 (projX_aud2) | ダッシュボード 4、ダッシュボード 5、ダッシュボード 6 |
新しいプロパティはさまざまなグループを定義するために使用されます。
- セキュリティ ロール: ユーザーが実行できる操作 (アプリの作成、シートの追加、データのエクスポートなど) を定義します。
- プロジェクト グループ: ユーザーがアクセスを許可されるプロジェクトとプロジェクト リソースを決定します。
新しいプロパティの実装
プロパティ グループは、プロジェクトとリソースへのアクセス権を付与するカスタム プロパティを使用して実装されます。セキュリティ ロールはユーザー ディレクトリで実装されます。
このアプローチには、以下のような多くのメリットがあります。
- セキュリティ ポリシーを記述するのに必要なルールの数が減ります。
- ルールを徐々に変更できます。システムは属性を通じて構成され、ルールの変更が求められるのは、セキュリティの変更が必要なときです。
- ユーザー管理とアクセス許可のプロビジョニングがユーザー ディレクトリで管理されます。
作成する必要のあるルール
リソースのアクセスには 1 つのルールが必要です。
設定 | 値 |
---|---|
名前 | ResourceAccess |
リソース フィルター |
Stream_*, DataConnection_* |
条件 | ((user.group=resource.@GroupAccess)) |
アクション | Read |
このルールは、リソースのカスタム プロパティのGroupAccessにユーザーのグループ名が含まれている場合、そのユーザーにリソースへのアクセス権を付与します。これを有効にするには、すべてのユーザー グループを含んだ「GroupAccess」という名前のカスタム プロパティが必要です。
このルールはストリームとデータ接続に関連付けることができます。このルールによって、カスタム プロパティを使用して、グループのユーザーにストリームへのアクセス権を付与することが可能となります。
この例では、proj1_aud1グループが、Proj1_Aud1ストリームへのユーザー ディレクトリ アクセスに追加されました。他のグループでもアクセス許可が必要な場合、そのグループをカスタム プロパティに追加できます。
次のルールを作成して、ストリームを管理できる必要のある人を定義します。
設定 | 値 |
---|---|
名前 | TeamAdminRead |
リソース フィルター | Stream*,App*,ReloadTask*,SchemaEvent*,Tag*,CompositeEvent*,ExecutionResult*,CustomProperty*,DataConnection* |
条件 | ( (resource.resourcetype="App" and user.group = resource.stream.@AdminGroup) or (resource.resourcetype="App.Object" and user.group = resource.app.stream.@AdminGroup) or (resource.resourcetype="ReloadTask" and resource.app.stream.@AdminGroup = user.group) or (resource.resourcetype="DataConnection" and resource.@AdminGroup = user.group) or resource.resourcetype ="SchemaEvent" or resource.resourcetype ="CompositeEvent" or resource.resourcetype = "Tag" or resource.resourcetype ="ExecutionResult" ) |
アクション | Read, Update |
ルールの説明: ストリームの管理グループに属しているユーザーは、そのストリームで公開されたアプリに関連するリソースを管理できます。
これを有効にするには、プロジェクトの管理者が含まれているグループの名前を含んだカスタム プロパティAdminGroupを作成する必要があります。
この例のproj1_adminグループのユーザーには、このストリームのアプリに関連するリソースへの管理アクセス権限があります。
作成する必要のあるセキュリティ ロール
3 種類のセキュリティ ロールが定義されました。
- role_admin: 管理タスクを行える必要のあるユーザー
- role_dev: プロジェクトの開発作業を行える必要のあるユーザー
- role_ext: アプリを拡張できる必要のあるユーザー
管理者ロールには 2 つのルールが必要です。次の例では、role_adminグループのユーザーにQMCのセクションへのアクセス権を付与します。
設定 | 値 |
---|---|
名前 | TeamAdminSections |
リソース フィルター | QmcSection_App,QmcSection_DataConnection,QmcSection_ContentLibrary,QmcSection_App.Object,QmcSection_Task, QmcSection_ReloadTask, QmcSection_Event, QmcSection_SchemaEvent, QmcSection_CompositeEvent |
条件 | ((user.group="role_admin")) |
アクション | Read |
次の例では、role_adminのユーザーに、アプリ、リロード タスク、データ接続などを作成する権限を付与します。
設定 | 値 |
---|---|
名前 | TeamAdminCreate |
リソース フィルター | App*,ReloadTask*,SchemaEvent*,CompositeEvent*,ExecutionResult*,DataConnection* |
条件 | ((user.group="role_admin")) |
アクション | Create |
role_extルールは既定のルールを微調整して作成されます。role_extグループのユーザーだけが新しいシートを使ってアプリを拡張できます。柔軟性を高めるため、新しいカスタム プロパティ (Extendable) がアプリに追加されます。Extendable がオンにされたアプリはすべてのユーザーにそのアプリへのシートの追加を許可します。
設定 | 値 |
---|---|
名前 | CreateAppObjectsPublishedApp |
リソース フィルター | QmcSection_App,QmcSection_DataConnection,QmcSection_ContentLibrary,QmcSection_App.Object,QmcSection_Task, QmcSection_ReloadTask, QmcSection_Event, QmcSection_SchemaEvent, QmcSection_CompositeEvent |
条件 | !resource.App.stream.Empty() and resource.App.HasPrivilege("read") and (resource.objectType = "userstate" or resource.objectType = "sheet" or resource.objectType = "story" or resource.objectType = "bookmark" or resource.objectType = "snapshot" or resource.objectType = "embeddedsnapshot" or resource.objectType = "hiddenbookmark") and !user.IsAnonymous() and (user.group="role_dev" or user.group="role_ext" or resource.app.@Extendable="Yes") |
アクション | Create |
最後は、開発者のために、もう 1 つのルールを微調整して、role_devグループの開発者だけがアプリの作成を許可されるようにします。
設定 | 値 |
---|---|
名前 | CreateApp |
リソース フィルター | App_* |
条件 | !user.IsAnonymous() and user.group="role_dev" |
アクション | Create |
概要
この設定を使い、ユーザー ディレクトリのグループを通じてQlik Senseを管理できます。また、Qlik Senseにコンテンツを追加するときに、属性の使用のみでアクセスできる必要のあるグループを定義できます。