ThingsBoard / 権限管理
Overview
ThingsBoardの権限管理について記載します。大きく以下2つについて述べます。
- 社内/プロジェクト内のユーザの権限管理
- 顧客の権限管理
ThingsBoard Cloudはそれ自体がマルチテナント構成をとっており、ThingsBoardの複数の顧客(テナント)がひとつのサービスに相乗りしているような構成になっていますが、ひとつのテナントの中で複数の顧客を管理できるようになっています。以下図のイメージです。
「社内/プロジェクト内のユーザの権限管理」で基本的な権限設定について記載し、それを踏まえて「顧客の権限管理」に移れればと思います。
ThingsBoard Cloud
│
├── テナント A
│ │
│ ├── 顧客 A-1
│ ├── 顧客 A-2
│ ├── 顧客 A-3
│ └── ...
│
├── テナント B
│ │
│ ├── 顧客 B-1
│ ├── 顧客 B-2
│ └── ...
│
└── ...
この図でいうと、「社内/プロジェクト内のユーザ」は「テナント」に直接紐づくユーザ、「顧客」は「顧客」に直接紐づくユーザとして整理しています。
社内/プロジェクト内のユーザの権限管理
テナントへのユーザの招待
まずはテナントへのユーザの招待です(顧客の招待は別画面になりますのでご注意ください)。「Users」タブから右上の「+」ボタンでInviteできます。Inviteするユーザのメールアドレスなど求められるので適宜入力します。本記事の流れ上、「Groups」はここでは設定しません。
問題なければ以下図のように新規ユーザが追加されます。「Groups」には何も表示されていません。
権限設定
続いて権限設定を行います。ThingsBoardではユーザに直接権限を付与することはできません。
ここでいったん用語の整理です。
- Permission: 最も細かい権限の粒度(DeviceのRead権限、Dashboardの作成権限など)
- Role: Permissionの組み合わせ
- Entity: ユーザ、デバイス、ダッシュボードなど、ThingsBoardにおけるオブジェクトの単位
- Group: Entityの集合。ThingsBoardではあらゆるEntityにGroupを作成できます。EntityとGroupはN:Nで設定可です。
権限設定の構造としては以下のようになります。
- PermissionがRoleに紐づく
- RoleがユーザGroupに紐づく
- ユーザがユーザGroupに紐づく
+-------------+ +---------+ +------------+ +------------+
| Permission | ---> | Role | ---> | User Group | ---> | User Entity|
+-------------+ +---------+ +------------+ +------------+
(Device Read) (Admin) (Developers) (User A)
(Dashboard Create) (Viewer) (Operators) (User B)
(... other ...) (... other ...) (... other ...) (... other ...)
ひとつずつどこで設定するか見ていきます。
Roleを作成する
メニューの「Security > Roles」で作成済みのRoleの確認と作成ができます。
DeviceのRead権限のみをもつRoleを作成するとしたらこんな感じです。
「Add」でRoleの作成が完了します。
Permissionの種類などはこちらの公式ドキュメント に書いてあります。
ユーザGroupを作成し、ユーザを紐づける
続いてユーザGroupの作成と、ユーザのGroupへの紐付けです。
ユーザGroupの作成はユーザのInviteのメニューと同じ画面です。上部の「Groups」をクリックするとユーザGroupの一覧の確認と作成ができます。「Tenant Administrators」と「Tenant Users」の2つがデフォルトで作成されているはずです。
「+」ボタンで作成画面を開いたらGroup名だけ入力して「Add」ボタンでユーザGroupが作成されます。
ユーザにユーザGroupを紐づけるには、対象のユーザを選び、「Manage owner and groups」をクリック、その後Groupsに紐づけたいものを選択すれば完了です。
ユーザGroupにRoleを紐づける
最後の工程です。ユーザGroupを選択し、「Roles」タブを開きます。「+」ボタンで設定画面を開き、紐づけたいRoleを選択したら完了です。
以上で、ユーザに権限を紐づけることができました。
顧客の権限管理
顧客のEntityの管理
まずThingsBoardがどのように顧客を管理するのか、その概観を眺めます。あらかじめ「CustomerA」と「CustomerB」という2顧客を作成しておきました。その上で、メニューの「Customers」を開き、上部の「Hierarchy」をクリックすると以下のような画面が表示されます。
ツリーを確認すると「All」配下に「CustomerA」と「CustomerB」が並び、さらにその配下にUser,
Device, DashboardなどのEntity Groupが並びます。このツリーが示す通りですが、顧客ごとにEntityのGroupを作成し、そこにEntityを入れておくことで、顧客管理をするわけです。
権限設定
このツリーの構造を把握しておけば、設定は難しくありません。「CustomerA」にユーザを作成し、「CustomerAのDevice」は閲覧できるが、「CustomerBのDevice」は閲覧できないように権限設定します。
Customerの作成
メニューからCustomerにアクセスし、「+」ボタンでCustomerを作成します。いろいろ入力できるボックスがありますが、Title = 顧客名だけ入力すれば作成できます。
CustomerAのユーザの作成
「CustomerA > Customer Users(Customer Administratorsでも可)」を選択し、「+」ボタンからユーザを作成します。Customer User/Administratorsはデフォルトで用意されているUser Entityで、それぞれ弱めの権限/強めの権限が付与されています。
新規にユーザGroupを作ってカスタマイズしたRoleを紐付けたい場合の手順は、前回記事と同様です。CustomerA > User Groupsに新規にGroupを作成し、Roleを紐づけます。
Deviceの作成
CustomerAとCustomerBにそれぞれDeviceをひとつずつ作成します。
CustomerA/B > Device Groupsで「+」ボタンからDeviceを作成します。
確認!
CustomerAのユーザでThingsBoardにログインしてみます。
Entities > Devicesにアクセスすると、CustomerA配下に作成したDeviceのみが見えている状態になるはずです。そうなっていればうまく権限設定ができていることになります。
まとめ
Permission -> Role -> User Group -> Userの構造と顧客管理のツリーさえ把握すれば設定自体は難しくと思います。(英語力に乏しいせいか、この構造と手順に辿り着くまでにけっこう時間がかかりました)
Discussion