マイクロサービスアーキテクチャは、ネットワーク上のリクエストが増えることと、悪意のある当事者がトラフィックを傍受する機会が増えることを意味します。相互TLS(mTLS)認証は、証明書を使用してサービストラフィックを暗号化する方法です。
Istioを使用すると、すべてのサービスにわたるmTLSの適用を自動化できます。以下では、メッシュ全体に対してmTLSを有効にします。クラスター内の2つのPod( クライアント
と サーバー
)は、mTLSポリシーを使用してセキュアな接続を確立しているところを示しています。
apiVersion: authentication.istio.io/v1alpha1
kind: MeshPolicy
metadata:
name: default
spec:
peers:
- mtls:
mode: STRICT
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: default
namespace: istio-system
spec:
host: "*.local"
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
ここでは、MeshPolicy
はリクエストを受信するすべてのサービス(サーバー側)にTLSを適用し、DestinationRule
はリクエストを送信するすべてのサービス(クライアント側)にTLSを適用し、相互(「両方」)のTLSを作成します。
認証フロー:
クライアント
アプリケーションコンテナーはプレーンテキストのHTTPリクエストをサーバー
に送信します。クライアント
プロキシコンテナーが外向けのリクエストを傍受します。クライアント
プロキシは、サーバー側プロキシとTLSハンドシェイクを実行します。このハンドシェイクには、証明書の交換が含まれます。これらの証明書は、Istioによってプロキシコンテナーにプリロードされます。クライアント
プロキシは、サーバーの証明書に対してセキュアな名前付けチェックを実行し、承認されたIDがサーバー
を実行していることを確認します。クライアント
とサーバー
は相互TLS接続を確立し、サーバー
プロキシはリクエストをサーバー
アプリケーションコンテナーに転送します。
詳しく学ぶ: