ネームスペース
EMQX 5.9.0以降、ネームスペース機能により、ユーザーはMQTTクライアントを論理的にグループ化し、単一のEMQXクラスター内でトラフィック制限を適用できるようになりました。この機能は、複数のクライアントグループ(事業部門、アプリケーション、顧客など)が同じインフラを共有しつつ、論理的に分離されたスケーラブルなデプロイメントを実現します。
注意
この機能はEMQX 5.9ではネームスペースと呼ばれていますが、マルチテナンシー設計原則に基づいています。
EMQX 6.1以降、ネームスペース関連機能は元の意味を変えずに強化されました。これにより、マルチテナントの分離設定が簡素化され、トピック分離の挙動が統一されました。
ネームスペースとは
EMQX Enterpriseにおけるネームスペースは、MQTTクライアントの論理的分離およびリソース管理のための仕組みです。異なる事業やテナントのクライアントを、共有されたEMQXクラスター内の別々のネームスペースに分割し、接続、メッセージ、クォータなどの分離を実現します。
ネームスペースは、tns(テナントネームスペース)という特別なクライアント属性で識別されます。この属性は自動的に作成されるものではなく、ユーザー名やServer Name Indication(SNI)などのクライアント接続メタデータから設定によって導出されます。
ネームスペースは、ダッシュボードやREST APIで明示的に作成された場合でも、定義されたルールに基づいてクライアント接続時に自動的に作成された場合でも、有効になります。
典型的なユースケース:企業内で複数の事業部門がクラスターを共有する場合、テナントレベルのリソース分離管理、集中アクセス制御など。
ネームスペースで実現できること
クライアントとメッセージの論理的分離
ネームスペースにより、異なるテナント間でクライアントIDやトピック空間を論理的に分離できます。
注意
ネームスペースを有効にしても、クライアントIDの上書きやトピックプレフィックスは自動的には適用されません。これらは手動で設定する必要があります。詳細は分離メカニズムをご参照ください。
テナントレベルのクォータと接続制御
各ネームスペースごとに同時接続数やメッセージパブリッシュレートの制限を設定でき、公平な利用とシステムの安定性を確保します。
強化されたログおよび運用可視化
ログには自動的にネームスペース識別子(
tns)が含まれ、クライアントの活動追跡や問題検出、テナント単位の診断が容易になります。ネームスペースベースのリソース監視
ネームスペースは、テナントごとの接続数やメッセージスループットなどのメトリクス収集の境界を明確にし、キャパシティプランニングや運用インサイトに役立ちます。
管理ユーザーの分離
EMQX 6.0以降、ネームスペースはダッシュボード、CLI、APIユーザーにもネームスペース付きロールを通じて拡張されています。
信頼されたデプロイメントのみ
管理ネームスペースは、組織内のチームや事業部門を分離し、設定の誤変更リスクを減らすための信頼された内部デプロイメント向けです。強力な分離保証を提供せず、公開または信頼できないマルチテナント環境のセキュリティ境界としては適しません。
委任管理者にネームスペーススコープのリソース管理を許可する場合は、管理ネームスペースの運用セキュリティを参照してください。
- 管理ユーザーは特定のネームスペースに制限されたロール(例:
ns:team_a::administrator)で作成可能です。 - ネームスペース付きユーザーは割り当てられたネームスペース内のリソースのみを閲覧・操作できます。
- ネームスペース非対応のクラスター全体設定は閲覧可能ですが読み取り専用で、グローバル管理者のみ変更可能です。
- これにより、データ分離とともにテナント固有の安全な管理アクセスが保証されます。
- 管理ユーザーは特定のネームスペースに制限されたロール(例:
マルチテナント管理
システム管理者は同一クラスター内で複数のネームスペースを管理でき、各テナントは分離されたリソースとユーザー権限の自己完結型環境で運用可能です。
管理ネームスペースの運用セキュリティ
委任されたネームスペース管理者は、コネクター、ブリッジ、アクションなどのアウトバウンドターゲットを設定できます。追加の制御がないと、内部や機密ネットワークへの意図しないアクセスを許す可能性があります。
利用可能な場合はrule_engine.ssrfを有効にして、ルールエンジン管理のアウトバウンドターゲットを検証してください。さらに、デプロイメントでランタイムのネットワーク制御が必要な場合は、EMQXホストで以下のイグレス制御を追加します。
- IdP、Webhook、コネクターバックエンドなど承認済み宛先へのアウトバウンドアクセスのみ許可。
- インスタンスメタデータサービス、ループバックアドレス、リンクローカルアドレス、内部管理ネットワークへのアクセスは明示的に必要な場合を除き拒否。典型的なメタデータエンドポイント例は
100.100.100.200、169.254.169.253、169.254.169.254、fd00:ec2::254。 - 新しい統合や管理機能でアウトバウンドHTTP/TCP接続を開始する際は、ファイアウォールルールを必ず見直してください。
詳細はルールエンジンポリシーとファイアウォールルールによるSSRF緩和を参照してください。
分離メカニズム
EMQXは非常に柔軟で、ネームスペース導入以前から複数の分離メカニズムをサポートしています。
ネームスペースは統一されたテナント識別子(client_attrs.tns)を提供し、クライアントID、トピックマウントポイント、関連設定を一貫したテナントコンテキストに基づいて整理可能にします。
しかし、分離ポリシーはビジネス要件に応じて明示的に設定する必要があります。ネームスペースを有効にしても、EMQXはクライアントIDやトピックの分離を自動的には有効化しません。
クライアントIDの上書き
信頼できないマルチテナント環境では必須
異なるネームスペースのクライアントが相互に信頼されていない場合(例:各ネームスペースが外部顧客や別組織を表す場合)、mqtt.clientid_overrideの設定が必須です。設定しないと、あるネームスペースのクライアントが他テナントのクライアントIDを再利用し、接続を切断したり、永続セッションを乗っ取ったり、サービス拒否を引き起こす可能性があります。認証はこれを防げません。セッションの乗っ取りはACL適用前の接続レイヤーで発生します。
マウントポイントを使ったトピック分離と組み合わせて、トピックレベルのアクセスもネームスペース境界を越えられないようにしてください。
異なるネームスペースのクライアントが同じクライアントIDを使えるように、クライアントID上書きルールを設定できます。例:
mqtt.clientid_override = "concat([client_attrs.tns, '-', clientid])"このルールはクライアントIDにネームスペースをプレフィックスとして付加し、衝突を回避します。
マウントポイントを使ったトピック分離
異なるネームスペースのクライアントが同じトピック名をパブリッシュ/サブスクライブしつつ互いに干渉しないよう、マウントポイントでトピックにネームスペースを自動プレフィックスできます。
EMQX 6.0以前では、マウントポイントは通常リスナー単位で設定されていました。例:
listener.{TYPE}.{NAME}.mountpoint = "${client_attrs.tns}/"複数リスナー環境では設定の繰り返しが必要でした。
EMQX 6.1以降は、ネームスペースを統一的なトピックマウントポイントとして利用可能です。ネームスペースが特定されると、EMQXは内部的に{namespace}/をトピックプレフィックスとして適用し、リスナーごとの設定なしに同等の分離効果を実現します。
後方互換性維持のため、デフォルトでは認可(ACL)チェックはマウントポイントプレフィックスを含みません。
EMQX 6.1以降、以下を設定するとこの挙動を有効化できます。
authorization.include_mountpoint = trueこれにより認可バックエンドはマウントポイント付きトピックを受け取れます。
マルチテナンシー対応状況
ネームスペースはEMQXマルチテナンシーの中核です。EMQX 5.9で導入され、6.1で強化され、複数サブシステムにわたるテナント分離をサポートしています。現在の対応状況は以下の通りです。
管理プレーンとMQTTネームスペースの統一(6.0)
ダッシュボード、CLI、APIの管理プレーンとMQTTデータプレーンが同一のネームスペースモデルを共有。
組み込みデータベース認証の分離(6.1)
組み込みデータベースに格納された認証データをネームスペース単位で分離可能。
組み込みデータベース認可の分離(6.1)
認可ルールを特定ネームスペースにスコープ可能。
Prometheusメトリクスの分離(6.1)
ネームスペースごとにメトリクスを公開・集約し、マルチテナント環境での可観測性を向上。
保持メッセージクォータの分離
ネームスペースごとに保持メッセージ関連のリソース使用を制限可能。
さらに、EMQX 6.0以降、ルール、アクション、ソース、コネクターのネームスペース分離が完全実装され、今後のロードマップからは外れています。
次のステップ
ネームスペースの概要と実現可能なことを理解したら、EMQXでの利用を開始するために以下を参照してください。
- ネームスペースの作成:ダッシュボードやREST APIで明示的に、またはクライアントメタデータに基づき自動的にネームスペースを作成する方法。
- ネームスペースの設定と管理:ダッシュボードやREST APIを使ったレート制限やセッションクォータの設定。
- ネームスペースのグローバル設定:クラスター全体のネームスペース動作、解決、分離メカニズム、トピックマウントポイント、認可処理の設定。
- クイックスタート:ネームスペース体験:MQTTXを使ったネームスペースベースのクライアント・トピック分離のハンズオンガイド。