Configurazione della sicurezza del livello di trasporto
In Cloud Service Mesh, il TLS reciproco automatico (mTLS automatico) è abilitato per impostazione predefinita. Con mTLS automatico, un proxy sidecar client rileva automaticamente se il server ha un sidecar. Il sidecar client invia mTLS ai carichi di lavoro con sidecar e testo normale ai carichi di lavoro senza sidecar. Tieni presente, tuttavia, che i servizi accettano sia il traffico in testo normale sia quello mTLS. Quando inietti proxy sidecar nei tuoi pod, ti consigliamo di configurare anche i tuoi servizi in modo che accettino solo il traffico mTLS.
Con Cloud Service Mesh, puoi configurare i tuoi servizi in modo che accettino solo mTLS
applicando un criterio PeerAuthentication
. Cloud Service Mesh ti offre la
flessibilità di applicare il criterio all'intero mesh di servizi, a uno spazio dei nomi o
a un singolo carico di lavoro. Quando specifichi un criterio per un determinato carico di lavoro,
questo criterio ha la precedenza. Ad esempio, un criterio specifico del carico di lavoro avrà la precedenza su uno specifico dello spazio dei nomi. Se non vengono specificati criteri per il workload, questo eredita il criterio dallo spazio dei nomi o dal mesh.
Attivare l'autenticazione TLS reciproca per ogni spazio dei nomi
Per attivare mTLS per tutti i carichi di lavoro all'interno di un determinato spazio dei nomi, utilizza un
criterio 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
Risultato previsto:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Abilita TLS reciproco per carico di lavoro
Per impostare un criterio PeerAuthentication
per un determinato carico di lavoro, devi configurare la sezione selector
e specificare le etichette corrispondenti al carico di lavoro scelto.
Tuttavia, Cloud Service Mesh non può aggregare i criteri a livello di carico di lavoro per il traffico mTLS in uscita verso un servizio. Devi configurare una regola di destinazione per gestire questo comportamento.
Applica un criterio di autenticazione a un carico di lavoro 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 EOF
Risultato 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 EOF
Risultato previsto:
destinationrule.networking.istio.io/WORKLOAD created
Applicare mTLS a livello di mesh
Per impedire a tutti i servizi del mesh di accettare traffico in testo normale, imposta un criterio PeerAuthentication
a livello di mesh con la modalità mTLS impostata su STRICT
(il valore predefinito è PERMISSIVE
). Il criterio PeerAuthentication
a livello di mesh non deve avere un selettore e deve essere applicato nell'ambito dello spazio dei nomi principale, istio-system
. Quando
implementi il criterio, il piano di controllo esegue automaticamente il provisioning dei certificati TLS
in modo che i carichi di lavoro possano autenticarsi tra loro.
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
Risultato previsto:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Trovare ed eliminare le norme di PeerAuthentication
Per un elenco di tutti i criteri PeerAuthentication
nel mesh di servizi:
kubectl get peerauthentication --all-namespaces
Se è in vigore un criterio PeerAuthentication
, puoi eliminarlo con
kubectl delete
:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME
Configura la versione TLS minima per i tuoi workload
Puoi utilizzare il campo minProtocolVersion
per specificare la versione TLS minima per le connessioni TLS tra i tuoi carichi di lavoro.
Per ulteriori informazioni su come impostare la versione TLS minima e controllare la configurazione TLS dei tuoi workload, consulta Configurazione della versione TLS minima del workload Istio.