Configura la sicurezza del trasporto
Puoi proteggere il traffico tra i servizi in Cloud Service Mesh con le API Istio applicando il mutual TLS (mTLS) rigoroso. Nei workload Kubernetes, auto mTLS è abilitato per impostazione predefinita: i proxy sidecar client inviano automaticamente il traffico mTLS ai sidecar, ma i servizi di destinazione accettano comunque richieste sia in testo non crittografato che criptate.
Le policy PeerAuthentication ti consentono di limitare i servizi in modo che accettino solo mTLS. Puoi applicare una policy a livello di mesh, a uno spazio dei nomi specifico o a un singolo workload.
Per i campi supportati su tutte le piattaforme, consulta Funzionalità supportate.
Abilita mutual TLS per spazio dei nomi
Per abilitare mTLS per tutti i workload all'interno di un determinato spazio dei nomi, utilizza una policy di autenticazione a livello di spazio dei nomi. Specifica lo spazio dei nomi a cui si applica in metadata.
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "NAMESPACE"
spec:
mtls:
mode: STRICT
EOF
Output previsto:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Abilita mutual TLS per workload
Per impostare una policy PeerAuthentication per un workload specifico, devi configurare
la sezione selector e specificare le etichette che corrispondono al workload target.
Tuttavia, Cloud Service Mesh non può aggregare le policy a livello di workload per il traffico mTLS in uscita verso un servizio. Per gestire questo comportamento, devi configurare una regola di destinazione.
Applica una policy di autenticazione a un workload specifico nel tuo spazio dei nomi:
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 EOFOutput previsto:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Configura una regola di destinazione corrispondente:
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 EOFOutput previsto:
destinationrule.networking.istio.io/WORKLOAD created
Applica mTLS a livello di mesh
Per impedire a tutti i servizi nel mesh di accettare il traffico in testo normale, imposta una policy PeerAuthentication a livello di mesh con la modalità mTLS impostata su STRICT (il valore predefinito è PERMISSIVE). La policy PeerAuthentication a livello di mesh non deve avere un selettore e deve essere applicata nello spazio dei nomi radice, istio-system. Quando esegui il deployment della policy, il control plane esegue automaticamente il provisioning dei certificati TLS in modo che i workload possano autenticarsi a vicenda.
Per applicare mTLS a livello di mesh:
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
EOF
Output previsto:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Disattivazione di mTLS per CSM gestito
Cloud Service Mesh non supporta il valore mtls.mode: DISABLE in una risorsa PeerAuthentication.
Per disattivare correttamente mTLS in Cloud Service Mesh, devi definire esplicitamente il comportamento del client con i requisiti del server utilizzando l'API DestinationRule.
Panoramica concettuale
- Lato server: utilizza una risorsa
PeerAuthenticationper impostare il valore predefinito del proxy lato server. - Approccio lato client: utilizzi una risorsa
DestinationRuleper indicare esplicitamente ai proxy lato client di utilizzare il testo non crittografato durante la comunicazione con quel server specifico.
Esempi
Passaggio 1: configura PeerAuthentication
In questo esempio utilizzeremo la policy predefinita PERMISSIVE, quindi non è necessario definirla in modo esplicito.
Passaggio 2: configura DestinationRule lato client
Questa configurazione indica ai client di utilizzare il testo non crittografato quando chiamano 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
Trova ed elimina le policy PeerAuthentication
Per un elenco di tutte le policy PeerAuthentication nel mesh di servizi:
kubectl get peerauthentication --all-namespaces
Se è applicata una policy PeerAuthentication, puoi eliminarla con
kubectl delete:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME