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.

  1. 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
    EOF
    

    Output previsto:

    peerauthentication.security.istio.io/AUTH_POLICY_NAME created
  2. 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
    

    Output 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

  1. Lato server: utilizza una risorsa PeerAuthentication per impostare il valore predefinito del proxy lato server.
  2. Approccio lato client: utilizzi una risorsa DestinationRule per 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

Passaggi successivi