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. Mit Mit Policy Controller und Config Sync können Sie Einschränkungen erzwingen für Ihre Cloud Service Mesh-Richtlinienkonfigurationen.
Im folgenden Diagramm erhalten Sie einen Überblick darüber, wie Cloud Service Mesh, In dieser Anleitung verwalten Policy Controller und Config Sync und schützen Sie ein Ingress-Gateway sowie die Beispielanwendungen für Online Boutique, die Sie in dieser Anleitung verwenden:
Ziele
- Einen Google Kubernetes Engine-Cluster (GKE) erstellen und den Cluster bei einer Flotte registrieren
- Policy Controller, Config Sync und Cloud Service Mesh in einem Cluster installieren.
- Config Sync für die Synchronisierung mehrerer Repositories konfigurieren
- Wenden Sie Best Practices zum Bereitstellen von Konfigurationen, Anwendungen und Istio-Ressourcen mit Config Sync an.
- Mit Config Sync Clusterkonfigurationen, Beispielanwendungen für die Online-Boutique und ein Ingress-Gateway bereitstellen.
- Nutzen Sie die
Cloud Service Mesh-Richtlinien-Bundle
Policy Controller, um die folgenden Best Practices für die Sicherheit durchzusetzen:
- Alle Arbeitslasten im Mesh-Netzwerk müssen eine automatische Sidecar-Einfügung haben
- Verschlüsseln Sie den gesamten Traffic im Mesh-Netzwerk.
- Alle Arbeitslasten im Mesh-Netzwerk müssen eine detaillierte Zugriffssteuerung haben.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- GKE.
- GKE Enterprise. The billing for GKE Enterprise includes billing for the Cloud Service Mesh, Config Sync, and Policy Controller.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
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.
Führen Sie ein Upgrade auf die neueste Version der Google Cloud CLI durch:
gcloud components update
Erstellen Sie ein Verzeichnis, um die in dieser Anleitung erstellten Dateien zu speichern:
mkdir ~/asm-acm-tutorial-dir
Erstellen 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_ID
durch 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.com
Config Connector
Diese Anleitung enthält Config Connector-Ressourcen. Sie können diese Ressourcen verwenden, um dieselben Aufgaben auszuführen, die Sie auf dem Tab
gcloud
ausfü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_ID
Dieser Vorgang kann mehr als eine Minute dauern.
Einen GKE-Cluster einrichten
In diesem Abschnitt erstellen Sie einen GKE-Cluster und registrieren ihn dann für eine Flotte. Environs sind ein Google 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:
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}.svc.id.goog \ --labels mesh_id=proj-${PROJECT_NUMBER}
Config Connector
Verwenden Sie die folgenden Manifeste für
ContainerCluster
undContainerNodePool
: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.svc.id.goog
Ersetzen Sie
PROJECT_NUMBER
durch den Wert der zuvor abgerufenen UmgebungsvariablenPROJECT_NUMBER
.Dieser Vorgang kann mehr als fünf Minuten dauern.
Damit der GKE-Cluster erfolgreich erstellt werden kann, beschreiben Sie seine Status:
gcloud container clusters list \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}
Die Ausgabe sieht in 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 RUNNING
Stellen 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-identity
Die Ausgabe sieht in 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-tutorial
Beschreiben Sie den Status, um sicherzustellen, dass der GKE-Cluster erfolgreich registriert wird:
gcloud container fleet memberships list
Die Ausgabe sieht in etwa so aus:
NAME EXTERNAL_ID LOCATION asm-acm-tutorial 0e12258c-8831-4d81-b5c0-5e7099a468cc global
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:
root-sync
als Repository fürRootSync
enthält alle Konfigurationen in Ihrem Cluster, einschließlichRepoSyncs
,Constraints
,ClusterRole
,RoleBindings
und Ressourcen, die in einigen System-Namespaces wieistio-system
enthalten sind.ingress-gateway
enthält als erstesRepoSync
alle Ressourcen, die für die Bereitstellung eines Ingress-Gateways und dessen schrittweise Sicherung im Laufe dieses Tutorials erforderlich sind.online-boutique
enthält als zweitesRepoSync
alle Ressourcen, die für die Bereitstellung der Online Boutique-Anwendungen und deren schrittweise Sicherung im Laufe dieses Tutorials erforderlich sind.
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:
Aktivieren Sie den Operator
ConfigManagement
, der Config Sync und Policy Controller verwaltet:gcloud
gcloud beta container fleet config-management enable
Config 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: configmanagement
Aktivieren Sie Cloud Service Mesh in Ihrer Flotte.
gcloud
gcloud container fleet mesh enable
Config 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: servicemesh
Aktivieren Sie die automatische Verwaltung von Cloud Service Mesh, damit Google Wenden Sie die empfohlene Konfiguration des verwalteten Cloud Service Mesh an:
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_AUTOMATIC
Aktivieren Sie Config Sync und Policy Controller:
gcloud
Speichern Sie das folgende Manifest als
acm-config.yaml
im 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: true
Weitere Informationen zu den Konfigurationsfeldern der Google Cloud CLI 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.yaml
Config 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: true
Policy Controller und Config Sync sind auf Ihrem Cluster installiert. Als Nächstes Config Sync beginnt mit der Synchronisierung aller Konfigurationen der Standard-
RootSync
mit Ihrem Cluster. Mit diesen Konfigurationen wird der folgende Schlüssel installiert und konfiguriert Komponenten: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 einClusterRole
und zweiRoleBinding
-Objekte, die diese Berechtigungen gewähren, ebenfalls auf Ihren Cluster angewendet:
Um die erfolgreiche Installation von Policy Controller und Prüfen Sie den Status von Config Sync:
gcloud beta container fleet config-management status
Die Ausgabe sieht in 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: INSTALLED Hierarchy_Controller: PENDING
Wenn in den Zeilen
Status
oderPolicy_Controller
PENDING
oderNOT_INSTALLED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud beta container fleet config-management status
noch einmal aus.Beschreiben Sie den Status des Cloud Service Mesh, um die erfolgreiche Installation des Cloud Service Mesh sicherzustellen:
gcloud container fleet mesh describe
Die Ausgabe sieht in 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: ERROR
anstelle vonstate.code: OK
angezeigt wird, warten Sie einige Minuten und führen Siegcloud container fleet mesh describe
noch einmal aus. Bevor Sie mit der Anleitung fortfahren, prüfen Sie, ob das Feldservicemesh.controlPlaneManagement.details.code
den WertREVISION_READY
enthält.
Ingress-Gateway und Beispielanwendung bereitstellen
In diesem Abschnitt stellen Sie die Beispielanwendung Online Boutique und ein Ingress-Gateway zur Verwaltung des eingehenden Traffics.
Stellen Sie die Beispielanwendung Online Boutique und Ingress-Gateway bereit.
Mit dem folgenden Befehl wird
sed
verwendet, um das Manifestacm-config.yaml
zu 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.yaml
Beachten Sie, dass dieser Schritt einige Minuten dauern kann.
Rufen Sie den Config Sync-Status für
RootSync
und die beidenRepoSyncs
auf:gcloud alpha anthos config sync repo describe
Die 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: RECONCILING
anstelle vonstatus: SYNCED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describe
noch einmal aus.Wenn Sie nur die Informationen zu einem Repository aufrufen möchten, können Sie die Flags
--sync-name
und--sync-namespace
verwenden. Fügen Sie das Flag--managed-resources
hinzu, 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 : ; done
Rufen 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}
Richtlinien zum Schutz Ihres Mesh-Netzwerks erzwingen
In den folgenden Abschnitten nutzen Sie Folgendes: Policy Controller, um Richtlinien über das 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.
Wenden Sie Einschränkungen an, um die Einfügung von Sidecar-Proxys zu erzwingen.
Mit dem folgenden Befehl wird
sed
verwendet, um das Manifestacm-config.yaml
zu aktualisieren. So ruft Config Sync die Ressourcen ab, die Sie zum Bereitstellen der zugehörigen Ressourcen benötigen.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.yaml
Der vorherige Befehl wendet die folgenden Ressourcen an:
Ein
K8sRequiredLabels
-Constraint
, für den Folgendes erforderlich ist:Namespace
im Mesh, um die spezifische Injection-Label des Cloud Service Mesh-Sidecar-Proxys:Eine
AsmSidecarInjection
-Constraint
, die verhindert, dass jederPod
im Mesh-Netzwerk die Istio-Proxy-Sidecar-Einfügung umgeht:
Rufen Sie den Config Sync-Status für
RootSync
auf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Die 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: RECONCILING
anstelle vonstatus: SYNCED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describe
noch einmal aus.Prüfen Sie, ob
Constraints
erstellt wurden:kubectl get constraints
Es kann einige Minuten dauern, bis Policy Controller diese Einschränkungen auswertet. Wenn in der Spalte
TOTAL-VIOLATIONS
keine Werte angezeigt werden, warten Sie und führen Siekubectl get constraints
noch 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 0
Da wir
Namespaces
undPods
ordnungsgemäß eingerichtet haben, gibt es0
TOTAL-VIOLATIONS
für dieseConstraints
.Wenn diese
Constraints
bei der Arbeit angezeigt werden sollen, erstellen Sie in Ihrem ClusterNamespace
ohnelabel
oderannotation
:kubectl create namespace test
Die 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"}
Traffic-Verschlüsselung erzwingen
In diesem Abschnitt erzwingen Sie Richtlinien, damit der gesamte Traffic im Mesh-Netzwerk verschlüsselt wird.
Wenden Sie Einschränkungen an, um die Traffic-Verschlüsselung zu erzwingen.
Der folgende Befehl verwendet
sed
, um das Manifestacm-config.yaml
zu aktualisieren und Config Sync die zugehörigen Ressourcen bereitzustellen.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.yaml
Der vorherige Befehl wendet die folgenden Ressourcen an:
Eine
AsmPeerAuthnMeshStrictMtls
-Constraint
, die die mTLS-PeerAuthentication
auf Mesh-Netzwerkebene im Namespaceistio-system
erzwingt:Eine referenzielle Einschränkung
Config
im Namespacegatekeeper-system
. Mit dieser referenziellen Einschränkung kannAsmPeerAuthnMeshStrictMtls
Constraint
auf ein anderes Objekt in ihrer Definition verweisen (z. B. nach einerPeerAuthentication
inistio-system
Namespace
suchen):Eine
DestinationRuleTLSEnabled
Constraint
, die die Deaktivierung von TLS für alle Hosts und Hostteilmengen in IstioDestinationRules
untersagt:Eine
AsmPeerAuthnStrictMtls
-Constraint
, die erzwingt, dass allePeerAuthentications
den mTLS-BefehlSTRICT
nicht überschreiben können:
Rufen Sie den Config Sync-Status für
RootSync
auf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Die 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: RECONCILING
anstelle vonstatus: SYNCED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describe
noch einmal aus.Führen Sie den folgenden Befehl aus, um weitere Informationen zur Verletzung von
PeerAuthentication
abzurufen:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jq
Die 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
PeerAuthentication
imistio-system
bereitstellen. Wenn Sie verhindern möchten, dass alle Dienste im Mesh-Netzwerk Klartext-Traffic akzeptieren, legen Sie eine Mesh-weitePeerAuthentication
-Richtlinie mit dem mTLS-Modus aufSTRICT
fest. 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.yaml
zu aktualisieren und Config Sync die zugehörigen Ressourcen bereitzustellen.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.yaml
Der vorhergehende Befehl wendet die folgenden
STRICT
-mTLS-PeerAuthentication
auf den Namespaceistio-system
an. Dadurch wird mTLSSTRICT
auf das gesamte Mesh-Netzwerk angewendet:Rufen Sie den Config Sync-Status für
RootSync
auf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Die 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: RECONCILING
anstelle vonstatus: SYNCED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describe
noch einmal aus.Prüfen Sie, ob
Constraints
erstellt wurden:kubectl get constraints
Beachten Sie, dass es einige Minuten dauern kann, bis Policy Controller diese
Constraints
auswertet. Warten Sie und führen Sie den Befehlkubectl get constraints
noch einmal aus, bis in jeder Zeile Werte in der SpalteTOTAL-VIOLATIONS
angezeigt 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 0
Detaillierte Zugriffssteuerung erzwingen
In diesem Abschnitt erzwingen Sie Richtlinien, damit alle Arbeitslasten im Mesh-Netzwerk über eine detaillierte Zugriffssteuerung verfügen.
Wenden Sie Einschränkungen an, um eine detaillierte Zugriffssteuerung zu erzwingen.
Der folgende Befehl verwendet
sed
, um das Manifestacm-config.yaml
zu aktualisieren und Config Sync die zugehörigen Ressourcen bereitzustellen.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.yaml
Der vorherige Befehl wendet die folgenden Ressourcen an:
Eine
AsmAuthzPolicyDefaultDeny
-Constraint
, die die Standard-Ablehnungs-AuthorizationPolicy
auf Mesh-Netzwerkebene im Namespaceistio-system
erzwingt:Eine
AsmAuthzPolicyEnforceSourcePrincipals
-Constraint
, die erzwingt, dassAuthorizationPolicies
detaillierte Quellhauptkonten definieren (außer „*“). Nur das Ingress-Gateway im Namespaceasm-ingress
ist 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
RootSync
auf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Die 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: RECONCILING
anstelle vonstatus: SYNCED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describe
noch 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}' | jq
Die 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
AuthorizationPolicy
im Namespaceistio-system
bereitstellen.Mit dem folgenden Befehl wird
sed
verwendet, um das Manifestacm-config.yaml
zu aktualisieren. So ruft Config Sync die Ressourcen ab, die Sie zum Bereitstellen der zugehörigen Ressourcen benötigen.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.yaml
Der vorherige Befehl wendet die folgende
AuthorizationPolicy
zum Alles-Ablehnen im Namespaceistio-system
an:Rufen Sie den Config Sync-Status für
RootSync
auf:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Die 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: RECONCILING
anstelle vonstatus: SYNCED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describe
noch einmal aus.Prüfen Sie, ob
Constraints
erstellt wurden:kubectl get constraints
Beachten Sie, dass es einige Minuten dauern kann, bis Policy Controller diese
Constraints
auswertet. Warten Sie und führen Sie den Befehlkubectl get constraints
noch einmal aus, bis in jeder Zeile Werte in der SpalteTOTAL-VIOLATIONS
angezeigt 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 0
Rufen Sie die Online Boutique-Anwendung in Ihrem Browser auf:
echo http://${EXTERNAL_IP}
Sie sollten den Fehler
RBAC: access denied
erhalten. Dieser bestätigt, dass die standardmäßige AblehnungAuthorizationPolicy
auf das gesamte Mesh-Netzwerk angewendet wird.Zur Behebung dieses Problems können Sie detailliertere
AuthorizationPolicies
in den Namespacesasm-ingress
undonlineboutique
bereitstellen.Der folgende Befehl verwendet
sed
, um das Manifestacm-config.yaml
zu aktualisieren und Config Sync die zugehörigen Ressourcen bereitzustellen.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.yaml
Der vorherige Befehl wendet die folgenden Ressourcen an:
Eine
AuthorizationPolicy
im Namespaceasm-ingress
:Eine
AuthorizationPolicy
pro Anwendung im Namespaceonlineboutique
. Hier ist das Beispiel für die Anwendungcartservice
:Ein
ServiceAccount
pro Anwendung in den Namespacesasm-ingress
undonlineboutique
, damit eine eindeutige Identität pro Anwendung alsprincipal
in denAuthorizationPolicies
ausgewertet wird. Hier sehen Sie das Beispiel für die Anwendungcartservice
:
Rufen Sie den Config Sync-Status für
RootSync
und die beidenRepoSyncs
auf:gcloud alpha anthos config sync repo describe
Die 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: RECONCILING
anstelle vonstatus: SYNCED
angezeigt wird, warten Sie einige Minuten und führen Siegcloud alpha anthos config sync repo describe
noch einmal aus.Wenn Sie nur die Informationen zu einem Repository aufrufen möchten, können Sie die Flags
--sync-name
und--sync-namespace
verwenden. Wenn Sie die verwalteten Ressourcen im Detail ansehen möchten, können Sie das Flag--managed-resources
hinzufü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.
Status von GKE Enterprise-Sicherheitsfeatures ansehen
Sie können den Status von GKE Enterprise-Sicherheitsfeatures, einschließlich Authentifizierungs- und Autorisierungsrichtlinien, in der Google Cloud Console aufrufen.
Öffnen Sie in der Google Cloud Console die Seite GKE Enterprise-Sicherheit.
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-ingress
undonlineboutique
) 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.
Sie haben jetzt Ihren Cluster und Ihr Mesh mit Policy Controller und Config Sync gesichert.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Einzelne Ressourcen löschen
So löschen Sie die einzelnen Ressourcen:
Heben Sie die Registrierung Ihres Clusters bei der Flotte auf:
gcloud
gcloud container fleet memberships unregister ${CLUSTER} \ --project=${PROJECT_ID} \ --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
Die Ausgabe sieht in etwa so aus:
kubeconfig entry generated for asm-acm-tutorial. Waiting for membership to be deleted...done. Deleting membership CR in the cluster...done. Deleting namespace [gke-connect] in the cluster...done.
Config Connector
kubectl delete -f ~/asm-acm-tutorial-dir/fleet-membership.yaml
Löschen Sie Ihre Cluster:
gcloud
gcloud container clusters delete ${CLUSTER} \ --zone ${CLUSTER_ZONE}
Drücken Sie
y
, wenn Sie dazu aufgefordert werden. Die Verarbeitung dieses Befehls kann etwa fünf Minuten dauern.Die Ausgabe sieht in etwa so aus:
Deleting cluster asm-acm-tutorial...done. Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-east4-a/clusters/asm-acm-tutorial].
Config Connector
kubectl delete -f ~/asm-acm-tutorial-dir/container-cluster.yaml
Löschen Sie die von Ihnen erstellten Dateien:
rm -r ~/asm-acm-tutorial-dir
Nächste Schritte
- Best Practices für die Sicherheit von Cloud Service Mesh
- Cloud Service Mesh-Richtlinien-Bundle
- Einschränkungsvorlagenbibliothek von Policy Controller
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center