トランスポート セキュリティを構成する

Cloud Service Mesh では、自動相互 TLS(自動 mTLS)がデフォルトで有効になっています。自動 mTLS の場合、クライアント サイドカー プロキシがサーバーにサイドカーがあるかどうかを自動的に検出します。クライアント サイドカーは、サイドカーを含むワークロードには mTLS を送信し、サイドカーを含まないワークロードには平文を送信します。ただし、サービスは平文と mTLS トラフィックの両方を受け入れます。Pod にサイドカー プロキシを挿入する際に、mTLS トラフィックのみを受け入れるようにサービスも構成することをおすすめします。

Cloud Service Mesh では、PeerAuthentication ポリシーを適用して、mTLS のみを受け入れるようにサービスを構成できます。Cloud Service Mesh には、サービス メッシュ全体、名前空間、個々のワークロードにポリシーを適用できる柔軟性があります。特定のワークロードにポリシーを指定した場合、そのポリシーが優先されます。たとえば、ワークロード固有のポリシーは、名前空間固有のポリシーよりも優先されます。ワークロードにポリシーが指定されていない場合、名前空間またはメッシュからポリシーが継承されます。

名前空間ごとに相互 TLS を有効にする

特定の名前空間内のすべてのワークロードで mTLS を有効にするには、名前空間全体の認証ポリシーを使用します。metadata で適用する名前空間を指定します。

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "NAMESPACE"
spec:
  mtls:
    mode: STRICT
EOF

予想される出力:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

ワークロードごとに相互 TLS を有効にする

特定のワークロードに PeerAuthentication ポリシーを設定するには、selector セクションを構成し、選択したワークロードに一致するラベルを指定する必要があります。ただし、Cloud Service Mesh は、サービスへの送信 mTLS トラフィックのワークロード レベルのポリシーを集計できません。この動作を管理するには、宛先ルールを構成する必要があります。

  1. 名前空間の特定のワークロードに認証ポリシーを適用します。

    cat <<EOF | kubectl apply -n NAMESPACE -f -
    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "AUTH_POLICY_NAME"
      namespace: "NAMESPACE"
    spec:
      selector:
        matchLabels:
          app: WORKLOAD
      mtls:
        mode: STRICT
    EOF
    

    予想される出力:

    peerauthentication.security.istio.io/AUTH_POLICY_NAME created
  2. 一致する宛先ルールを構成します。

    cat <<EOF | kubectl apply -n NAMESPACE -f -
    apiVersion: "networking.istio.io/v1alpha3"
    kind: "DestinationRule"
    metadata:
      name: "DEST_RULE_NAME"
    spec:
      host: "WORKLOAD.NAMESPACE.svc.cluster.local"
      trafficPolicy:
        tls:
          mode: ISTIO_MUTUAL
    EOF
    

    予想される出力:

    destinationrule.networking.istio.io/WORKLOAD created

メッシュ全体の mTLS を適用します

メッシュ内のすべてのサービスが書式なしテキストのトラフィックを受け入れないようにするには、mTLS モードを STRICT に設定してメッシュ全体の PeerAuthentication ポリシーを設定します(デフォルトは PERMISSIVE)。メッシュ全体の PeerAuthentication ポリシーにはセレクタがないため、このポリシーはルート名前空間 istio-system に適用する必要があります。ポリシーをデプロイすると、コントロール プレーンが TLS 証明書を自動的にプロビジョニングし、ワークロードの相互認証を可能にします。

メッシュ全体の mTLS を適用するには:

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "istio-system"
spec:
  mtls:
    mode: STRICT
EOF

予想される出力:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

PeerAuthentication ポリシーを検索して削除する

サービス メッシュ内のすべての PeerAuthentication ポリシーの一覧を表示するには、次のコマンドを実行します。

kubectl get peerauthentication --all-namespaces

PeerAuthentication ポリシーがすでに適用されている場合は、kubectl delete を使用して削除できます。

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

ワークロードの最小 TLS バージョンを構成する

minProtocolVersion フィールドを使用して、ワークロード間の TLS 接続の最小 TLS バージョンを指定できます。

TLS の最小バージョンの設定とワークロードの TLS 構成の確認の詳細については、Istio ワークロードの最小 TLS バージョン構成をご覧ください。

次のステップ