In dieser Anleitung erfahren Sie, wie Sie die Sicherheit Ihres Clusters und der Anwendung verbessern können. Angenommen, Sie sind ein Plattformadministrator, dessen Organisation die Anwendungen für ihren Onlineshop mit Cloud Service Mesh verwaltet, einer Gruppe von Tools, mit denen Sie ein zuverlässiges Service Mesh überwachen und verwalten können. Sie sind dafür verantwortlich, dass Ihr Mesh-Netzwerk und Ihre Anwendungen sicher sind.
Sie können Fehlkonfigurationen verhindern und Ihre Cloud Service Mesh-Richtlinien automatisch validieren, indem Sie Policy Controller und Config Sync verwenden. Policy Controller ermöglicht das Erzwingen vollständig programmierbarer Richtlinien für Ihre Cluster. Policy Controller enthält außerdem eine Standardbibliothek mit Einschränkungsvorlagen, die Sie zusammen mit dem Cloud Service Mesh-Sicherheitsset verwenden können, um die Einhaltung von Schwachstellen und Best Practices in Ihrem Mesh zu überprüfen. Config Sync gleicht den Status von Clustern kontinuierlich mit einem zentralen Satz deklarativer Kubernetes-Konfigurationsdateien ab. Wenn Sie Policy Controller und Config Sync zusammen verwenden, können Sie Einschränkungen für Ihre Cloud Service Mesh-Richtlinienkonfigurationen kontinuierlich erzwingen.
Das folgende Diagramm bietet eine Übersicht darüber, wie Cloud Service Mesh, Policy Controller und Config Sync in diesem Tutorial zusammenarbeiten, um ein Ingress-Gateway und die Online Boutique-Beispielanwendungen, die Sie in diesem Tutorial verwenden, zu verwalten und zu schützen:
Umgebung vorbereiten
In diesem Abschnitt bereiten Sie Ihre Umgebung vor, damit Sie Cloud Service Mesh, Policy Controller und Config Sync installieren können:
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Führen Sie ein Upgrade auf die neueste Version der Google Cloud CLI durch:
gcloud components updateErstellen Sie zum Speichern der in dieser Anleitung erstellten Dateien ein Verzeichnis:
mkdir ~/asm-acm-tutorial-dirErstellen Sie die folgenden Umgebungsvariablen, um den Rest der Anleitung zu vereinfachen:
PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID CLUSTER=asm-acm-tutorial CLUSTER_ZONE=us-east4-a MEMBERSHIP=asm-acm-tutorial PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')Ersetzen Sie
PROJECT_IDdurch die Projekt-ID, die Sie für diese Anleitung verwenden möchten.Wenn Sie aufgefordert werden, Cloud Shell zu autorisieren, klicken Sie auf Autorisieren, um den Vorgang abzuschließen.
Aktivieren Sie die APIs, die Sie für diese Anleitung benötigen:
gcloud
gcloud services enable \ mesh.googleapis.com \ anthos.googleapis.comConfig Connector
Diese Anleitung enthält Config Connector-Ressourcen. Sie können diese Ressourcen verwenden, um dieselben Aufgaben auszuführen, die Sie auf dem Tab
gcloudausführen. Zur Verwendung dieser Ressourcen installieren Sie Config Connector und wenden die Ressourcen so an, wie es für Ihre Umgebung am besten ist.Verwenden Sie das folgende
Services-Manifest:apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: annotations: cnrm.cloud.google.com/deletion-policy: "abandon" cnrm.cloud.google.com/disable-dependent-services: "false" name: mesh.googleapis.com spec: resourceID: mesh.googleapis.com projectRef: external: PROJECT_ID --- apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: annotations: cnrm.cloud.google.com/deletion-policy: "abandon" cnrm.cloud.google.com/disable-dependent-services: "false" name: anthos.googleapis.com spec: resourceID: anthos.googleapis.com projectRef: external: PROJECT_IDDieser Vorgang kann mehr als eine Minute dauern.
Erstellen Sie einen GKE-Cluster.
gcloud
gcloud container clusters create ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --machine-type=e2-standard-4 \ --num-nodes 4 \ --workload-pool ${PROJECT_ID}. \ --labels mesh_id=proj-${PROJECT_NUMBER}Config Connector
Verwenden Sie die folgenden Manifeste für
ContainerClusterundContainerNodePool:apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerNodePool metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: asm-acm-tutorial spec: clusterRef: name: asm-acm-tutorial location: us-east4-a nodeConfig: machineType: e2-standard-4 nodeCount: 4 --- apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerCluster metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID cnrm.cloud.google.com/remove-default-node-pool: "true" labels: mesh_id: proj-PROJECT_NUMBER name: asm-acm-tutorial spec: location: us-east4-a initialNodeCount: 1 workloadIdentityConfig: workloadPool: PROJECT_ID.Ersetzen Sie
PROJECT_NUMBERdurch den Wert der zuvor abgerufenen UmgebungsvariablenPROJECT_NUMBER.Dieser Vorgang kann mehr als fünf Minuten dauern.
Beschreiben Sie den Status, um sicherzustellen, dass der GKE-Cluster erfolgreich erstellt wird:
gcloud container clusters list \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}Die Ausgabe sieht etwa so aus:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS asm-acm-tutorial us-east4-a 1.23.12-gke.100 35.186.179.30 e2-standard-4 1.23.12-gke.100 3 RUNNINGStellen Sie eine Verbindung zum GKE-Cluster her:
gcloud container clusters get-credentials ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}Registrieren Sie den Cluster auf einer Flotte.
gcloud
gcloud container fleet memberships register ${MEMBERSHIP} \ --project ${PROJECT_ID} \ --gke-cluster ${CLUSTER_ZONE}/${CLUSTER} \ --enable-workload-identityDie Ausgabe sieht etwa so aus:
kubeconfig entry generated for asm-acm-tutorial. Waiting for membership to be created...done. Created a new membership [projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial] for the cluster [asm-acm-tutorial] Generating the Connect Agent manifest... Deploying the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect]... Deployed the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect]. Finished registering the cluster [asm-acm-tutorial] with the Fleet.Config Connector
Verwenden Sie das folgende
GKEHubMembership-Manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubMembership metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: asm-acm-tutorial spec: location: global authority: issuer: https://container.googleapis.com/v1/projects/PROJECT_ID/locations/us-east4-a/clusters/asm-acm-tutorial endpoint: gkeCluster: resourceRef: name: asm-acm-tutorialBeschreiben Sie den Status, um sicherzustellen, dass der GKE-Cluster erfolgreich registriert wird:
gcloud container fleet memberships listDie Ausgabe sieht etwa so aus:
NAME EXTERNAL_ID LOCATION asm-acm-tutorial 0e12258c-8831-4d81-b5c0-5e7099a468cc globalroot-syncals Repository fürRootSyncenthält alle Konfigurationen in Ihrem Cluster, einschließlichRepoSyncs,Constraints,ClusterRole,RoleBindingsund Ressourcen, die in einigen System-Namespaces wieistio-systementhalten sind.ingress-gatewayenthält als erstesRepoSyncalle Ressourcen, die für die Bereitstellung eines Ingress-Gateways und dessen schrittweise Sicherung im Laufe dieses Tutorials erforderlich sind.online-boutiqueenthält als zweitesRepoSyncalle Ressourcen, die für die Bereitstellung der Online Boutique-Anwendungen und deren schrittweise Sicherung im Laufe dieses Tutorials erforderlich sind.Aktivieren Sie den
ConfigManagement-Operator, der Config Sync und Policy Controller verwaltet:gcloud
gcloud beta container fleet config-management enableConfig Connector
Verwenden Sie das folgende
GKEHubFeature-Manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: configmanagement spec: projectRef: external: PROJECT_ID location: global resourceID: configmanagementAktivieren Sie Cloud Service Mesh in Ihrer Flotte.
gcloud
gcloud container fleet mesh enableConfig Connector
Verwenden Sie das folgende
GKEHubFeature-Manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: servicemesh spec: projectRef: external: PROJECT_ID location: global resourceID: servicemeshAktivieren Sie die automatische Cloud Service Mesh-Verwaltung, damit Google die empfohlene Konfiguration von verwaltetem Cloud Service Mesh anwenden kann:
gcloud
gcloud container fleet mesh update \ --management automatic \ --memberships ${MEMBERSHIP}Config Connector
Verwenden Sie das folgende
GKEHubFeatureMembership-Manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeatureMembership metadata: name: servicemesh-membership spec: projectRef: external: PROJECT_ID location: global membershipRef: name: asm-acm-tutorial featureRef: name: servicemesh mesh: management: MANAGEMENT_AUTOMATICConfig Sync und Policy Controller aktivieren:
gcloud
Speichern Sie das folgende Manifest als
acm-config.yamlim Verzeichnis~/asm-acm-tutorial-dir:applySpecVersion: 1 spec: configSync: enabled: true policyDir: asm-acm-tutorial/root-sync/init secretType: none sourceFormat: unstructured syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples syncBranch: main policyController: enabled: true referentialRulesEnabled: true templateLibraryInstalled: trueWeitere Informationen zu den Google Cloud CLI-Konfigurationsfeldern finden Sie unter gcloud apply spec fields.
Wenden Sie die Datei an:
gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlConfig Connector
Verwenden Sie das folgende
GKEHubFeatureMembership-Manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeatureMembership metadata: name: configmanagement-membership spec: projectRef: external: PROJECT_ID location: global membershipRef: name: asm-acm-tutorial featureRef: name: configmanagement configmanagement: configSync: sourceFormat: unstructured git: policyDir: asm-acm-tutorial/root-sync/init secretType: none syncBranch: main syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples policyController: enabled: true referentialRulesEnabled: true templateLibraryInstalled: truePolicy Controller und Config Sync sind auf Ihrem Cluster installiert. Als Nächstes beginnt Config Sync mit der Synchronisierung aller Konfigurationen des Standard-
RootSyncmit Ihrem Cluster. Diese Konfigurationen installieren und konfigurieren die folgenden Schlüsselkomponenten:Die
RepoSync-Objekte, die die Online Boutique-Anwendungen und das Ingress-Gateway konfigurieren, werden synchronisiert:Da die
RepoSync-Abgleicher zusätzliche Berechtigungen benötigen, um Istio-Ressourcen zu erstellen, werden einClusterRoleund zweiRoleBinding-Objekte, die diese Berechtigungen gewähren, ebenfalls auf Ihren Cluster angewendet:
Prüfen Sie den Status, um sicherzustellen, dass Policy Controller und Config Sync erfolgreich installiert werden:
gcloud beta container fleet config-management statusDie Ausgabe sieht etwa so aus:
Name: asm-acm-tutorial Status: SYNCED Last_Synced_Token: 4b3384d Sync_Branch: main Last_Synced_Time: 2022-05-04T21:32:58Z Policy_Controller: INSTALLEDWenn in den Zeilen
StatusoderPolicy_ControllerPENDINGoderNOT_INSTALLEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud beta container fleet config-management statusnoch einmal aus.Beschreiben Sie den Status, um sicherzustellen, dass Cloud Service Mesh erfolgreich installiert wird:
gcloud container fleet mesh describeDie Ausgabe sieht etwa so aus:
createTime: '2022-09-13T23:12:56.477042921Z' membershipSpecs: projects/PROJECT_NUMBER/locations/global/memberships/asm-acm-tutorial: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/PROJECT_NUMBER/locations/global/memberships/asm-acm-tutorial: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: |- Revision(s) ready for use: asm-managed. All Canonical Services have been reconciled successfully. updateTime: '2022-09-14T00:19:10.571552206Z' name: projects/PROJECT_ID/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-09-14T00:19:14.135113118Z'Wenn
state.code: ERRORanstelle vonstate.code: OKangezeigt wird, warten Sie einige Minuten und führen Siegcloud container fleet mesh describenoch einmal aus. Bevor Sie mit der Anleitung fortfahren, prüfen Sie, ob das Feldservicemesh.controlPlaneManagement.details.codeden WertREVISION_READYenthält.Stellen Sie die Beispielanwendung Online Boutique und Ingress-Gateway bereit.
Mit dem folgenden Befehl wird
sedverwendet, um das Manifestacm-config.yamlzu aktualisieren. So ruft Config Sync die Ressourcen ab, die Sie zum Bereitstellen des Ingress-Gateways und der Beispielanwendung benötigen.sed -i "s,root-sync/init,root-sync/deployments,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlBeachten Sie, dass dieser Schritt einige Minuten dauern kann.
Rufen Sie den Config Sync-Status für
RootSyncund die beidenRepoSyncsauf:gcloud alpha anthos config sync repo describeDie Ausgabe sieht etwa so aus:
getting 3 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "95a30c052566357afb9db3d7f6153d9c0f219c03", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/deployments@main", "status": "SYNCED" }, { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "95a30c052566357afb9db3d7f6153d9c0f219c03", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/ingress-gateway/deployments@main", "status": "SYNCED" }, { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "95a30c052566357afb9db3d7f6153d9c0f219c03", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/online-boutique/deployments@main", "status": "SYNCED" } ]Wenn
status: RECONCILINGanstelle vonstatus: SYNCEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describenoch einmal aus.Wenn Sie nur die Informationen zu einem Repository aufrufen möchten, können Sie die Flags
--sync-nameund--sync-namespaceverwenden. Fügen Sie das Flag--managed-resourceshinzu, um die verwalteten Ressourcen im Detail anzusehen. Weitere Informationen finden Sie unter Config Sync-Status auf mehreren Clustern ansehen.Warten Sie, bis die öffentliche IP-Adresse des Ingress-Gateways bereitgestellt wurde:
until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; doneRufen Sie die öffentliche IP-Adresse des Ingress-Gateways ab:
EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")Rufen Sie die IP-Adresse Ihres Browsers auf, um zu prüfen, ob die Online Boutique-Anwendung erfolgreich bereitgestellt wurde:
echo http://${EXTERNAL_IP}Wenden Sie Einschränkungen an, um die Einfügung von Sidecar-Proxys zu erzwingen.
Der folgende Befehl verwendet
sed, um das Manifestacm-config.yamlzu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/deployments,root-sync/enforce-sidecar-injection,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlDer vorherige Befehl wendet die folgenden Ressourcen an:
Eine
K8sRequiredLabels-Constraint, die erfordert, dassNamespaceim Mesh-Netzwerk das spezifische Cloud Service Mesh-Sidecar-Proxy-Einfügungslabel enthält:Eine
AsmSidecarInjection-Constraint, die verhindert, dass jederPodim Mesh-Netzwerk die Istio-Proxy-Sidecar-Einfügung umgeht:
Rufen Sie den Config Sync-Status für
RootSyncauf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemDie Ausgabe sieht etwa so aus:
getting 1 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-sidecar-injection@main", "status": "SYNCED" } ]Wenn
status: RECONCILINGanstelle vonstatus: SYNCEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describenoch einmal aus.Prüfen Sie, ob
Constraintserstellt wurden:kubectl get constraintsEs kann einige Minuten dauern, bis Policy Controller diese Einschränkungen auswertet. Wenn in der Spalte
TOTAL-VIOLATIONSkeine Werte angezeigt werden, warten Sie und führen Siekubectl get constraintsnoch einmal aus.Die Ausgabe sieht etwa so aus:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS podsidecarinjectionannotation.constraints.gatekeeper.sh/pod-sidecar-injection-annotation deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label deny 0Da wir
NamespacesundPodsordnungsgemäß eingerichtet haben, gibt es0TOTAL-VIOLATIONSfür dieseConstraints.Wenn diese
Constraintsbei der Arbeit angezeigt werden sollen, erstellen Sie in Ihrem ClusterNamespaceohnelabeloderannotation:kubectl create namespace testDie Ausgabe sieht in etwa so aus:
Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [namespace-sidecar-injection-label] you must provide labels: {"istio-injection"}Wenden Sie Einschränkungen an, um die Traffic-Verschlüsselung zu erzwingen.
Der folgende Befehl verwendet
sed, um das Manifestacm-config.yamlzu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/enforce-sidecar-injection,root-sync/enforce-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlDer vorherige Befehl wendet die folgenden Ressourcen an:
Eine
AsmPeerAuthnMeshStrictMtls-Constraint, die die mTLS-PeerAuthenticationauf Mesh-Netzwerkebene im Namespaceistio-systemerzwingt:Eine referenzielle Einschränkung
Configim Namespacegatekeeper-system. Mit dieser referenziellen Einschränkung kannAsmPeerAuthnMeshStrictMtlsConstraintauf ein anderes Objekt in ihrer Definition verweisen (z. B. nach einerPeerAuthenticationinistio-systemNamespacesuchen):Eine
DestinationRuleTLSEnabledConstraint, die die Deaktivierung von TLS für alle Hosts und Hostteilmengen in IstioDestinationRulesuntersagt:Eine
AsmPeerAuthnStrictMtls-Constraint, die erzwingt, dass allePeerAuthenticationsden mTLS-BefehlSTRICTnicht überschreiben können:
Rufen Sie den Config Sync-Status für
RootSyncauf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemDie Ausgabe sieht etwa so aus:
getting 1 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-strict-mtls@main", "status": "SYNCED" } ]Wenn
status: RECONCILINGanstelle vonstatus: SYNCEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describenoch einmal aus.Führen Sie den folgenden Befehl aus, um weitere Informationen zur Verletzung von
PeerAuthenticationabzurufen:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jqDie Ausgabe sieht etwa so aus:
[ { "enforcementAction": "deny", "group": "constraints.gatekeeper.sh", "kind": "AsmPeerAuthnMeshStrictMtls", "message": "Root namespace <istio-system> does not have a strict mTLS PeerAuthentication", "name": "mesh-level-strict-mtls", "version": "v1beta1" } ]Beheben Sie das Problem, indem Sie eine
PeerAuthenticationimistio-systembereitstellen. Wenn Sie verhindern möchten, dass alle Dienste im Mesh-Netzwerk Klartext-Traffic akzeptieren, legen Sie eine Mesh-weitePeerAuthentication-Richtlinie mit dem mTLS-Modus aufSTRICTfest. Wenn Sie die Richtlinie bereitstellen, stellt die Steuerungsebene automatisch TLS-Zertifikate bereit, sodass Arbeitslasten sich gegenseitig authentifizieren können.Der folgende Befehl verwendet
sed, um das Manifestacm-config.yamlzu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlDer vorhergehende Befehl wendet die folgenden
STRICT-mTLS-PeerAuthenticationauf den Namespaceistio-systeman. Dadurch wird mTLSSTRICTauf das gesamte Mesh-Netzwerk angewendet:Rufen Sie den Config Sync-Status für
RootSyncauf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemDie Ausgabe sieht etwa so aus:
getting 1 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-strict-mtls@main", "status": "SYNCED" } ]Wenn
status: RECONCILINGanstelle vonstatus: SYNCEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describenoch einmal aus.Prüfen Sie, ob
Constraintserstellt wurden:kubectl get constraintsBeachten Sie, dass es einige Minuten dauern kann, bis Policy Controller diese
Constraintsauswertet. Warten Sie und führen Sie den Befehlkubectl get constraintsnoch einmal aus, bis in jeder Zeile Werte in der SpalteTOTAL-VIOLATIONSangezeigt werden.Die Ausgabe sieht etwa so aus:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS destinationruletlsenabled.constraints.gatekeeper.sh/destination-rule-tls-enabled deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/peerauthentication-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmsidecarinjection.constraints.gatekeeper.sh/pod-sidecar-injection-annotation deny 0Wenden Sie Einschränkungen an, um eine detaillierte Zugriffssteuerung zu erzwingen.
Der folgende Befehl verwendet
sed, um das Manifestacm-config.yamlzu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/fix-strict-mtls,root-sync/enforce-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlDer vorherige Befehl wendet die folgenden Ressourcen an:
Eine
AsmAuthzPolicyDefaultDeny-Constraint, die die Standard-Ablehnungs-AuthorizationPolicyauf Mesh-Netzwerkebene im Namespaceistio-systemerzwingt:Eine
AsmAuthzPolicyEnforceSourcePrincipals-Constraint, die erzwingt, dassAuthorizationPoliciesdetaillierte Quellhauptkonten definieren (außer „*“). Nur das Ingress-Gateway im Namespaceasm-ingressist eine Ausnahme von dieser Regel, um den Traffic von den Endnutzern zu empfangen und an diefrontend-Anwendung von Online Boutique weiterzuleiten.
Rufen Sie den Config Sync-Status für
RootSyncauf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemDie Ausgabe sieht etwa so aus:
getting 1 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-authorization-policies@main", "status": "SYNCED" } ]Wenn
status: RECONCILINGanstelle vonstatus: SYNCEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describenoch einmal aus.Führen Sie den folgenden Befehl aus, um weitere Informationen zur zugehörigen Verletzung zu erhalten:
kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}' | jqDie Ausgabe sieht etwa so aus:
[ { "enforcementAction": "deny", "group": "constraints.gatekeeper.sh", "kind": "AsmAuthzPolicyDefaultDeny", "message": "Root namespace <istio-system> does not have a default deny AuthorizationPolicy", "name": "default-deny-authorization-policies", "version": "v1beta1" } ]Beheben Sie das Problem, indem Sie
AuthorizationPolicyim Namespaceistio-systembereitstellen.Der folgende Befehl verwendet
sed, um das Manifestacm-config.yamlzu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlDer vorherige Befehl wendet die folgende
AuthorizationPolicyzum Alles-Ablehnen im Namespaceistio-systeman:Rufen Sie den Config Sync-Status für
RootSyncauf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemDie Ausgabe sieht etwa so aus:
getting 1 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-default-deny-authorization-policy@main", "status": "SYNCED" } ]Wenn
status: RECONCILINGanstelle vonstatus: SYNCEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describenoch einmal aus.Prüfen Sie, ob
Constraintserstellt wurden:kubectl get constraintsBeachten Sie, dass es einige Minuten dauern kann, bis Policy Controller diese
Constraintsauswertet. Warten Sie und führen Sie den Befehlkubectl get constraintsnoch einmal aus, bis in jeder Zeile Werte in der SpalteTOTAL-VIOLATIONSangezeigt werden.Die Ausgabe sieht etwa so aus:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmsidecarinjection.constraints.gatekeeper.sh/pod-sidecar-injection-annotation deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS destinationruletlsenabled.constraints.gatekeeper.sh/destination-rule-tls-enabled deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/peerauthentication-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicyenforcesourceprincipals.constraints.gatekeeper.sh/authz-source-principals-not-all deny 0Rufen Sie die Online Boutique-Anwendung in Ihrem Browser auf:
echo http://${EXTERNAL_IP}Sie sollten den Fehler
RBAC: access deniederhalten. Dieser bestätigt, dass die standardmäßige AblehnungAuthorizationPolicyauf das gesamte Mesh-Netzwerk angewendet wird.Zur Behebung dieses Problems können Sie detailliertere
AuthorizationPoliciesin den Namespacesasm-ingressundonlineboutiquebereitstellen.Der folgende Befehl verwendet
sed, um das Manifestacm-config.yamlzu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlDer vorherige Befehl wendet die folgenden Ressourcen an:
Eine
AuthorizationPolicyim Namespaceasm-ingress:Eine
AuthorizationPolicypro Anwendung im Namespaceonlineboutique. Hier ist das Beispiel für die Anwendungcartservice:Ein
ServiceAccountpro Anwendung in den Namespacesasm-ingressundonlineboutique, damit eine eindeutige Identität pro Anwendung alsprincipalin denAuthorizationPoliciesausgewertet wird. Hier sehen Sie das Beispiel für die Anwendungcartservice:
Rufen Sie den Config Sync-Status für
RootSyncund die beidenRepoSyncsauf:gcloud alpha anthos config sync repo describeDie Ausgabe sieht etwa so aus:
getting 3 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/deploy-authorization-policies@main", "status": "SYNCED" }, { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/ingress-gateway/authorization-policies@main", "status": "SYNCED" }, { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/online-boutique/authorization-policies@main", "status": "SYNCED" } ]Wenn
status: RECONCILINGanstelle vonstatus: SYNCEDangezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describenoch einmal aus.Wenn Sie nur die Informationen zu einem Repository aufrufen möchten, können Sie die Flags
--sync-nameund--sync-namespaceverwenden. Wenn Sie die verwalteten Ressourcen im Detail ansehen möchten, können Sie das Flag--managed-resourceshinzufügen. Weitere Informationen finden Sie unter Config Sync-Status auf mehreren Clustern ansehen.Rufen Sie die Online Boutique-Anwendung noch einmal in Ihrem Browser auf:
echo http://${EXTERNAL_IP}Wenn Sie einige Minuten warten, sollte die Website jetzt wie erwartet erfolgreich funktionieren.
Rufen Sie in der Google Cloud Console die Seite GKE Enterprise Security auf.
In der Richtlinienzusammenfassung wird der Status der Anwendungssicherheit angezeigt, einschließlich Dienstzugriffssteuerung (
AuthorizationPolicies) und mTLS.Klicken Sie auf Richtlinienprüfung, um den Status der Arbeitslastrichtlinie für den Cluster und beide Namespaces (
asm-ingressundonlineboutique) anzuzeigen.Die Karten für die Dienstzugriffssteuerung und den mTLS-Status bieten eine allgemeine Übersicht.

Die Liste Arbeitslasten zeigt die Dienstzugriffssteuerung und den mTLS-Status der einzelnen Arbeitslasten an.

Einen GKE-Cluster einrichten
In diesem Abschnitt erstellen Sie einen GKE-Cluster und registrieren ihn dann für eine Flotte. Flotten sind einGoogle Cloud -Konzept für die logische Organisation von Clustern und anderen Ressourcen, mit dem Sie Multi-Cluster-Funktionen nutzen und verwalten sowie einheitliche Richtlinien auf Ihre Systeme anwenden können.
Der Cluster, den Sie in diesem Abschnitt erstellen, ist der Cluster, auf dem Sie Cloud Service Mesh, Policy Controller und Config Sync installieren. Es ist auch der Cluster, in dem Sie die Beispiel-Apps für die Online-Boutique bereitstellen.
Führen Sie die folgenden Schritte aus, um den Cluster einzurichten:
Repositories entdecken
Im folgenden Installationsabschnitt wenden Sie eine Manifestdatei acm-config.yaml an. Mit diesem Manifest wird Ihr Cluster für die Synchronisierung aus dem Ordner asm-acm-tutorial des Beispiel-Repositorys konfiguriert. Dieser Ordner enthält alle Konfigurationsdateien, die Sie für die weitere Ausführung dieser Anleitung benötigen.
Zur Vereinfachung dieser Anleitung verwenden Sie sed-Befehle, um acm-config.yaml zu aktualisieren. Mit der Datei acm-config.yaml stellt Config Sync die Manifeste bereit, die für jeden Schritt dieser Anleitung erforderlich sind.
Durch das Aktualisieren einer einzelnen Datei können Sie sich auf die Konzepte und den Ablauf der Sicherung Ihrer Cluster, Mesh-Netzwerke und Anwendungen konzentrieren, ohne die Dateien wiederholt bearbeiten und git-Befehle wiederholt ausführen zu müssen.
Um die Möglichkeit von Config Sync zu nutzen, mehrere Repositories zu synchronisieren, verwenden Sie die folgenden Ressourcen:
Policy Controller, Config Sync und verwaltetes Cloud Service Mesh installieren
Nachdem Sie nun Ihren Cluster erstellt und registriert haben, können Sie Config Sync, Policy Controller und Cloud Service Mesh auf Ihrem Cluster installieren und Ihren Cluster für die Synchronisierung mit den Configs im Standard-RootSync konfigurieren:
Ingress-Gateway und Beispielanwendung bereitstellen
In diesem Abschnitt stellen Sie die Beispielanwendung Online Boutique und ein Ingress-Gateway bereit, um eingehenden Traffic zu verwalten.
Richtlinien zum Schutz Ihres Mesh-Netzwerks erzwingen
In den folgenden Abschnitten nutzen Sie Policy Controller, um Richtlinien aus dem Cloud Service Mesh-Richtlinien-Bundle durch das Erstellen von Einschränkungen zu erzwingen.
Sidecar-Proxys-Einfügung erzwingen
In diesem Abschnitt erzwingen Sie Richtlinien, damit für alle Arbeitslasten im Mesh-Netzwerk die automatische Sidecar-Einfügung aktiviert ist.
Traffic-Verschlüsselung erzwingen
In diesem Abschnitt erzwingen Sie Richtlinien, damit der gesamte Traffic im Mesh-Netzwerk verschlüsselt wird.
Detaillierte Zugriffssteuerung erzwingen
In diesem Abschnitt erzwingen Sie Richtlinien, damit alle Arbeitslasten im Mesh-Netzwerk über eine detaillierte Zugriffssteuerung verfügen.
Status von GKE Enterprise-Sicherheitsfunktionen ansehen
Sie können den Status von GKE Enterprise-Sicherheitsfunktionen, einschließlich Authentifizierungs- und Autorisierungsrichtlinien, in der Google Cloud Console aufrufen.
Sie haben jetzt Ihren Cluster und Ihr Mesh mit Policy Controller und Config Sync gesichert.