
intdashは、2022年11月からプロジェクト別のアクセス権限管理機能の提供を開始しました。 これにより、ユーザーが他のユーザー・エッジ・計測を見る権限をコントロールできるようになっています。 手順を確認してみましょう。
こんにちは。ソリューションアーキテクトの伊勢です。
以前のintdashでは、1ドメイン内の全ユーザーがすべてのユーザー、エッジ、計測(以下、リソース)を参照できました。 企業や組織の利用シーンでは、部署やチーム間で見えるリソースを制限したいケースがあります。 その仕組みを提供するのがプロジェクト機能です。
今回はその紹介の前編です。 まだすべてのアプリケーションが対応できているわけではないため*1、どのような考え方で参照をコントロールするのかを中心に、画面を見ながら機能を確認していきます。

その前に
おことわり
これはあくまで"やってみた"記事です。
正式な手順はユーザーガイドやデベロッパーガイドをご参照ください。
ドメイン、ユーザー、エッジとは
ユーザーガイドによると以下のとおりです。
intdashサーバーを中心とする、1つのintdash使用環境をドメイン(またはintdashドメイン)と呼びます。 intdashサーバーに接続できるのは、そのドメインで発行されたアカウントを持つユーザーとエッジ(データを送受信するデバイス)のみです。

エッジは、デバイス1台を指します。
ユーザーは、intdashにアクセスする利用者です。1人のユーザーが複数のエッジを所有することができます。
ユーザーには権限としてロールを割り当てます。
他のユーザーを作成できる管理者にはadminロール、一般ユーザーにはmemberロールを割り当てます。
今までと何が変わったのか
プロジェクト機能が導入される前は、1ドメイン内の全ユーザーがそのドメインにあるすべてのリソースを参照できました。
最新のintdashでは、リソースを プロジェクト という単位で管理し、プロジェクトごとに、アクセス可能なユーザーやエッジを設定するこができます。これにより、他部署や他チームからリソースを参照/削除できないようにすることができます。

今までとの互換性
アクセス権を細かく管理する必要がない場合も、今までどおり利用できるように互換性を設けています。
それがGlobal Projectというデフォルトのプロジェクトです。
最新のintdashでは、ユーザー、エッジを作成すると自動的にGlobal Projectに登録されます。 これにより、Global Projectを通じて1ドメイン内のすべてのリソースを参照できるようになっています。 *2

確認ポイント
以下では、段階的にプロジェクトやユーザーの設定を行いながら、各ユーザーからのリソースの見え方を確認していきます。
- ユーザー・エッジの参照
- 計測の参照
- プロジェクト・サブグループへのメンバー追加
- ロールの追加
- 利用中の権限削除
- マルチテナントとの違い
確認用の構成
はじめに設定の全体構成を掲載しておきます。


プロジェクト機能の導入により、管理リソースは3階層に分かれることになりました。
- グローバルレベル:プロジェクトに関わらず共通
- ユーザー
- エッジ
- グループ
- プロジェクト
- グループレベル:複数のプロジェクトに共通
- メンバー割り当て
- プロジェクトレベル:1プロジェクトに固有
- メンバー割り当て
- エッジ割り当て
- 計測
確認
では上記のリソースを作成しながら、確認していきましょう。
ユーザー・エッジの作成
まずはユーザーとエッジを作成します。
ユーザとエッジの構成はこのようになります。

グループとプロジェクトはこうなります。

既存の管理者ユーザー(*3)をuser1として手順を始めます。
ユーザーガイド 9. (管理者向け)ユーザーとエッジを管理する - Admin Console にしたがい、memberロールを持つ一般ユーザuser2とuser3を作成します。

作成したユーザーをユーザー一覧で確認できます。

次にエッジを作成するため、user2でサインインしなおします。
ちなみにadminロールを持っていないuser2はAdmin Consoleを表示できません。

ユーザーガイド 4.4. エッジアカウントを作成する にしたがい、My Pageでエッジedge1とedge2を作成します。エッジの所有者はuser2になります。

user3でサインインしなおし、同じくedge3とedge4を作成します。エッジの所有者はuser3になります。
続いてuser1でサインインしなおし、所有者なしエッジを作成します。ユーザーガイド 9.9. エッジアカウントを作成する(管理者向け) にしたがい、Admin Consoleでエッジedge5を作成します。

作成したエッジをエッジ一覧で確認できます。

ユーザー・エッジの参照
まず、ユーザとエッジがGlobal Projectでどう見えるか確認します。
ユーザー・エッジの参照:Global Projectの場合
作成したユーザーのいずれかでProject Consoleを開くとProjectsにGlobal Projectのみが表示されています。

Global Projectを選択し、メニューのEdges、MembersでGlobal Projectの管理リソースを確認します。
さきほど作成したユーザーがGlobal Projectのメンバーとして自動的に割り当てられています。
メンバーにはユーザーのmemberロールが引き継がれています。

また、さきほど作成したすべてのエッジがGlobal Projectに自動的に割り当てられており、参照できます。

