Configurare la sicurezza del trasporto
In Cloud Service Mesh con le API Istio per i workload Kubernetes, la funzionalità auto mutual TLS (auto mTLS) è abilitata per impostazione predefinita. Con auto mTLS, un proxy sidecar lato client rileva automaticamente se il server ha un sidecar. Il sidecar client invia mTLS ai workload con sidecar e invia testo non crittografato ai workload senza sidecar. Tieni presente, tuttavia, che i servizi accettano sia il traffico in testo non crittografato che mTLS. Quando inserisci proxy sidecar nei tuoi pod, ti consigliamo di configurare i servizi in modo che accettino solo il traffico mTLS.
Con Cloud Service Mesh, puoi configurare i servizi in modo che accettino solo mTLS applicando una policy PeerAuthentication. Cloud Service Mesh ti offre la flessibilità di applicare la policy all'intero mesh di servizi, a uno spazio dei nomi o a un singolo workload. Quando specifichi una policy per un workload specifico, questa ha la precedenza. Ad esempio, una policy specifica del workload ha la precedenza su una specifica dello spazio dei nomi. Se non viene specificata alcuna policy per il workload, questo eredita la policy dallo spazio dei nomi o dal mesh.
Per informazioni dettagliate sui campi della risorsa personalizzata PeerAuthentication supportati dalla piattaforma, 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 di destinazione.
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 nello 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 non crittografato, 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
Disattivare 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 in base ai requisiti del server utilizzando l'API DestinationRule.
Panoramica concettuale
- Lato server: utilizzi 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 testo non crittografato quando comunicano con quel server specifico.
Esempi
Passaggio 1: configura PeerAuthentication
In questo esempio utilizzeremo la policy predefinita PERMISSIVE, quindi non è necessario definire esplicitamente la policy.
Passaggio 2: configura DestinationRule lato client
Questa configurazione indica ai client di utilizzare 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
Trovare ed eliminare le policy PeerAuthentication
Per un elenco di tutte le policy PeerAuthentication nel mesh di servizi:
kubectl get peerauthentication --all-namespaces
Se è in vigore una policy PeerAuthentication, puoi eliminarla con kubectl delete:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME