第7章. 輸送中のセキュリティ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
モノリス内の2つのモジュールが互いに通信する場合、一般的には単純なインメモリメソッド呼び出しとなる。異なるマイクロサービスは、モノリスとは異なり、(モジュールが独立したサービスに分解され、場合によっては異なるマシン上で実行されるため)互いに通信するために外部トランスポート(ネットワークなど)に依存する。
外部通信チャネルは、メモリ内呼び出しに比べ、悪意のあるアクターからの潜在的な脅威にさらされやすい。従って、定義上、外部通信チャネルはより高い総合リスクを伴う。
この点を説明するために、図7-1に概略を示すように、eコマース・アプリケーションの チェックアウトプロセスの例を使う。チェックアウトプロセスでは、アプリケーションが商品の価格を計算し、リポジトリでそれを検索して顧客に請求するとする。チェックアウトすると、会社はこの商品の利用可能在庫をデクリメントする。
外部通信チャネルは、本質的にアプリケーションの総合的なリスクを増加させるので、セキュリティ専門家は、潜在的な 脅威が最小化されることを確実にするために、制御を追加する必要がある。転送中の暗号化は、メッセージが傍受されたり、改ざんされたり、あるいは、なりすまされたりする潜在的な脅威を低減する、最も一般的に使用される制 御です。(暗号化については第3章で詳しく説明する)。
図7-1. マイクロサービスの場合、外部サービス呼び出しは、モノリスのようなインメモリ呼び出しとは対照的に、外部メディアを介して行われる。
マイクロサービス間の通信は様々な方法で実現できる。一般的な通信パターンをいくつか紹介しよう。このリストは網羅的ではなく、相互に排他的でもない:
非同期状態遷移(REST)を使う
AWS Simple Queue Service(SQS)などのメッセージキューやApache Kafkaなどのメッセージブローカーを使用する。
Googleリモートプロシージャコール(gRPC)のようなHTTPまたはHTTP/2上のラッパーを使用する。
IstioやAWSが管理するAWS App Meshなどのサービスメッシュを使用する。
Transport Layer Security (TLS)は、転送中のデータを暗号化するメソッドとして圧倒的によく使われている。この章では、TLSとAWS ACMを使ってアプリケーションの簡単でシンプルなエンドツーエンドのセキュリティを確保するためにAWSが用意している様々なシステムについて説明する。また、AWS App Meshについても簡単に紹介する。AWS App Meshはマネージドサービスメッシュであり、マイクロサービスでは、外部通信チャネルがもたらす追加の複雑さを保護し、維持するための定型的なコードに対処するのに役立つ。
この章では、このような外部通信チャネルのセキュリティ面に焦点を当てる。しかし、アーキテクトは、スケーラビリティ、遅延、およびマイクロサービスアーキテクチャにおいて多くのトレードオフを決定するものについても考慮する必要があるかもしれない。これらの問題については、本書の対象外なので、他の読み取り資料を参照されたい。 ...