このように、Global Projectではすべてのユーザーからすべてのリソースを参照できました。
グループ・プロジェクトの作成
では、いよいよプロジェクトを作成していきましょう。
Global Projectとは別にプロジェクトを作成します。このような構成を作成します。

まずはuser1でサインインし、Admin Consoleでgroup1グループを作成します。

続けてgroup1の配下にproject1を作成します。

同じく、group1の配下にプロジェクトproject2を作成します。
Project Consoleでgroup1を選択するとProjectsでプロジェクトの一覧を確認できます。

なお、Admin Consoleのグループ一覧に表示されているGlobal Groupは、Global Projectが属する特別なグループです。削除や新たなプロジェクト作成、メンバー割り当てはできません。

ユーザー・エッジの割り当て
作成したグループとプロジェクトにユーザーとエッジを割り当てます。

user1でサインインし、Project Consoleでグループgroup1にuser2をメンバーとして追加します。
Admin Consoleでユーザーを作成したときのロールとは関係なく、プロジェクトごとにロールを付与できます。
今回はmemberロールを付与します。

続いて、エッジを割り当てます。
まずは、エッジの所有者として、エッジの割り当てを行ってみます。
user2でサインインし、所有エッジedge1をproject1に登録します。

次に、プロジェクトの管理者としてエッジの割り当てを行ってみます。所有者なしのエッジを登録するにはそのプロジェクトの admin ロールが必要なため、 user1 としてサインインし、所有者なしエッジ edge5 を登録します。

同じくproject2にもエッジを割り当てます。edge3はuser1としてサインインした状態で登録します。
ユーザー・エッジの参照:project1、project2の場合
では、ユーザーごとに参照できる範囲を確認します。
まず、user2が参照できる範囲です。
Project Consoleでuser2が所属するプロジェクトproject1でMembersを確認します。
所属するuser1とuser2を参照できます。所属しないuser3は表示されません。
なお、user2は上位グループgroup1のメンバーであるため、ロールが継承されてInherited Memberとして表示されます。プロジェクトを作成したuser1はOwnerと表示されます。

Edgesで先ほど登録したエッジedge1、edge5を確認できます。
次に、作成したプロジェクトに属していないuser3でも確認してみます。
Project ConsoleのProjectsを見ると、project1、project2が表示されておらず、プロジェクトのリソースを確認することができません。

割り当てられていないプロジェクトのURLに直接アクセスしても、リソースは表示されません。

以上の通り、プロジェクト機能により、プロジェクトに所属するユーザー・エッジがプロジェクト外から参照できないことを確認できました。
なお、当記事では比較のため、Global Projectにリソースを登録したままにしています。実際の運用ではGlobal Projectからユーザー・エッジの割り当てを削除してください。
計測
続いて、エッジによる計測の作成を確認してみます。
まずはGlobal Project向けにUpstreamします。
エッジをセットアップします。今回はMJPEGとStringを送信します。*4
edge1ではMJPEG、edge3とedge5ではStringをUpstreamします。
計測の参照:Global Projectの場合
まずはGlobal Projectでリアルタイム再生を確認します。
Agentで接続先のプロジェクトUUIDとしてGlobal Projectを指定します。
- intdash Edge Agent 2 では
intdash-agentctl configで、project_uuidとして00000000-0000-0000-0000-000000000000を指定します。 - intdash Edge Agent では設定ファイルの
project_uuidに空を設定します。 - Terminal Systemでは
接続先と認証でプロジェクトUUIDに空を設定します。

Upstreamを開始します。
user2でサインインしてGlobal ProjectでData Visualizerで確認します。すべてのUpstreamデータが確認できます。

計測の参照:project1の場合
続いて、各エッジの接続先をproject1に変更してUpstreamします。
AgentのプロジェクトUUID設定を変更します。


変更した設定でUpstreamを開始します。
なお、edge3はproject1に所属していないため、Agentを起動すると認証エラーとなります。

Project Consoleでproject1を選択し、さきほどと同じスクリーンを表示します。
project1に属するエッジedge1とedge5のUpstreamデータだけが表示されています。
edge3はproject1には所属していないため、パネルにエッジ名がNO EDGEで表示されます。

エッジの接続先プロジェクトを変更したため、Global ProjectのスクリーンにはUpstreamデータが表示されません。

同じく、Agentの接続先をproject2に変更してproject2のData Visualizerを確認するとedge1とedge3のUpstreamデータのみが表示されます。
edge5はAgent起動時に接続エラーとなります。


プロジェクト機能により、プロジェクト外のユーザーから計測を参照できないこと、プロジェクト外のエッジからプロジェクトに計測を作成できないことを確認できました。
ここまでで、ユーザー・エッジ・計測の参照制御というプロジェクト機能の基本的な効果が確認できました。
プロジェクト・サブグループへのメンバー追加
では、次に少し使い方をレベルアップしていきたいと思います。
ここまでは、プロジェクトのメンバーは、プロジェクトの上位のグループで設定されたロールを継承していました。 運用上は、細かい範囲に限ってメンバーやロールを追加したいケースがあります。
まずはメンバー追加について確認します。 プロジェクトに直接メンバーを追加する方法、上位グループの下にサブグループを作成してメンバーを追加する方法をご紹介します。
user1としてサインインした状態で、group2配下のグループ・プロジェクトを作成し、エッジを割り当てます。



