Cette page vous explique comment créer des règles d'autorisation sur le réseau ambiant.
Prérequis
Avant de pouvoir suivre la procédure décrite dans ce document, vous devez remplir les conditions suivantes :
- Un cluster GKE en cours d'exécution avec la mise en réseau ambiante Cloud Service Mesh activée.
- Un espace de noms enregistré dans le réseau ambiant (par exemple,
ambient-test) avec des exemples de charges de travail client et serveur déployés. - TLS mutuelle (mTLS) activée entre les charges de travail client et serveur à l'aide d'un
GCPServerTLSPolicy(avecmtlsMode: Strict) et d'unGCPClientTLSPolicy. Les règlesGCPAuthzPolicybasées sur l'identité qui correspondent àCLIENT_CERT_URI_SANnécessitent que le protocole mTLS soit actif pour extraire l'identité SPIFFE du client.
Pour une configuration détaillée de l'environnement, consultez Préparer la mise en réseau ambiante GKE.
Stratégie de refus par défaut
Par défaut, l'API GKE Ambient Authorization Policy autorise tout le trafic, sauf s'il est limité par une règle, ce qui correspond au comportement standard de Kubernetes NetworkPolicy.
L'action DENY_BY_DEFAULT vous permet de modifier ce comportement par défaut. Lorsqu'elle est appliquée à un espace de noms, cette règle bloque tout le trafic vers les charges de travail de cet espace de noms, sauf si une règle ALLOW l'autorise explicitement.
Cette page vous explique comment configurer et utiliser DENY_BY_DEFAULT dans Cloud Service Mesh pour établir une posture sécurisée par défaut pour vos charges de travail.
Limites
Avant d'appliquer une règle DENY_BY_DEFAULT, tenez compte des limites suivantes :
- Vous ne pouvez créer qu'une seule règle
DENY_BY_DEFAULTpar espace de noms. - Aucune règle ne peut être définie pour une stratégie avec l'action
DENY_BY_DEFAULT. - Utilisez cette action pour définir une
matchLabels: {}de référence à l'échelle de l'espace de noms afin de cibler tous les pods. Vous ne pouvez pas utiliserDENY_BY_DEFAULTpour les restrictions par pod.
Configurer une règle d'autorisation "refuser par défaut"
Pour établir une base de référence "refuser par défaut" dans un espace de noms et autoriser sélectivement l'accès à des charges de travail spécifiques, procédez comme suit :
Créez et appliquez un
GCPAuthzPolicyavec l'action définie surDENY_BY_DEFAULTà votre espace de noms.cat <<EOF > deny-by-default-policy.yaml && kubectl apply -f deny-by-default-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: deny-by-default-authz namespace: ambient-test spec: action: DENY_BY_DEFAULT enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: {} EOFLe résultat est semblable à :
gcpauthzpolicy.networking.gke.io/deny-by-default-authz createdPar défaut, cette règle bloque tout le trafic entrant (est-ouest et entrant) vers les charges de travail de l'espace de noms
ambient-test. Il ne limite pas le trafic sortant provenant des charges de travail de l'espace de noms.Pour autoriser sélectivement le trafic, créez et appliquez une règle
ALLOW:cat <<EOF > allow-policy.yaml && kubectl apply -f allow-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: allow-client-to-server namespace: ambient-test spec: action: ALLOW enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: app: server rules: - from: sources: - principals: - principalSelector: CLIENT_CERT_URI_SAN principal: type: Exact value: spiffe://PROJECT_ID.s3ns.svc.id.goog/ns/ambient-test/sa/client EOFRemplacez PROJECT_ID par l'ID du projet.
La propagation de la règle peut prendre jusqu'à trois minutes après l'acceptation du contrôleur. Patientez trois minutes avant de continuer.
Testez la connectivité du client au serveur. Elle devrait aboutir, car elle correspond à la règle
ALLOW.kubectl exec -it deploy/client -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localTestez la connectivité du serveur à lui-même (ou à toute autre charge de travail sans règle d'autorisation explicite). Il devrait échouer en raison du règlement
DENY_BY_DEFAULT.kubectl exec -it deploy/server -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localLe résultat est semblable à :
curl: (52) Empty reply from server.
Journalisation
Lorsqu'une requête est refusée par la règle d'autorisation, les journaux d'accès du proxy Ambient GKE contiennent les champs suivants dans la charge utile JSON :
jsonPayload.error_details: définie sur "- rbac_access_denied_matched_policy[none]"
Vous pouvez utiliser l'explorateur de journaux dans la console Cloud de Confiance pour afficher les entrées du journal d'accès pour les connexions refusées. Consultez Vérifier que le trafic est authentifié et autorisé.
Règles de sécurité de sortie
Pour inspecter et contrôler le trafic sortant des charges de travail de mise en réseau ambiante vers des points de terminaison externes ou Internet, vous pouvez acheminer le trafic de sortie via Secure Web Proxy (SWP).
Pour savoir comment configurer les ressources GCPBackend et GCPEgressRouting, consultez Router le trafic de sortie ambiant via Secure Web Proxy.