マイクロサービスをコンポーネントとして組み合わせてアプリケーションを構築することで、効率を大きく向上できるようになる。本記事では、マイクロサービスの利点とともに、セキュリティという観点から見たベストプラクティスについて解説する。
提供:iStock/matka_Wariatka
マイクロサービスは、ソフトウェア開発を加速、向上させる革新的な方法だ。このマイクロサービスという言葉は、個別に開発でき、しばしば特定用途に特化した、サービスとして動作する、アプリケーションの構成コンポーネント(材料と考えてほしい)を指している。例を挙げると、オンラインショッピングを想定したEコマースアプリケーションでは注文の取得処理や、アカウントへのアクセス処理、在庫管理処理、出荷処理といったマイクロサービスが考えられる。TwitterやPayPal、Amazon、eBay、Netflixといった数多くの有名なEコマース企業やソーシャルメディア企業もマイクロサービスを活用している。
マイクロサービスはコンテナとよく似ているが、まったく同じというわけではない。マイクロサービスはコンテナ内で実行できるが、コンテナはマイクロサービス内では実行できない。またマイクロサービスは、エコシステム全体の構成要素として、あるいはアプリケーションのアーキテクチャの一部として、API経由で互いに通信しあうようになっている。
マイクロサービスには数多くの利点がある。短期間で開発でき、再利用が可能であり、スケーラビリティの向上を促進し、さまざまなプログラミング言語での開発すら可能になる。また、プログラム全体を改修するのではなく、1つか2つのマイクロサービスを修正するだけという場合、アプリケーションは簡単にアップデートできる。さらに、変更の促進や追跡、トラブルシューティング、(冗長なマイクロサービスの利用などによる)耐障害性の向上、パフォーマンスの向上にも役に立つ。
テクノロジを構成するあらゆる要素について言える話だが、マイクロサービスにもセキュリティリスクがあり、適切な利用に向けたベストプラクティスもある。アプリケーションの脆弱性を、いわば仮想化という壁の向こう側のサンドボックスに封じ込めるものだという言い方もできるだろう。
とは言うものの、脆弱性が無くなってしまうわけではない。たった1つのマイクロサービス(例えば、Eコマースアプリケーションにおいてアカウントへのアクセスを担当するマイクロサービス)が悪者の手に落ちただけで、リスクが生み出されるためだ。結局のところ、泥棒は家屋の一室に侵入するだけで、リビングルームにも入り込めてしまうため、液晶TVを盗み、eBayに出品できるようになる。また、あまりにも多様かつ大量のマイクロサービスがある場合、複雑さが増し、特にアプリケーションに多くの開発者がかかわり、さまざまな手法が用いられている際にはセキュリティの確保が難しくなる。
NGINXの製品担当責任者であるOwen Garrett氏はマイクロサービスのセキュリティについて以下のように述べている。
マイクロサービスはモノリシックなアーキテクチャとは異なったリスクを抱えている。そういった違いには以下のものが含まれている。
- 通信方法の違い:モノリシックなアプリの場合、プロセス間の通信はメモリを用いて実現されている一方、マイクロサービスの場合にはネットワーク経由でサービス同士が通信しあうことになる。ネットワークを介した通信によって、速度面やセキュリティ面での問題が発生する。
- データストア:マイクロサービスが使用するデータストアの数は1つとか2つというレベルではない。このため、マイクロサービス同士や、それと密接に結びついているサービスとの間に、暗黙の前提条件が生み出される可能性がある。
- 専門的な技術知識:マイクロサービスでは、担当チームがマイクロサービスをしっかりと管理するための適切な経験やノウハウを有していない場合、複雑さが増し、セキュリティ上のギャップが生み出される恐れもある。