Dans les versions 1.5 et ultérieures d'Anthos Service Mesh, l'authentification TLS mutuelle (mTLS) automatique 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 Anthos Service Mesh, vous pouvez appliquer l'authentification mTLS en dehors du code de votre application en définissant un seul fichier YAML. Anthos Service Mesh vous donne la possibilité d'appliquer une règle d'authentification à l'ensemble du maillage de services, à un espace de noms ou à une charge de travail individuelle.
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
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. La spécification de la règle est la même que pour une règle à l'échelle du maillage, mais vous spécifiez l'espace de noms auquel elle 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 souhaitée.
Toutefois, Anthos Service Mesh ne peut pas agréger les règles à l'échelle d'une charge de travail pour le trafic mTLS sortant vers un service. Vous devez configurer une règle de destination pour gérer ce comportement.
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
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
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