相互TLS

マイクロサービスアーキテクチャは、ネットワーク上のリクエストが増えることと、悪意のある当事者がトラフィックを傍受する機会が増えることを意味します。相互TLS(mTLS)認証は、証明書を使用してサービストラフィックを暗号化する方法です。

Istioを使用すると、すべてのサービスにわたるmTLSの適用を自動化できます。以下では、メッシュ全体に対してmTLSを有効にします。クラスター内の2つのPod( クライアントサーバー )は、mTLSポリシーを使用してセキュアな接続を確立しているところを示しています。

Diagram

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を作成します。

認証フロー:

  1. クライアント アプリケーションコンテナーはプレーンテキストのHTTPリクエストを サーバー に送信します。
  2. クライアント プロキシコンテナーが外向けのリクエストを傍受します。
  3. クライアント プロキシは、サーバー側プロキシとTLSハンドシェイクを実行します。このハンドシェイクには、証明書の交換が含まれます。これらの証明書は、Istioによってプロキシコンテナーにプリロードされます。
  4. クライアント プロキシは、サーバーの証明書に対してセキュアな名前付けチェックを実行し、承認されたIDが サーバー を実行していることを確認します。
  5. クライアントサーバー は相互TLS接続を確立し、 サーバー プロキシはリクエストを サーバー アプリケーションコンテナーに転送します。

詳しく学ぶ