Configurare la sicurezza del trasporto

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.

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

  1. Lato server: utilizzi 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 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

Passaggi successivi