Configure a segurança de transporte

No Cloud Service Mesh 1.5 e posterior, o TLS mútuo automático (mTLS automático) está ativado por predefinição. Com o mTLS automático, um proxy sidecar do lado do cliente deteta automaticamente se o servidor tem um sidecar. O sidecar do cliente envia mTLS para cargas de trabalho com sidecars e envia texto simples para cargas de trabalho sem sidecars. No entanto, os serviços aceitam tráfego de texto simples e mTLS. À medida que injeta proxies sidecar nos seus pods, recomendamos que também configure os seus serviços para aceitarem apenas tráfego mTLS.

Com a Cloud Service Mesh, pode configurar os seus serviços para aceitarem apenas mTLS aplicando uma política PeerAuthentication. A malha de serviços na nuvem oferece-lhe a flexibilidade de aplicar a política a toda a malha de serviços, a um espaço de nomes ou a uma carga de trabalho individual. Quando especifica uma política para uma carga de trabalho específica, essa política tem precedência. Por exemplo, uma política específica da carga de trabalho tem precedência sobre uma específica do espaço de nomes. Se não for especificada nenhuma política para a carga de trabalho, esta herda a política do espaço de nomes ou da malha.

Ative o TLS mútuo por espaço de nomes

Para ativar o mTLS para todas as cargas de trabalho num determinado namespace, use uma política de autenticação ao nível do namespace. Especifica o espaço de nomes ao qual se aplica em metadata.

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "NAMESPACE"
spec:
  mtls:
    mode: STRICT
EOF

Resultado esperado:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

Ative o TLS mútuo por carga de trabalho

Para definir uma política de PeerAuthentication para uma carga de trabalho específica, tem de configurar a secção selector e especificar as etiquetas que correspondem à carga de trabalho pretendida. No entanto, a Cloud Service Mesh não pode agregar políticas ao nível da carga de trabalho para tráfego mTLS de saída para um serviço. Tem de configurar uma regra de destino para gerir esse comportamento.

  1. Aplique uma política de autenticação a uma carga de trabalho específica no seu espaço de nomes:

    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
    

    Resultado esperado:

    peerauthentication.security.istio.io/AUTH_POLICY_NAME created
  2. Configure uma regra de destino correspondente:

    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
    

    Resultado esperado:

    destinationrule.networking.istio.io/WORKLOAD created

Aplique mTLS em toda a malha

Para impedir que todos os seus serviços na malha aceitem tráfego de texto simples, defina uma política de PeerAuthentication ao nível da malha com o modo mTLS definido como STRICT (o valor predefinido é PERMISSIVE). A política de PeerAuthentication ao nível da malha não deve ter um seletor e tem de ser aplicada no espaço de nomes raiz, istio-system. Quando implementa a política, o plano de controlo aprovisiona automaticamente certificados TLS para que as cargas de trabalho possam autenticar-se entre si.

Para aplicar o mTLS ao nível da malha:

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "istio-system"
spec:
  mtls:
    mode: STRICT
EOF

Resultado esperado:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

Encontre e elimine políticas de PeerAuthentication

Para ver uma lista de todas as PeerAuthenticationpolíticas na malha de serviços:

kubectl get peerauthentication --all-namespaces

Se existir uma política de PeerAuthentication em vigor, pode eliminá-la com o comando kubectl delete:

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

O que se segue?