Configurer la sécurité du transport

Configurer la sécurité du transport

Dans Cloud Service Mesh avec les API Istio pour les charges de travail Kubernetes, l'authentification TLS mutuelle (auto mTLS) est activée par défaut. L'authentification mTLS permet à un proxy side-car client de détecter automatiquement si le serveur possède un side-car. Le side-car client envoie l'authentification mTLS aux charges de travail avec des side-cars, et envoie du texte brut aux charges de travail sans side-car. Notez toutefois que les services acceptent à la fois le trafic en texte brut et le trafic mTLS. Lorsque vous injectez des proxys side-car dans vos pods, nous vous recommandons également de configurer vos services de manière à n'accepter que le trafic mTLS.

Avec Cloud Service Mesh, vous pouvez configurer vos services pour qu'ils n'acceptent que l'authentification mTLS en appliquant une règle PeerAuthentication. Cloud Service Mesh vous donne la possibilité d'appliquer une règle à l'ensemble du maillage de services, à un espace de noms ou à une charge de travail individuelle. Lorsque vous spécifiez une règle pour une charge de travail spécifique, cette règle est prioritaire. Par exemple, une règle spécifique à une charge de travail est prioritaire sur une règle spécifique à un espace de noms. Si aucune règle n'est spécifiée pour la charge de travail, elle hérite de la règle de l'espace de noms ou du maillage.

Pour en savoir plus sur les champs de la ressource personnalisée PeerAuthentication compatibles avec chaque plate-forme, consultez Fonctionnalités compatibles.

Activer l'authentification TLS mutuelle par espace de noms

Pour activer l'authentification mTLS pour toutes les charges de travail d'un espace de noms donné, utilisez une règle d'authentification à l'échelle de l'espace de noms. Spécifiez l'espace de noms auquel il s'applique sous metadata.

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

Résultat attendu :

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

Activer l'authentification TLS mutuelle par charge de travail

Pour définir une règle PeerAuthentication pour une charge de travail spécifique, vous devez configurer la section selector et spécifier les libellés correspondant à la charge de travail ciblée. Toutefois, Cloud Service Mesh ne peut pas agréger les règles au niveau de la charge de travail pour le trafic mTLS sortant vers un service. Vous devez configurer une règle de destination pour gérer ce comportement.

  1. Appliquez une règle d'authentification à une charge de travail spécifique de l'espace de noms :

    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
    

    Résultat attendu :

    peerauthentication.security.istio.io/AUTH_POLICY_NAME created
  2. Configurez une règle de destination correspondante :

    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
    

    Résultat attendu :

    destinationrule.networking.istio.io/WORKLOAD created

Appliquer l'authentification mTLS à l'échelle du maillage

Pour empêcher tous les services du maillage d'accepter le trafic en texte brut, définissez une règle PeerAuthentication à l'échelle du maillage avec le mode mTLS défini sur STRICT (la valeur par défaut est PERMISSIVE). La règle PeerAuthentication ne doit pas comporter de sélecteur et doit être appliquée dans l'espace de noms racine istio-system. Lorsque vous déployez la règle, le plan de contrôle provisionne automatiquement les certificats TLS afin que les charges de travail puissent s'authentifier mutuellement.

Pour appliquer l'authentification mTLS à l'échelle du maillage, procédez comme suit :

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

Résultat attendu :

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

Désactiver mTLS pour Managed CSM

Cloud Service Mesh n'est pas compatible avec la valeur mtls.mode: DISABLE dans une ressource PeerAuthentication.

Pour désactiver correctement mTLS dans Cloud Service Mesh, vous devez définir explicitement le comportement du client en fonction des exigences du serveur à l'aide de l'API DestinationRule.

Présentation du concept

  1. Côté serveur : vous utilisez une ressource PeerAuthentication pour définir la valeur par défaut du proxy côté serveur.
  2. Approche côté client : vous utilisez une ressource DestinationRule pour indiquer explicitement aux proxys côté client d'utiliser le texte brut lorsqu'ils communiquent avec ce serveur spécifique.

Exemples

Étape 1 : Configurez PeerAuthentication

Dans cet exemple, nous utiliserons la règle par défaut PERMISSIVE. Il n'est donc pas nécessaire de la définir explicitement.

Étape 2 : Configurez la DestinationRule côté client

Cette configuration indique aux clients d'utiliser du texte brut lors de l'appel de httpbin.

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: "DEST_RULE_NAME"
  namespace: sample-namespace
spec:
  host: "WORKLOAD.NAMESPACE.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE

Rechercher et supprimer des règles PeerAuthentication

Pour obtenir la liste de toutes les règles PeerAuthentication du maillage de services, procédez comme suit :

kubectl get peerauthentication --all-namespaces

Si une règle PeerAuthentication est appliquée, vous pouvez la supprimer à l'aide de la commande kubectl delete :

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

Étapes suivantes