web-dev-qa-db-ja.com

マルチテナントマイクロサービスアーキテクチャで、各テナントのアカウントIDを格納するのは誰ですか?

私はマルチテナントシステムとマイクロサービスについていくつかの調査を行ってきましたが、これに少し混乱しています。

各マイクロサービスに独自のデータベースがあり、APIにマルチテナンシーのサポートを実装している場合、どのサービスがどのアカウントIDをどの顧客にマップするかをマイクロサービスに通知する責任がありますか?

アカウントIDの単一の信頼できる情報源はありますか?新しい顧客が追加された場合、この情報はどのようにすべてのさまざまなマイクロサービスに伝播されますか?

最初は、おそらくマイクロサービスはこれをまったく意識する必要がないと思っていました。彼らはアカウントIDを受け入れて、それがどの顧客から来たかを気にせずにデータを保存するだけです。しかし、これらのサービスに送信される重複した/間違った/更新されたアカウントIDの問題をどのように回避しますか?これは大きなセキュリティおよび規制上のリスクのように思われませんか?

これは、単一のデータベース設計では問題になりません。アカウントIDは、それを参照するすべてのテーブルで制約されており、管理が容易だからです。

2
Igneous01

しかし、これらのサービスに送信される重複した/間違った/更新されたアカウントIDの問題をどのように回避しますか?

あなたが提起している懸念は 安全でない直接オブジェクト参照 として知られているものに関するものだと思います。クライアントが必要なアカウントIDを送信でき、サービスが認証しない場合、この脆弱性にさらされることになります。

2つの解決策があります。

  1. IDを認証します。つまり、クライアントの認証コンテキストに対してIDを検証します。これは、トランザクションごとに行う必要があります。

  2. IDをインターネットに公開しないでください。代わりに、ユーザーが認証するときにIDを取得し、セッションまたは暗号化されたCookieに(たとえば、暗号化または署名された認証トークンの一部として)保存します。トークンが暗号化または署名されている場合、クライアントはそれを変更できません。

2
John Wu