Mit Cloud Service Mesh, Config Sync und Policy Controller die Sicherheit Ihrer Anwendung erhöhen


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:

Ein Diagramm, das die Architektur zeigt, die Sie für diese Anleitung erstellen

Ziele

  • Einen Google Kubernetes Engine-Cluster (GKE) erstellen und den Cluster bei einer Flotte registrieren
  • Policy Controller, Config Sync und Cloud Service Mesh auf 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.
  • Verwenden Sie das Cloud Service Mesh-Richtlinien-Bundle von Policy Controller, um die folgenden Best Practices für die Sicherheit zu 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 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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. 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:

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. Führen Sie ein Upgrade auf die neueste Version der Google Cloud CLI durch:

    gcloud components update
    
  3. Erstellen Sie zum Speichern der in dieser Anleitung erstellten Dateien ein Verzeichnis:

    mkdir ~/asm-acm-tutorial-dir
    
  4. 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.

  5. 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:

  1. 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 und ContainerNodePool:

    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 Umgebungsvariablen PROJECT_NUMBER.

    Dieser Vorgang kann mehr als fünf Minuten dauern.

  2. 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 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
    
  3. Stellen Sie eine Verbindung zum GKE-Cluster her:

    gcloud container clusters get-credentials ${CLUSTER} \
        --zone ${CLUSTER_ZONE} \
        --project ${PROJECT_ID}
    
  4. 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
    
  5. 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ür RootSync enthält alle Konfigurationen in Ihrem Cluster, einschließlich RepoSyncs, Constraints, ClusterRole, RoleBindings und Ressourcen, die in einigen System-Namespaces wie istio-system enthalten sind.
  • ingress-gateway enthält als erstes RepoSync 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 zweites RepoSync 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:

  1. 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
    
  2. 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
    
  3. Aktivieren 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_AUTOMATIC
    
  4. 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 beginnt Config Sync mit der Synchronisierung aller Konfigurationen des Standard-RootSync mit 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:

      apiVersion: configsync.gke.io/v1beta1
      kind: RepoSync
      metadata:
        name: repo-sync
      spec:
        override:
          enableShellInRendering: true
        sourceFormat: unstructured
        git:
          repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
          revision: HEAD
          branch: main
          dir: asm-acm-tutorial/online-boutique/init
          auth: none
      apiVersion: configsync.gke.io/v1beta1
      kind: RepoSync
      metadata:
        name: repo-sync
      spec:
        override:
          enableShellInRendering: true
        sourceFormat: unstructured
        git:
          repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
          revision: HEAD
          branch: main
          dir: asm-acm-tutorial/ingress-gateway/init
          auth: none
    • Da die RepoSync-Abgleicher zusätzliche Berechtigungen benötigen, um Istio-Ressourcen zu erstellen, werden ein ClusterRole und zwei RoleBinding-Objekte, die diese Berechtigungen gewähren, ebenfalls auf Ihren Cluster angewendet:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        labels:
          rbac.authorization.k8s.io/aggregate-to-edit: "true"
        name: custom:aggregate-to-edit:istio
      rules:
      - apiGroups:
        - "networking.istio.io"
        - "security.istio.io"
        resources:
        - "virtualservices"
        - "authorizationpolicies"
        - "gateways"
        verbs:
        - "*"
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: repo-sync
      subjects:
      - kind: ServiceAccount
        name: ns-reconciler-onlineboutique
        namespace: config-management-system
      roleRef:
        kind: ClusterRole
        name: edit
        apiGroup: rbac.authorization.k8s.io
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: repo-sync
      subjects:
      - kind: ServiceAccount
        name: ns-reconciler-asm-ingress
        namespace: config-management-system
      roleRef:
        kind: ClusterRole
        name: edit
        apiGroup: rbac.authorization.k8s.io
  5. Prüfen Sie den Status, um sicherzustellen, dass Policy Controller und Config Sync erfolgreich installiert werden:

    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 oder Policy_Controller PENDING oder NOT_INSTALLED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud beta container fleet config-management status noch einmal aus.

  6. Beschreiben Sie den Status, um sicherzustellen, dass Cloud Service Mesh erfolgreich installiert wird:

    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 von state.code: OK angezeigt wird, warten Sie einige Minuten und führen Sie gcloud container fleet mesh describe noch einmal aus. Bevor Sie mit der Anleitung fortfahren, prüfen Sie, ob das Feld servicemesh.controlPlaneManagement.details.code den Wert REVISION_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.

  1. Stellen Sie die Beispielanwendung Online Boutique und Ingress-Gateway bereit.

    Mit dem folgenden Befehl wird sed verwendet, um das Manifest acm-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.

  2. Rufen Sie den Config Sync-Status für RootSync und die beiden RepoSyncs 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 von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud 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.

  3. 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
    
  4. 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}")
    
  5. 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.

  1. Wenden Sie Einschränkungen an, um die Einfügung von Sidecar-Proxys zu erzwingen.

    Mit dem folgenden Befehl wird sed verwendet, um das Manifest acm-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:

    • Eine K8sRequiredLabels-Constraint, die erfordert, dass Namespace im Mesh-Netzwerk das spezifische Cloud Service Mesh-Sidecar-Proxy-Einfügungslabel enthält:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: K8sRequiredLabels
      metadata:
        name: namespace-sidecar-injection-label
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - ""
            kinds:
            - Namespace
          excludedNamespaces:
          - config-management-monitoring
          - config-management-system
          - default
          - gatekeeper-system
          - gke-connect
          - istio-system
          - kube-node-lease
          - kube-public
          - kube-system
          - resource-group-system
        parameters:
          labels:
          - allowedRegex: enabled
            key: istio-injection
    • Eine AsmSidecarInjection-Constraint, die verhindert, dass jeder Pod im Mesh-Netzwerk die Istio-Proxy-Sidecar-Einfügung umgeht:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmSidecarInjection
      metadata:
        name: pod-sidecar-injection-annotation
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - ""
            kinds:
            - Pod
          excludedNamespaces:
          - kube-system
        parameters:
          strictnessLevel: High
  2. 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 von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud alpha anthos config sync repo describe noch einmal aus.

  3. 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 Sie kubectl 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 und Pods ordnungsgemäß eingerichtet haben, gibt es 0 TOTAL-VIOLATIONS für diese Constraints.

  4. Wenn diese Constraints bei der Arbeit angezeigt werden sollen, erstellen Sie in Ihrem Cluster Namespace ohne label oder annotation:

    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.

  1. Wenden Sie Einschränkungen an, um die Traffic-Verschlüsselung zu erzwingen.

    Mit dem folgenden Befehl wird sed verwendet, um das Manifest acm-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-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 Namespace istio-system erzwingt:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmPeerAuthnMeshStrictMtls
      metadata:
        name: mesh-level-strict-mtls
      spec:
        enforcementAction: deny
        parameters:
          rootNamespace: istio-system
          strictnessLevel: High
    • Eine referenzielle Einschränkung Config im Namespace gatekeeper-system. Mit dieser referenziellen Einschränkung kann AsmPeerAuthnMeshStrictMtls Constraint auf ein anderes Objekt in ihrer Definition verweisen (z. B. nach einer PeerAuthentication in istio-system Namespace suchen):

      apiVersion: config.gatekeeper.sh/v1alpha1
      kind: Config
      metadata:
        name: config
      spec:
        sync:
          syncOnly:
            - group: ""
              version: "v1"
              kind: "Namespace"
            - group: "security.istio.io"
              version: "v1beta1"
              kind: "PeerAuthentication"
            - group: "security.istio.io"
              version: "v1beta1"
              kind: "AuthorizationPolicy"
    • Eine DestinationRuleTLSEnabled Constraint, die die Deaktivierung von TLS für alle Hosts und Hostteilmengen in Istio DestinationRules untersagt:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: DestinationRuleTLSEnabled
      metadata:
        name: destination-rule-tls-enabled
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - networking.istio.io
            kinds:
            - DestinationRule
    • Eine AsmPeerAuthnStrictMtls-Constraint, die erzwingt, dass alle PeerAuthentications den mTLS-Befehl STRICT nicht überschreiben können:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmPeerAuthnStrictMtls
      metadata:
        name: peerauthentication-strict-mtls
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - security.istio.io
            kinds:
            - PeerAuthentication
        parameters:
          strictnessLevel: High
  2. 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 von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud alpha anthos config sync repo describe noch einmal aus.

  3. 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"
      }
    ]
    
  4. Beheben Sie das Problem, indem Sie eine PeerAuthentication im istio-system bereitstellen. Wenn Sie verhindern möchten, dass alle Dienste im Mesh-Netzwerk Klartext-Traffic akzeptieren, legen Sie eine Mesh-weite PeerAuthentication-Richtlinie mit dem mTLS-Modus auf STRICT fest. Wenn Sie die Richtlinie bereitstellen, stellt die Steuerungsebene automatisch TLS-Zertifikate bereit, sodass Arbeitslasten sich gegenseitig authentifizieren können.

    Mit dem folgenden Befehl wird sed verwendet, um das Manifest acm-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-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 Namespace istio-system an. Dadurch wird mTLS STRICT auf das gesamte Mesh-Netzwerk angewendet:

    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: default
    spec:
      mtls:
        mode: STRICT
  5. 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 von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud alpha anthos config sync repo describe noch einmal aus.

  6. 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 Befehl kubectl get constraints noch einmal aus, bis in jeder Zeile Werte in der Spalte TOTAL-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.

  1. Wenden Sie Einschränkungen an, um eine detaillierte Zugriffssteuerung zu erzwingen.

    Mit dem folgenden Befehl wird sed verwendet, um das Manifest acm-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/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 Namespace istio-system erzwingt:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmAuthzPolicyDefaultDeny
      metadata:
        name: default-deny-authorization-policies
      spec:
        enforcementAction: deny
        parameters:
          rootNamespace: istio-system
          strictnessLevel: High
    • Eine AsmAuthzPolicyEnforceSourcePrincipals-Constraint, die erzwingt, dass AuthorizationPolicies detaillierte Quellhauptkonten definieren (außer „*“). Nur das Ingress-Gateway im Namespace asm-ingress ist eine Ausnahme von dieser Regel, um den Traffic von den Endnutzern zu empfangen und an die frontend-Anwendung von Online Boutique weiterzuleiten.

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmAuthzPolicyEnforceSourcePrincipals
      metadata:
        name: authz-source-principals-not-all
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - security.istio.io
            kinds:
            - AuthorizationPolicy
          excludedNamespaces:
            - asm-ingress
  2. 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 von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud alpha anthos config sync repo describe noch einmal aus.

  3. 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"
      }
    ]
    
  4. Beheben Sie das Problem, indem Sie AuthorizationPolicy im Namespace istio-system bereitstellen.

    Mit dem folgenden Befehl wird sed verwendet, um das Manifest acm-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 Namespace istio-system an:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: deny-all
    spec:
      {}
  5. 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 von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud alpha anthos config sync repo describe noch einmal aus.

  6. 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 Befehl kubectl get constraints noch einmal aus, bis in jeder Zeile Werte in der Spalte TOTAL-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
    
  7. 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 Ablehnung AuthorizationPolicy auf das gesamte Mesh-Netzwerk angewendet wird.

  8. Zur Behebung dieses Problems können Sie detailliertere AuthorizationPolicies in den Namespaces asm-ingress und onlineboutique bereitstellen.

    Mit dem folgenden Befehl wird sed verwendet, um das Manifest acm-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/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 Namespace asm-ingress:

      apiVersion: security.istio.io/v1beta1
      kind: AuthorizationPolicy
      metadata:
        name: asm-ingressgateway
      spec:
        selector:
          matchLabels:
            asm: ingressgateway
        rules:
        - to:
          - operation:
              ports:
              - "8080"
    • Eine AuthorizationPolicy pro Anwendung im Namespace onlineboutique. Hier ist das Beispiel für die Anwendung cartservice:

      apiVersion: security.istio.io/v1beta1
      kind: AuthorizationPolicy
      metadata:
        name: cartservice
      spec:
        selector:
          matchLabels:
            app: cartservice
        rules:
        - from:
          - source:
              principals:
              - cluster.local/ns/onlineboutique/sa/frontend
              - cluster.local/ns/onlineboutique/sa/checkoutservice
          to:
          - operation:
              paths:
              - /hipstershop.CartService/AddItem
              - /hipstershop.CartService/GetCart
              - /hipstershop.CartService/EmptyCart
              methods:
              - POST
              ports:
              - "7070"
    • Ein ServiceAccount pro Anwendung in den Namespaces asm-ingress und onlineboutique, damit eine eindeutige Identität pro Anwendung als principal in den AuthorizationPolicies ausgewertet wird. Hier sehen Sie das Beispiel für die Anwendung cartservice:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: cartservice
  9. Rufen Sie den Config Sync-Status für RootSync und die beiden RepoSyncs 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 von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud 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.

  10. 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 der GKE Enterprise-Sicherheitsfeatures aufrufen

