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.
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
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 PeerAuthentication
polí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