新たに作成した2つのプロジェクトに2通りの方法でメンバーを追加します。

プロジェクトへのメンバー追加
まず、プロジェクトにメンバーを追加します。
user3 を project3 に追加します。(操作は user1 として行ってください。)

user3でサインインするとProject Consoleでproject3を参照できます。


サブグループへのメンバー追加
続いて、サブグループにメンバーを追加します。
user3 を group2-1 に追加します。(操作は user1 として行ってください。)

user3でサインインするとProject Consoleでsubgroup2-1、project4を参照できます。


ロールの追加
次に追加したメンバーにロールを追加してみます。
ロールの追加:プロジェクト
まずはプロジェクトに追加したメンバーにロールを追加します。
user3 に、 project3 における admin ロールを追加します。(操作はuser1 として行ってください。)


user3はproject3でメンバーを追加・削除できるようになったため、Project ConsoleのMembersにAdd Memberボタンが表示されます。

ロールの追加:サブグループ
続いて、サブグループに追加したメンバーにロールを追加します。
user3 に、 group2-1 における admin ロールを追加します。(操作は user1 として行ってください。)


user3はgroup2-1でメンバーを追加・削除できるようになったため、Add Memberボタンが表示されます。

ここまで説明してきた基本的な考え方を応用して、より複雑な権限制御も簡単に実現することができました。
利用中の権限削除
だいぶ長くなってきて読み手の方はお疲れだと思います。 実は書き手も疲れてきているのですが、もう少しだけおつきあいください。
運用中に権限を変更する上でどうしても気になる点を確認したいと思います。 intdashを利用中にユーザーやエッジの権限を削除するとどうなるのでしょうか。
データを送信中の edge1 と、それをリアルタイムにData Visualizerで見ている user2 を、プロジェクトから削除してみます。

Data Visualizerでリアルタイム再生します。

利用中の権限削除:画面表示中のユーザー
まず、Data Visualizerを見ているユーザーの削除です。
user1でgroup1からメンバーuser2を削除します。

ユーザーが削除されてもData Visualizerは問題なく表示され続けます。
利用にはすぐに影響が出ないようになっていますね。

利用中の権限削除:ストリーム中のエッジ
続いて、project1からエッジedge1を削除してみます。

削除したエッジのUpstreamデータが表示され続けます。
こちらも権限変更が作成中の計測に影響を与えないようになっています。

では、削除した権限はいつ反映されるのでしょうか。
ユーザーは次の画面アクセスです。
Data Visualizerの画面をリロードすると、メッセージが表示されてproject1にアクセスできなくなったことがわかります。

エッジは次の計測開始です。
Upstreamを一度停止し、再度開始すると認証エラーで接続できなくなったことがわかります。

いずれも新たな接続でアクセスが拒否されることがわかりました。
マルチテナントとの違い
プロジェクト機能と混同しやすい機能としてマルチテナントがあります。 最後にマルチテナントとの違いを説明します。
マルチテナントは複数ドメインを同時利用する場合に、インフラ・プラットフォームを共有して運用コストを低減するオプションです。 主に、intdashを使ったサービスの提供者が複数のお客様に環境を提供する場合を想定しています。 お客様ごとに環境を設けるよりも低コスト化されます。
なお、テナントの管理リソースはグローバルレベルにおいても完全に分離されており、他のテナントからは参照・変更できません。

一方、プロジェクト機能はここまで見てきたように、1ドメインの中での権限制御機能です。 グローバルレベルの管理リソースはプロジェクト間で共有されます。
また、マルチテナントのドメインでプロジェクト機能を利用する場合は、1テナントの中での権限を制御することになります。

まとめ
お疲れ様でした。これにて前半はおしまいです。
プロジェクト機能により、組織でintdashを利用するときの柔軟な権限制御ができるようになったことがわかりました。
マルチテナントもそうですが、プロジェクト機能はintdashをより大規模にご利用いただくことを想定して追加された機能です。 お客様のビジネスの発展・拡大に貢献すべく、aptpodのプロダクトは進化を繰り返していきます。
後編では、プロジェクト機能によるData Visualizer以外のアプリケーションの変更をご紹介したいと考えています。
*1:アプリケーションのEdge Finder、Meas Hub、Media Explorerは現時点でGlobal Projectの計測のみ対応しています。今後のアップデートで対応予定です。
*2:自動的にGlobal Projectに登録するかどうかはドメインの設定によって異なります。 この設定はサーバー側の構築・運用担当者によって変更が可能です。 設定の詳細については、現在ドキュメントを準備中です。公開までお待ちください。
*3:通常、システム管理者から利用者に提供されます。
*4:セットアップ手順は割愛します。intdash Edge Agent 2 デベロッパーガイド をご参照ください。