aptpod Tech Blog

株式会社アプトポッドのテクノロジーブログです

intdashのプロジェクト機能を使ってみた(前編)

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

Global Project

確認ポイント

以下では、段階的にプロジェクトやユーザーの設定を行いながら、各ユーザーからのリソースの見え方を確認していきます。

  • ユーザー・エッジの参照
  • 計測の参照
  • プロジェクト・サブグループへのメンバー追加
  • ロールの追加
  • 利用中の権限削除
  • マルチテナントとの違い

確認用の構成

はじめに設定の全体構成を掲載しておきます。

ユーザーとエッジ

グループとプロジェクト

プロジェクト機能の導入により、管理リソースは3階層に分かれることになりました。

  • グローバルレベル:プロジェクトに関わらず共通
    • ユーザー
    • エッジ
    • グループ
    • プロジェクト
  • グループレベル:複数のプロジェクトに共通
    • メンバー割り当て
  • プロジェクトレベル:1プロジェクトに固有
    • メンバー割り当て
    • エッジ割り当て
    • 計測

確認

では上記のリソースを作成しながら、確認していきましょう。

ユーザー・エッジの作成

まずはユーザーとエッジを作成します。

ユーザとエッジの構成はこのようになります。

ユーザーとエッジ

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

グループとプロジェクト(Global Project)

既存の管理者ユーザー(*3)をuser1として手順を始めます。

ユーザーガイド 9. (管理者向け)ユーザーとエッジを管理する - Admin Console にしたがい、memberロールを持つ一般ユーザuser2user3を作成します。

ユーザーの作成

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

ユーザー一覧

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

一般ユーザーのAdmin Console

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

エッジの作成(My Page)

user3でサインインしなおし、同じくedge3edge4を作成します。エッジの所有者はuser3になります。

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

エッジの作成(Admin Console)

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

エッジ一覧

ユーザー・エッジの参照

まず、ユーザとエッジがGlobal Projectでどう見えるか確認します。

ユーザー・エッジの参照:Global Projectの場合

作成したユーザーのいずれかでProject Consoleを開くとProjectsGlobal Projectのみが表示されています。

Project Console

Global Projectを選択し、メニューのEdges、MembersでGlobal Projectの管理リソースを確認します。

さきほど作成したユーザーがGlobal Projectのメンバーとして自動的に割り当てられています。 メンバーにはユーザーのmemberロールが引き継がれています。

Global ProjectのMembers

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

Global ProjectのEdges

このように、Global Projectではすべてのユーザーからすべてのリソースを参照できました。

グループ・プロジェクトの作成

では、いよいよプロジェクトを作成していきましょう。

Global Projectとは別にプロジェクトを作成します。このような構成を作成します。

グループとプロジェクトの作成

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

グループの作成

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

プロジェクトの作成

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

Projects

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

Global Group

ユーザー・エッジの割り当て

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

ユーザーとエッジの割り当て

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

group1のメンバー一覧

続いて、エッジを割り当てます。

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

エッジの割り当て

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

project1のEdges

同じくproject2にもエッジを割り当てます。edge3user1としてサインインした状態で登録します。

ユーザー・エッジの参照:project1、project2の場合

では、ユーザーごとに参照できる範囲を確認します。

まず、user2が参照できる範囲です。 Project Consoleでuser2が所属するプロジェクトproject1でMembersを確認します。 所属するuser1user2を参照できます。所属しないuser3は表示されません。 なお、user2は上位グループgroup1のメンバーであるため、ロールが継承されてInherited Memberとして表示されます。プロジェクトを作成したuser1Ownerと表示されます。

project1のMembers

Edgesで先ほど登録したエッジedge1edge5を確認できます。

次に、作成したプロジェクトに属していないuser3でも確認してみます。 Project ConsoleのProjectsを見ると、project1project2が表示されておらず、プロジェクトのリソースを確認することができません。

割り当てられてないとプロジェクトは見えない

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

URL直指定(自分が割り当てられていないプロジェクト)

以上の通り、プロジェクト機能により、プロジェクトに所属するユーザー・エッジがプロジェクト外から参照できないことを確認できました。

なお、当記事では比較のため、Global Projectにリソースを登録したままにしています。実際の運用ではGlobal Projectからユーザー・エッジの割り当てを削除してください。

計測

続いて、エッジによる計測の作成を確認してみます。

まずはGlobal Project向けにUpstreamします。

エッジをセットアップします。今回はMJPEGとStringを送信します。*4

edge1ではMJPEG、edge3edge5では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に空を設定します。

intdash Edge Agent 2での接続先プロジェクトの指定(Global Project)

Upstreamを開始します。

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

