Configurazione della sicurezza del livello di trasporto

In Cloud Service Mesh con le API Istio per i carichi di lavoro Kubernetes, TLS (mTLS automatico) è abilitato per impostazione predefinita. Con mTLS automatico, un proxy sidecar client rileva automaticamente se il server ha un file collaterale. Il sidecar del client invia mTLS ai carichi di lavoro con file collaterali e invia il testo non crittografato ai carichi di lavoro senza file collaterali. Tuttavia, tieni presente che i servizi accettano sia il traffico di testo non crittografato che il traffico mTLS. Durante l'inserimento ai tuoi pod collaterali, ti consigliamo di configurare anche i servizi per accettare solo traffico mTLS.

Con Cloud Service Mesh, puoi configurare i servizi in modo che accettino solo mTLS applicando un criterio PeerAuthentication. Cloud Service Mesh ti offre flessibilità di applicazione del criterio all'intero mesh di servizi, a uno spazio dei nomi a un singolo carico di lavoro. Quando specifichi un criterio per un carico di lavoro specifico, questo criterio ha la precedenza. Ad esempio, un criterio specifico del carico di lavoro prende la precedenza su uno specifico per lo spazio dei nomi. Se non viene specificato alcun criterio per per un carico di lavoro, eredita il criterio dallo spazio dei nomi o dal mesh.

Consulta la sezione Funzionalità supportate per maggiori dettagli delle RP PeerAuthentication sono supportati dalla piattaforma.

Abilita TLS reciproco per spazio dei nomi

Per abilitare mTLS per tutti i carichi di lavoro all'interno di uno specifico spazio dei nomi, utilizza un di autenticazione a livello di spazio dei nomi. Sei tu a specificare lo spazio dei nomi a cui si applica sotto 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 TLS reciproco per carico di lavoro

Per impostare un criterio PeerAuthentication per un carico di lavoro specifico, devi configurare sezione selector e specifica le etichette corrispondenti al carico di lavoro desiderato. Tuttavia, Cloud Service Mesh non può aggregare i criteri a livello di carico di lavoro per del traffico mTLS in uscita verso un servizio. Devi configurare una regola di destinazione gestire tale comportamento.

  1. Applica un criterio di autenticazione a un carico di lavoro 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. Per configurare 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 traffico di testo normale, imposta un criterio PeerAuthentication a livello di mesh con la modalità mTLS impostata su STRICT (il il valore predefinito è PERMISSIVE). Il criterio PeerAuthentication a livello di mesh non deve dispongono di un selettore e devono essere applicati nello spazio dei nomi principale, istio-system. Quando esegui il deployment del criterio, il piano di controllo esegue automaticamente il provisioning di TLS in modo che i carichi di lavoro possano autenticarsi tra loro.

Per applicare il protocollo 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

Trova ed elimina PeerAuthentication criteri

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

Passaggi successivi