トランスポートのセキュリティの構成

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

相互 mTLS

Anthos Service Mesh では、単一の YAML ファイルを適用することで、アプリケーション コードの外部で mTLS を適用できます。Anthos Service Mesh には、サービス メッシュ全体、名前空間、個々のワークロードに認証ポリシーを適用できる柔軟性があります。

メッシュ全体の 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

名前空間ごとに相互 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 セクションを構成し、目的のワークロードに一致するラベルを指定する必要があります。ただし、Anthos 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

PeerAuthentication ポリシーの検索と削除

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

kubectl get peerauthentication --all-namespaces

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

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

次のステップ