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 Anthos 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 Anthos Service Mesh-Richtlinien automatisch validieren, indem Sie Anthos Config Management 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 Anthos 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 Anthos Service Mesh-Richtlinienkonfigurationen kontinuierlich erzwingen.
Das folgende Diagramm bietet eine Übersicht darüber, wie Anthos Service Mesh, Policy Controller und Config Sync in diesem Tutorial zusammenarbeiten, um die Online Boutique-Beispielanwendungen, die Sie in diesem Tutorial verwenden, zu verwalten und zu schützen:
Ziele
- Einen Google Kubernetes Engine-Cluster (GKE) erstellen und den Cluster bei einer Flotte registrieren
- Policy Controller, Config Sync und Anthos Service Mesh auf einem Cluster installieren
- Beispiel-Apps von Online Boutique und ein Ingress-Gateway bereitstellen
- Mit dem Anthos Service Mesh-Richtlinien-Bundle können Sie die folgenden Best Practices erzwingen:
- 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 dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:
- GKE.
- Anthos. Die Abrechnung für Anthos umfasst die Abrechnung für Anthos Service Mesh und Anthos Config Management-Komponenten.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Vorbereitung
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
Umgebung vorbereiten
In diesem Abschnitt bereiten Sie Ihre Umgebung vor, damit Sie Anthos Service Mesh, Policy Controller und Config Sync installieren können:
- Öffnen Sie eine Cloud Shell-Sitzung. Klicken Sie zum Öffnen dieser Sitzung rechts oben auf dieser Seite auf terminal Cloud Shell aktivieren und dann auf Bestätigen. In einem Frame im unteren Teil der Seite wird eine Cloud Shell-Sitzung geöffnet. Führen Sie in dieser Cloud Shell-Sitzung die folgenden Befehle aus.
Führen Sie ein Upgrade auf die neueste Version der Google Cloud CLI durch:
gcloud components update
Erstellen Sie zum Speichern der in dieser Anleitung erstellten Dateien ein Verzeichnis mithilfe einer Umgebungsvariablen:
WORK_DIR=~/asm-acm-tutorial-dir mkdir $WORK_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 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 services enable \ container.googleapis.com \ gkehub.googleapis.com \ mesh.googleapis.com \ anthos.googleapis.com
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 Anthos 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 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}
Dieser Vorgang kann mehr als fünf Minuten dauern.
Die entsprechende Ausgabe sieht etwa so aus:
kubeconfig entry generated for asm-acm-tutorial. NAME: asm-acm-tutorial LOCATION: us-east4-a MASTER_VERSION: 1.21.10-gke.2000 MASTER_IP: 34.85.159.120 MACHINE_TYPE: e2-standard-4 NODE_VERSION: 1.21.10-gke.2000 NUM_NODES: 4 STATUS: RUNNING
Registrieren Sie den Cluster auf einer Flotte.
gcloud container fleet memberships register ${CLUSTER} \ --project=${PROJECT_ID} \ --gke-cluster=${CLUSTER_ZONE}/${CLUSTER} \ --enable-workload-identity
Die entsprechende 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.
Repository entdecken
Im folgenden Installationsabschnitt wenden Sie das Anthos Config Management-Manifest acm-config.yaml
an. Dieses Manifest konfiguriert Ihren Cluster für die Synchronisierung aus dem Ordner asm-acm-tutorial
des Beispiel-Repositorys für Anthos Config Management. Dieser Ordner enthält alle Konfigurationsdateien, die Sie für die weitere Ausführung dieser Anleitung benötigen.
Die Ausführung dieser Anleitung lässt sich vereinfachen, wenn Sie sed
-Befehle verwenden, um die Datei acm-config.yaml
zu aktualisieren und so die erforderlichen Manifeste für jeden Schritt bereitstellen. 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 add|commit|push
-Befehle ausführen zu müssen.
Bevor Sie das Manifest acm-config.yaml
anwenden, ist es hilfreich, die Gesamtstruktur und den Inhalt des Repositorys zu verstehen.
Damit Config Sync die Synchronisierung mit mehreren Repositories nutzen kann, enthält das Repository asc-acm-tutorial
zwei Ordner auf der obersten Ebene:
root-sync
und online-boutique
.
Tippen Sie auf den entsprechenden root-sync
-Ordner.
Der Ordner root-sync
ist das Root-Repository.
Dieses Repository ist in mehrere Unterordner unterteilt. Jeder dieser Unterordner enthält Ressourcen und Richtlinien für verschiedene Abschnitte dieser Anleitung.
Es gibt zwei Ordner mit Ressourcen zum Einrichten der Beispiel-App „Online Boutique” und des Ingress-Gateways:
init
: Ressourcen zum Einrichten derRepoSync
für die Online Boutique-Anwendungen.deployments
: Ressourcen zum Bereitstellen des Ingress-Gateways und der Namespaces und Anwendungen für die Online Boutique.
Es gibt drei Ordner, die Ressourcen zum Bereitstellen der verschiedenen Anthos Service Mesh-Richtlinien enthalten:
enforce-sidecar-injection
: Ressourcen zum Bereitstellen von Richtlinien, um die Sidecar-Einfügung fürNamespace
undPod
zu erzwingenenforce-strict-mtls
: Ressourcen zum Bereitstellen von Richtlinien, umSTRICT
mTLS für das gesamte Mesh-Netzwerk und für jedePeerAuthentication
zu erzwingenenforce-authorization-policies
: Ressourcen zum Bereitstellen von Richtlinien, um die Standard-deny
-AuthorizationPolicy
für das gesamte Mesh-Netzwerk zu erzwingen und detaillierte Quellhauptkonten für alleAuthorizationPolicies
zu erzwingen.
Die verbleibenden drei Ordner enthalten Ressourcen zum Bereitstellen der Ressourcen, mit denen die Anthos Service Mesh-Richtlinienverstöße behoben werden:
fix-strict-mtls
: Ressourcen zum Bereitstellen des standardmäßigenSTRICT
-mTLS-PeerAuthentication
im Namespaceistio-system
.fix-default-deny-authorization-policy
: Ressourcen zum Bereitstellen des standardmäßigendeny
AuthorizationPolicy
im Namespaceistio-system
.deploy-authorization-policies
: Ressourcen zur Bereitstellung detaillierterAuthorizationPolicy
-Ressourcen, damit die Beispiel-Apps von Online Boutique funktionieren.
Tippen Sie auf den entsprechenden online-boutique
-Ordner.
Der Ordner online-boutique
ist ein Namespace-Repository.
Dieses Repository enthält die Ressourcen, die Sie zum Bereitstellen der Online Boutique-Beispielanwendungen mit Kustomize benötigen.
Policy Controller, Config Sync und verwaltetes Anthos Service Mesh installieren
Nachdem Sie nun Ihren Cluster erstellt und registriert haben, können Sie Config Sync, Policy Controller und Anthos Service Mesh auf Ihrem Cluster installieren und Ihren Cluster für die Synchronisierung mit den Configs im Ordner asc-acm-tutorial
konfigurieren:
Aktivieren Sie Anthos Config Management in Ihrer Flotte:
gcloud beta container fleet config-management enable
Aktivieren Sie Anthos Service Mesh in Ihrer Flotte:
gcloud container fleet mesh enable
Aktivieren Sie die automatische Verwaltung der Anthos Service Mesh-Steuerungsebene, damit Google die empfohlene Konfiguration von verwaltetem Anthos Service Mesh anwenden kann:
gcloud container fleet mesh update \ --control-plane automatic \ --memberships ${CLUSTER}
Erstellen Sie zum Installieren und Konfigurieren von Config Sync und Policy Controller das folgende Anthos Config Management-Manifest:
cat <<EOF > $WORK_DIR/acm-config.yaml applySpecVersion: 1 spec: policyController: enabled: true templateLibraryInstalled: true referentialRulesEnabled: true configSync: enabled: true sourceFormat: unstructured syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples syncBranch: main secretType: none policyDir: asm-acm-tutorial/root-sync/init EOF
Weitere Informationen zu den Anthos Config Management-Konfigurationsfeldern finden Sie unter gcloud apply spec fields.
Wenden Sie die Datei an:
gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
Nachdem Sie diese Datei angewendet haben, sind Policy Controller und Config Sync auf Ihrem Cluster installiert. Als Nächstes beginnt Config Sync mit der Synchronisierung aller Konfigurationen im Ordner
asm-acm-tutorial
mit Ihrem Cluster. Diese Konfigurationen installieren und konfigurieren die folgenden Schlüsselkomponenten:Das
RepoSync
-Objekt, das die Online-Boutique-Anwendung konfiguriert, wird synchronisiert:Da der
RepoSync
-Abgleicher zusätzliche Berechtigungen benötigt, um Istio-Ressourcen zu erstellen, enthält das Repository auch Clusterrollen und Clusterrollenbindungen, um diese Berechtigungen zu erteilen. Dies ist das Manifest für die Clusterrolle, die automatisch auf Ihren Cluster angewendet wird:
Prüfen Sie den Status von Anthos Config Management, um sicherzustellen, dass Policy Controller und Config Sync erfolgreich installiert werden:
gcloud beta container fleet config-management status
Die entsprechende 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: 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, um sicherzustellen, dass Anthos Service Mesh erfolgreich installiert wird:
gcloud container fleet mesh describe
Die entsprechende Ausgabe sieht etwa so aus:
createTime: '2022-05-05T23:33:44.041608250Z' membershipSpecs: projects/841604900168/locations/global/memberships/asm-acm-tutorial: mesh: controlPlane: AUTOMATIC membershipStates: projects/841604900168/locations/global/memberships/asm-acm-tutorial: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-05-05T23:45:38.800808838Z' name: projects/PROJECT_ID/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-05-05T23:45:44.848011023Z'
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 bereit, um eingehenden Traffic zu verwalten.
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" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
Beachten Sie, dass dieser Schritt einige Minuten dauern kann.
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/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.Zum Aufrufen verwalteter Ressourcen können Sie das Flag
--managed-resources
hinzufügen. Weitere Informationen finden Sie unter Config Sync-Status auf mehreren Clustern ansehen.Rufen Sie den Config Sync-Status für
RepoSync
auf:gcloud alpha anthos config sync repo describe \ --sync-name repo-sync \ --sync-namespace onlineboutique
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//online-boutique/deployments@main:HEAD", "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.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 Anthos 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.
Der folgende Befehl verwendet
sed
, um die Dateiacm-config.yaml
zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/deployments,root-sync/enforce-sidecar-injection,g" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
Der vorherige Befehl wendet die folgenden Ressourcen an:
Eine
K8sRequiredLabels
-Constraint
, die erfordert, dassNamespace
im Mesh-Netzwerk das spezifische Anthos Service Mesh-Sidecar-Proxy-Einfügungslabel enthält:Eine
AsmSidecarInjection
-Constraint
, die verhindert, dass jeder Pod 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 die Dateiacm-config.yaml
zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/enforce-sidecar-injection,root-sync/enforce-strict-mtls,g" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_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", "kind": "AsmPeerAuthnMeshStrictMtls", "message": "Root namespace <istio-system> does not have a strict mTLS PeerAuthentication", "name": "mesh-level-strict-mtls" } ]
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 die Dateiacm-config.yaml
zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" $WORK_DIR/acm-config.yaml gcloud beta container hub config-management apply \ --membership ${CLUSTER} \ --config $WORK_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 die Dateiacm-config.yaml
zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.sed -i "s,root-sync/fix-strict-mtls,root-sync/enforce-authorization-policies,g" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_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", "kind": "AsmAuthzPolicyDefaultDeny", "message": "Root namespace <istio-system> does not have a default deny AuthorizationPolicy", "name": "default-deny-authorization-policies" } ]
Beheben Sie das Problem, indem Sie
AuthorizationPolicy
im Namespaceistio-system
bereitstellen.Der folgende Befehl verwendet
sed
, um die Dateiacm-config.yaml
zu 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" $WORK_DIR/acm-config.yaml gcloud beta container hub config-management apply \ --membership ${CLUSTER} \ --config $WORK_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
für das gesamte Mesh-Netzwerk gilt.Zur Behebung dieses Problems können Sie detailliertere
AuthorizationPolicies
in den Namespacesasm-ingress
undonlineboutique
bereitstellen.Der folgende Befehl verwendet
sed
, um die Dateiacm-config.yaml
zu 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" $WORK_DIR/acm-config.yaml gcloud beta container hub config-management apply \ --membership ${CLUSTER} \ --config $WORK_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
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.Rufen Sie den Config Sync-Status für
RepoSync
auf:gcloud alpha anthos config sync repo describe \ --sync-name repo-sync \ --sync-namespace onlineboutique
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/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.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 Anthos-Sicherheitsfeatures aufrufen
Sie können den Status von Anthos-Sicherheitsfeatures, einschließlich Authentifizierungs- und Autorisierungsrichtlinien, in der Google Cloud Console aufrufen.
Rufen Sie in der Console die Seite Anthos-Sicherheit 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-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
- Wechseln Sie in der Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Einzelne Ressourcen löschen
So löschen Sie die einzelnen Ressourcen:
Heben Sie die Registrierung Ihres Clusters bei der Flotte auf:
gcloud container fleet memberships unregister ${CLUSTER} \ --project=${PROJECT_ID} \ --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
Die entsprechende Ausgabe sieht 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.
Löschen Sie Ihre Cluster:
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 entsprechende Ausgabe sieht 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].
Löschen Sie die von Ihnen erstellten Dateien:
rm -r $WORK_DIR
Nächste Schritte
- Anthos Service Mesh – Best Practices für die Sicherheit
- Anthos Service Mesh-Richtlinien-Bundle.
- Einschränkungsvorlagenbibliothek von Policy Controller
- Referenzarchitekturen, Diagramme, Anleitungen und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center