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 デベロッパーガイド をご参照ください。