Data Visualizer(Global Project)

計測の参照:project1の場合

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

プロジェクトUUIDの取得

intdash Edge Agent 2での接続先プロジェクトの指定(project1)

変更した設定でUpstreamを開始します。

なお、edge3project1に所属していないため、Agentを起動すると認証エラーとなります。

プロジェクトに所属していないエッジは認証エラー

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

Data Visualizer(project1)

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

Data Visualizer(Global Project)(データはproject1に送信されているためGlobal Projectでは参照できない)

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

Data Visualizer(project2)

Data Visualizer(project1)(データはproject2に送信されているためproject1では参照できない)

プロジェクト機能により、プロジェクト外のユーザーから計測を参照できないこと、プロジェクト外のエッジからプロジェクトに計測を作成できないことを確認できました。

ここまでで、ユーザー・エッジ・計測の参照制御というプロジェクト機能の基本的な効果が確認できました。

プロジェクト・サブグループへのメンバー追加

では、次に少し使い方をレベルアップしていきたいと思います。

ここまでは、プロジェクトのメンバーは、プロジェクトの上位のグループで設定されたロールを継承していました。 運用上は、細かい範囲に限ってメンバーやロールを追加したいケースがあります。

まずはメンバー追加について確認します。 プロジェクトに直接メンバーを追加する方法、上位グループの下にサブグループを作成してメンバーを追加する方法をご紹介します。

user1としてサインインした状態で、group2配下のグループ・プロジェクトを作成し、エッジを割り当てます。

プロジェクト・サブグループへのメンバ追加準備

サブグループの作成

Subgroups

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

プロジェクト・サブグループへのメンバー追加

プロジェクトへのメンバー追加

まず、プロジェクトにメンバーを追加します。

user3project3 に追加します。(操作は user1 として行ってください。)

プロジェクトへのメンバー追加

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

プロジェクトに追加されたメンバー

プロジェクトに追加されたメンバーから見えるエッジ

サブグループへのメンバー追加

続いて、サブグループにメンバーを追加します。

user3group2-1 に追加します。(操作は user1 として行ってください。)

サブグループへのメンバー追加

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

サブグループに追加されたメンバー

サブグループに追加されたメンバーから見えるエッジ

ロールの追加

次に追加したメンバーにロールを追加してみます。

ロールの追加:プロジェクト

まずはプロジェクトに追加したメンバーにロールを追加します。

user3 に、 project3 における admin ロールを追加します。(操作はuser1 として行ってください。)

プロジェクトでのロール追加

プロジェクトでadminロール追加

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

user3は、このプロジェクトにおいてadminロールを追加された

ロールの追加:サブグループ

続いて、サブグループに追加したメンバーにロールを追加します。

user3 に、 group2-1 における admin ロールを追加します。(操作は user1 として行ってください。)

サブグループでのロール追加

サブグループでadminロール追加

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

user3は、このサブグループにおいてadminロールを追加された

ここまで説明してきた基本的な考え方を応用して、より複雑な権限制御も簡単に実現することができました。

利用中の権限削除

だいぶ長くなってきて読み手の方はお疲れだと思います。 実は書き手も疲れてきているのですが、もう少しだけおつきあいください。

運用中に権限を変更する上でどうしても気になる点を確認したいと思います。 intdashを利用中にユーザーやエッジの権限を削除するとどうなるのでしょうか。

データを送信中の edge1 と、それをリアルタイムにData Visualizerで見ている user2 を、プロジェクトから削除してみます。

利用中のユーザー・エッジの割り当て削除

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

再びproject1のData Visualizer

利用中の権限削除:画面表示中のユーザー

まず、Data Visualizerを見ているユーザーの削除です。

user1group1からメンバーuser2を削除します。

adminとしてuser2をグループから削除

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

削除されたユーザーで参照を継続

利用中の権限削除:ストリーム中のエッジ

続いて、project1からエッジedge1を削除してみます。

エッジも削除

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

削除されたエッジの参照を継続

では、削除した権限はいつ反映されるのでしょうか。

ユーザーは次の画面アクセスです。

Data Visualizerの画面をリロードすると、メッセージが表示されてproject1にアクセスできなくなったことがわかります。

403 Forbidden

エッジは次の計測開始です。

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

"Unauthorized"

いずれも新たな接続でアクセスが拒否されることがわかりました。

マルチテナントとの違い

プロジェクト機能と混同しやすい機能としてマルチテナントがあります。 最後にマルチテナントとの違いを説明します。

マルチテナントは複数ドメインを同時利用する場合に、インフラ・プラットフォームを共有して運用コストを低減するオプションです。 主に、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 デベロッパーガイド をご参照ください。