Configurar a segurança de transporte
No Cloud Service Mesh com as APIs do Istio para cargas de trabalho do Kubernetes, os processos mútuos O TLS (mTLS automático) é ativado por padrão. Com o mTLS automático, um proxy sidecar do cliente detecta automaticamente se o servidor tem um arquivo secundário. O arquivo secundário do cliente envia mTLS para cargas de trabalho com arquivos secundários e envia texto simples para cargas de trabalho sem esses arquivos. No entanto, os serviços aceitam tráfego de texto simples e mTLS. Conforme você injeta proxies sidecar para seus pods, recomendamos que você também configure seus serviços para aceitar apenas tráfego mTLS.
Com o Cloud Service Mesh, você pode configurar seus serviços para aceitar apenas mTLS
aplicando uma política PeerAuthentication
. O Cloud Service Mesh oferece flexibilidade
para aplicar a política a toda a malha de serviço, a um namespace ou
a uma carga de trabalho individual. Ao definir uma política para uma carga de trabalho,
essa política tem precedência. Por exemplo, uma política específica de carga de trabalho
tem precedência sobre uma específica de namespace. Se nenhuma política for especificada para a
carga de trabalho, ela herdará a do namespace ou da malha.
Consulte Recursos compatíveis para detalhes sobre quais
da resposta automática PeerAuthentication
são aceitos pela plataforma.
Ativar o TLS mútuo por namespace
Para ativar o mTLS para todas as cargas de trabalho em um namespace específico, use uma
política de autenticação em todo o namespace. Especifique o namespace a que ele 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
Resposta esperada:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Ativar o TLS mútuo por carga de trabalho
Para definir uma política PeerAuthentication
para uma carga de trabalho específica, configure
a seção selector
e especifique os rótulos que correspondem à carga de trabalho pretendida.
No entanto, o Cloud Service Mesh não agrega políticas no nível da carga de trabalho para
o tráfego mTLS de saída para um serviço. Você precisa configurar uma regra de destino para
gerenciar esse comportamento.
Aplique uma política de autenticação a uma carga de trabalho específica no seu namespace:
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
Resposta esperada:
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
Resposta esperada:
destinationrule.networking.istio.io/WORKLOAD created
Aplique o mTLS em toda a malha
Para impedir que todos os serviços na malha aceitem tráfego de texto simples, defina
uma política PeerAuthentication
para toda a malha com o modo mTLS definido como STRICT
(o
padrão é PERMISSIVE
). para criar um anexo da VLAN de monitoramento. A política PeerAuthentication
em toda a malha não pode
ter um seletor e precisa ser aplicada no namespace raiz, istio-system
. Quando
você implanta a política, o plano de controle provisiona automaticamente certificados TLS
para que as cargas de trabalho possam ser autenticadas entre si.
Para aplicar o mTLS em toda a 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
Resposta esperada:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Encontrar e excluir políticas do PeerAuthentication
Para uma lista de todas as políticas PeerAuthentication
na malha de serviço:
kubectl get peerauthentication --all-namespaces
Se houver uma política PeerAuthentication
em vigor, exclua-a com
kubectl delete
:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME