web-dev-qa-db-ja.com

一般的な集中型セキュリティサービスを利用できるマイクロサービスアーキテクチャを設定するにはどうすればよいですか?

私は明らかにマイクロサービスアーキテクチャについて多くを聞いたことがあり、それは(特にNetflixのサクセスストーリーで)非常に理にかなっていると思います。

小規模なGrailsアプリケーションをマイクロサービスに実装したいと思います(ただし、フレームワークはそれほど重要ではありません)。私の質問は、「セキュリティ」または「ユーザー」マイクロサービスについてです。私の最初の考えは、他のマイクロサービスがセキュリティサービスのRESTインターフェースをクエリする場所であるRESTインターフェースでアプリケーションを作成することです。しかし、セキュリティはすべてのサービスで複製されます。これは避けられない問題のようですが、これを処理するための最良の方法は何ですか?

すべてのサービスにSpring Securityを実装し、単純な権利情報でユーザーサービスにクエリを実行する必要がありますか?または、中央セキュリティサービスが何らかの方法で機能する可能性はありますか?

6
Brandon Wagner

@ user454322が言うように、OAuth2仕様を調べてください...これは広く使用され、十分にサポートされている標準であり、うまく機能します。

許可サーバーをデプロイするには、(基本的に)2つの方法があります。

1)リバースプロキシとして(@ user454322の図に示すように)。これは、外部からのすべてのリクエストがOAuth2サーバーを経由してサービスに送信されるときです。これにより、承認の問題が一元化されるため、要求がサービスに到達する前に処理されます。これは、ロードバランサーでSSLを終了するのと同じです。本質的に、認証サーバーはファイアウォールやロードバランサーのようなネットワークミドルウェアの一部になります。

  • 主な欠点は、リバースプロキシの実装が難しいことです。特に、ペイロードが大きい場合、またはHTTPで巧妙なことをしている場合(HTTPは単純に始まりますが、複雑なしわがたくさんあります)
  • リバースプロキシ機能を提供する「API管理」ソリューションを購入できますが、OAuth、メトリック、スロットルなどを追加できます。

2)認可サーバーとして。これは少し異なるレイアウトで、各サービスは(ロードバランサーなどから)直接リクエストを受け取ります。各リクエストには、ヘッダーにアクセストークンが付属しています。次に、サービスは許可サービスに対してHTTP呼び出しを行い、トークンを検証します。認可サーバーは、ユーザーの認証とトークンの付与を最初に担当します。マイクロサービスがその部分を行う必要はありません。

  • 主な欠点は、各着信要求が認証サービスに往復する必要があることです。それはあなたの待ち時間に追加されます。
  • 副次的な欠点は、サービスのevery oneが認証サービスを呼び出すことを確認する必要があることです。それ以外の場合、使用していないサービスはインターネットに開かれ、保護されません。
3
Rob

重複を避けて保守性を向上させるために、central Security Serviceを使用します。

画像は千以上の言葉を言っていると言われています:

mircoservice architecture security


OAuthはRESTful APIを保護する一般的な方法です。
OAuth記事]をご覧ください。

2
user454322