Sie können den Status von GKE Enterprise-Sicherheitsfeatures, einschließlich Authentifizierungs- und Autorisierungsrichtlinien, in der Google Cloud Console aufrufen.

  1. Öffnen Sie in der Google Cloud Console die Seite GKE Enterprise-Sicherheit.

    Zu GKE Enterprise-Sicherheit

    In der Richtlinienzusammenfassung wird der Status der Anwendungssicherheit angezeigt, einschließlich Dienstzugriffssteuerung (AuthorizationPolicies) und mTLS.

  2. Klicken Sie auf Richtlinienprüfung, um den Status der Arbeitslastrichtlinie für den Cluster und beide Namespaces (asm-ingress und onlineboutique) anzuzeigen.

    Die Karten für die Dienstzugriffssteuerung und den mTLS-Status bieten eine allgemeine Übersicht.

    Grafik: Allgemeine Übersicht über die Dienstzugriffssteuerung und den mTLS-Status

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

    Grafik: Detaillierte Liste der einzelnen Arbeitslasten sowie deren Dienstzugriffssteuerung und mTLS-Status

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:

  1. 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
    
  2. 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
    
  3. Löschen Sie die von Ihnen erstellten Dateien:

    rm -r ~/asm-acm-tutorial-dir
    

Nächste Schritte