権限管理について
投稿日 / 投稿者名
2021.05.06 / 三橋
はじめに
本レポートは、Things Cloud の権限管理についてより知っていただくためのレポートとして作成したものです。今後のリリースにより、一部画面や初期に用意されているロール群などが変更となる可能性があることをあらかじめご了承ください。なお、作成にあたり、以下バージョンを用いています。
- ver.10.6.6.32(backend/UI)
難易度 ★
所要時間
基本的な権限の管理について理解し、手順に従い「ユーザーごとにデバイスデータのアクセス制御を設定する」を実現するまでの所要時間。
- 約 30 分
概要
本レポートでは、Things Cloud における権限の管理についての解説を行います。
また、Things Cloud の権限管理機能をもちいて、ユーザーごとにアクセスできるデバイスデータを制御する方法を紹介します。
このレポートで、以下について説明します。
前提条件
- 管理アプリケーションの権限の管理について理解していること。
Things Cloud における権限の管理について
Things Cloud では、グローバルロールと呼ばれるロールの集合体をユーザーに割り当てることで、テナントのさまざまなデータへのアクセスを制御します。また、インベントリロールと呼ばれるロールの集合体をユーザーごとにデバイスグループに割り当てることで、ユーザーごとにデバイスデータへのアクセスを制御します。
グローバルロールはテナント内のすべてのデータを対象とし、インベントリロールはデバイスのグループを対象の限定としているため、グローバルロールが上位となります。(グローバルロール > インベントリロール の関係です。)
たとえば、グローバルロールで計測値へなんらかの権限を付与しているユーザーは、インベントリロールによってデバイスグループごとに計測値へのアクセスを制御することはできません。
この2つのロールは インベントリ、メジャーメント、オペレーションなど各データタイプ別に定義します。 インベントリはマスターデータであり、デバイスやアセットをはじめ、ダッシュボードなどさまざまなデータが格納されているため、グローバルロール、またはインベントリロールでインベントリになんらかの権限を付与しないと、ユーザーはこれらのオブジェクトにアクセスすることができません。
ただし、Things Cloudには所有者という概念があり、インベントリ内のオブジェクトにはすべて所有者(owner)が存在し、所有者は自身が保有する他のロールに関係なく常に所有するオブジェクトに関連付けられたデータを作成、更新、および削除することができます。
詳しくは、アクセス制御の権限と所有者
をご覧ください。
グローバルロールとは
アラームなどさまざまなタイプのデータへのアクセスを許可レベルごとに定義された権限をグループ化したもので、ユーザーに割り当てデータへのアクセスを制御します。
1ユーザーに複数のグローバルロールを割り当てることができます。
各ロールはさまざまなタイプのデータへの許可レベルをあらわします。
たとえば、ユーザーがテナント内のすべてのアラームを読み取れるようにする場合、アラームの読み取りロールを持つ必要があります。また、発生したアラームのクリアができるようにする場合、更新アクションを含むアラームの管理者ロールが必要となります。
あらかじめ定義されているグローバルロール(抜粋)
Things Cloud にはあらかじめ定義されているグローバルロールが用意されていますが、変更することはもちろん、用途に応じて組み合わせてユーザーに割り当てたり、独自のロールを新たに定義することができます。
グローバルロール |
説明 |
---|---|
admins | 運用するのに必要な権限が揃っていますが、テナント管理やシミュレータ操作など付与しないとできないこともあります。 |
devices | デバイス認証を行うと自動的にデバイスユーザーに割り当てられます。 デバイスユーザーのグローバルロールはデバイス管理アプリケーションのデバイス資格情報の管理で変更することができます。 |
cockpit user | コックピットアプリケーションにのみアクセスすることができます。 ロールを何も持たないためインベントリロールでデバイスグループへのアクセスを許可するなど、なんらかの追加のロールが必要となります。 |
business | 主にデバイスとデバイスデータを扱えますが、ユーザー管理などのテナントに関する操作はできません。 新規ユーザーにデフォルトで割り当てられます。 |
readers | ほぼすべてのデータを読み取れますが、変更することはできません。 |
グローバルロール | admins | devices | cockpit user | business | readers | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
読取 | 管理者 | 作成 | 更新 | 読取 | 管理者 | 作成 | 更新 | 読取 | 管理者 | 作成 | 更新 | 読取 | 管理者 | 作成 | 更新 | 読取 | 管理者 | 作成 | 更新 | |
アカウント | - | ■ | - | - | - | □ | - | - | - | □ | - | - | - | □ | - | - | - | □ | - | - |
アプリケーション管理 | ■ | ■ | - | - | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - | ■ | □ | - | - |
一括操作 | ■ | ■ | - | - | □ | □ | - | - | □ | □ | - | - | ■ | □ | - | - | ■ | □ | - | - |
CEP管理 | ■ | ■ | - | - | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - | ■ | □ | - | - |
データブローカー | ■ | ■ | - | - | □ | □ | - | - | □ | □ | - | - | ■ | □ | - | - | ■ | □ | - | - |
デバイス制御 | ■ | ■ | - | - | ■ | □ | - | - | □ | □ | - | - | ■ | ■ | - | - | ■ | □ | - | - |
アイデンティティ | ■ | ■ | - | - | ■ | ■ | - | - | □ | □ | - | - | ■ | ■ | - | - | ■ | □ | - | - |
オプション管理 | ■ | ■ | - | - | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - | ■ | □ | - | - |
データ保持ルール | ■ | ■ | - | - | □ | □ | - | - | □ | □ | - | - | ■ | □ | - | - | ■ | □ | - | - |
エクスポートスケジュール | - | ■ | - | - | - | □ | - | - | - | □ | - | - | - | □ | - | - | - | □ | - | - |
シミュレーター | - | □ | - | - | - | □ | - | - | - | □ | - | - | - | □ | - | - | - | □ | - | - |
グローバルスマートルール | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - |
Sms | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - | □ | □ | - | - |
テナント管理 | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ | □ |
テナント統計 | ■ | - | - | - | □ | - | - | - | □ | - | - | - | □ | - | - | - | ■ | - | - | - |
ユーザ管理 | ■ | ■ | ■ | - | □ | □ | □ | - | □ | □ | □ | - | □ | □ | □ | - | ■ | □ | □ | - |
自身のユーザ管理 | ■ | ■ | - | - | □ | □ | - | - | □ | □ | - | - | ■ | ■ | - | - | ■ | □ | - | - |
アラーム | ■ | ■ | - | - | ■ | □ | - | - | □ | □ | - | - | ■ | ■ | - | - | ■ | □ | - | - |
イベント | ■ | ■ | - | - | ■ | □ | - | - | □ | □ | - | - | ■ | ■ | - | - | ■ | □ | - | - |
インベントリ | ■ | ■ | □ | - | ■ | □ | ■ | - | □ | □ | □ | - | ■ | ■ | □ | - | ■ | □ | □ | - |
計測値 | ■ | ■ | - | - | ■ | □ | - | - | □ | □ | - | - | ■ | ■ | - | - | ■ | □ | - | - |
監視 | ■ | ■ | - | - | ■ | □ | - | - | □ | □ | - | - | ■ | ■ | - | - | ■ | □ | - | - |
インベントリロールとは
デバイスのグループに割り当てるロールで、ユーザーごとにインベントリロールをそれぞれのデバイスグループに割り当てることで、ユーザーのデバイスデータへのアクセスを制御します。
それぞれのデータのフラグメントタイプまで絞り込むことができます。
現在インベントリロール(inventoryRoles)のAPIは非公開のため、GUIからのみ操作が可能です。
コックピットのグループ以外の機能について
インベントリロールはデバイスグループに割り当てるロールであるため、コックピットのレポートやデータエクスプローラ機能に制限が発生します。
たとえば、下記のようにコックピットのみ利用できるユーザーのデバイスグループに全スコープのアクセスを制御するフルアクセスのインベントリロールを付与した場合のアクセスについて、この後どのように見えるか確認します。
レポート
インベントリロールをレポート機能のアクセス制御に利用することはできません。
レポートのエクスポートするオブジェクトに、アクセス可能なグループやグループ配下のデバイスを指定してもアクセス権限のエラーが表示されレポートを作成することはできません。すでに存在するレポートも表示されないため参照できません。
データエクスプローラ
データエクスプローラにアクセス許可のないグループのデバイスのデータポイントやアラーム/イベントがある場合は、アクセス権限のエラーが表示されます。(下の画像の緑色のデータポイントにアクセス許可がありません。)
APIリクエストにおけるロールの振る舞いについて
Things Cloudは接続するデバイスも、コックピットなどのアプリケーションもAPIで通信し、さまざまなデータにアクセスしています。その際にもそれぞれのロールはAPIにおけるアクセスを制御します。(一部例外あり)
-
たとえば、「アラーム」の読み取りロールはデータ上
ROLE_ALARM_READ
として保有しており、GET - アラームコレクションの取得の要求されるロールに指定されています。このロールを持たないユーザーがGETリクエストした際のレスポンスは403 Forbidden(このAPIにアクセスする権限がありません) となります。GET - アラームコレクションの取得
- 応答本体: AlarmCollection
- 要求されるロール:
ROLE_ALARM_READ
- リクエスト例: GET /alarm/alarms
*上記のロールなしユーザーに「アラーム」の管理者ロール
ROLE_ALARM_ADMIN
を付与し同じようにGETリクエストした場合も状況は変わりません。これは管理者ロールは作成、更新、削除のアクションを含みますが、読み取りのアクションは含まないためです。
上記の要求されるロールとは別にインベントリロールを用いてアクセスを制御することができます。
-
たとえば、とあるデバイスグループにすべてのアラームの読み取りを許可するインベントリロールを割り当てた場合、そのデバイスグループに所属するデバイスのアラームを取得することができます。
また、APIリソースへのアクションに対するロールを持たなくても、ソースオブジェクトの所有者である場合、所有オブジェクトに関連するデータの作成、更新、削除のアクセスが許可されます。
-
たとえば、POST - 新規アラームの作成の要求されるロールに
ソースオブジェクトの所有権
とある場合、データの発生源となるソースオブジェクト(デバイス)は、つまりはデバイスの所有者(owner)であるユーザーはロールに関わらずアラームを作成することができます。POST - 新規アラームの作成
- リクエスト本体: Alarm
- 応答本体: Alarm
- 要求されるロール: ROLE_ALARM_ADMIN または
ソースオブジェクトの所有権
- リクエスト例: POST /alarm/alarms
-
ただし、上記のGET - アラームコレクションの取得の要求されるロールに
ソースオブジェクトの所有権
がないため、たとえ所有者であってもアラームの取得はできません。
アプリケーションのアクセスについて
アプリケーションへのアクセスはグローバルロールで指定することができます。
「アプリケーション管理」ロールのいずれか、またはぞれぞれのアプリケーションへの個別のアクセス許可によって管理されています。
標準の3つのアプリケーション以外の登録済みの内蔵アプリケーションについてはアクセス許可の有無に関わらず機能としてご利用いただけます。
アプリケーション管理ロール | アプリケーションへのアクセス |
---|---|
あり | すべてアクセス可 |
なし | 登録済みアプリケーションにチェックのあるアプリケーションのみアクセス可 |
あらかじめ登録されているグローバルロールの許可アプリケーション(抜粋)
グローバルロール | アプリケーション管理ロール | 登録済みアプリケーション | アクセスできるアプリケーション |
---|---|---|---|
admins | 読み取り、管理 | なし | すべて |
devices | なし | なし | なし |
cockpit user | なし | コックピット | コックピット |
business | なし | デバイス管理, コックピット | デバイス管理, コックピット |
readers | 読み取り | なし | すべて |
上の表にあるように、アプリケーション管理ロールが付与されていないcockpit user
やbusiness
のユーザーは別途アクセス可能なアプリケーションを許可する必要があります。
コックピットなどの3つの内蔵アプリケーションをWeb SDKでカスタマイズした場合、登録済みアプリケーションからカスタムアプリケーションの扱いへと変更されます。
ユーザーのアプリケーションへのアクセス可否は、ユーザーの「アプリケーションへのアクセス」タブで確認することができます。「アプリケーション管理」ロールが付与されている場合は、ここでの変更はできません。
ユーザーごとにデバイスデータのアクセス制御を設定する
設定したいアクセス制御
アクセス管理イメージ
前提条件
- adminユーザー(管理者)、testuser1ユーザー(ユーザー①)、testuser2ユーザー(ユーザー②)の3名登録していること。
- グループ①、グループ②、グループ③の3つのデバイスのグループにそれぞれデバイスが登録していること。
- グローバルロール、およびインベントリロールは、初期設定から変更していないこと。
アクセス条件
- testuser1ユーザー(ユーザー①)はグループ①のデバイスグループのみアクセスすることができる。
- testuser2ユーザー(ユーザー②)はグループ②のデバイスグループのみアクセスすることができる。
- adminユーザー(管理者)はすべてのデバイスグループにアクセスすることができる。
実現手順
-
グローバルロールをユーザーに割り当てる。
- adminユーザー(管理者)に
admins
、testuser1ユーザー(ユーザー①)、testuser2ユーザー(ユーザー②)にcockpit user
のグローバルロールを割り当てる。
- adminユーザー(管理者)に
-
インベントリロールをユーザーのデバイスグループに割り当てる。
-
testuser1ユーザー(ユーザー①)のデバイスグループ①に
reader
のインベントリロールを割り当てる。 -
testuser2ユーザー(ユーザー②)のデバイスグループ②に
reader
のインベントリロールを割り当てる。
-
アクセス結果
ユーザー①
testuser1ユーザーでログインすると、グループ①のみ表示し、グループ①のダッシュボードにアクセスできる。
ユーザー②
testuser2ユーザーでログインすると、グループ②のみ表示し、グループ②のダッシュボードにアクセスできる。
管理者
adminユーザーでログインすると、すべてのグループが表示し、すべてのダッシュボードにアクセスできる。