Erhöhen Sie die Sicherheit Ihrer Anwendung mit Anthos Service Mesh und Config Management


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.

Mit Policy Controller und Config Sync können Sie Fehlkonfigurationen verhindern und Ihre Anthos Service Mesh-Richtlinien automatisch validieren. 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 mit dem Anthos Service Mesh-Sicherheits-Bundle verwenden können, um die Compliance Ihrer Mesh-Sicherheitslücken und Best Practices zu prü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 für Ihre Anthos Service Mesh-Richtlinienkonfigurationen kontinuierlich Einschränkungen erzwingen.

Das folgende Diagramm bietet eine Übersicht darüber, wie Anthos 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

Lernziele

  • 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
  • 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 Anthos 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 Die Abrechnung für GKE Enterprise umfasst die Abrechnung für Anthos Service Mesh, Config Sync und 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.

Hinweise

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  2. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

Umgebung vorbereiten

In diesem Abschnitt bereiten Sie Ihre Umgebung vor, damit Sie Anthos Service Mesh, Policy Controller und Config Sync installieren können:

  1. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

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

    gcloud components update
    
  3. Zum Speichern der Dateien, die Sie in dieser Anleitung erstellen, erstellen Sie 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 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:

  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 seinen Status, damit 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 seinen Status, um sicherzustellen, dass der GKE-Cluster erfolgreich registriert wurde:

    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 der 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 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 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 Anthos 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 Anthos Service Mesh-Verwaltung damit Google die empfohlene Konfiguration von verwaltetem Anthos 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 in Ihrem Cluster installiert. Als Nächstes beginnt Config Sync, alle Konfigurationen der Standard-RootSync mit Ihrem Cluster zu synchronisieren. Mit diesen Konfigurationen werden die folgenden Schlüsselkomponenten installiert und konfiguriert:

  5. Prüfen Sie den Status, um sicherzustellen, dass Policy Controller und Config Sync erfolgreich installiert wurden:

    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 Anthos 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 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.

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

    Im folgenden Befehl wird mit sed das Manifest acm-config.yaml aktualisiert, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/deployments,root-sync/enforce-sidecar-injection,g" ~/asm-acm-tutorial-dir/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${MEMBERSHIP} \
        --config ~/asm-acm-tutorial-dir/acm-config.yaml
    

    Der vorherige Befehl wendet die folgenden Ressourcen an:

  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.

    Im folgenden Befehl wird mit sed das Manifest acm-config.yaml aktualisiert, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/enforce-sidecar-injection,root-sync/enforce-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${MEMBERSHIP} \
        --config ~/asm-acm-tutorial-dir/acm-config.yaml
    

    Der vorherige Befehl wendet die folgenden Ressourcen an:

  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.

    Im folgenden Befehl wird mit sed das Manifest acm-config.yaml aktualisiert, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${MEMBERSHIP} \
        --config ~/asm-acm-tutorial-dir/acm-config.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.

    Im folgenden Befehl wird mit sed das Manifest acm-config.yaml aktualisiert, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/fix-strict-mtls,root-sync/enforce-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${MEMBERSHIP} \
        --config ~/asm-acm-tutorial-dir/acm-config.yaml
    

    Der vorherige Befehl wendet die folgenden Ressourcen an:

  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.

    Im folgenden Befehl wird mit sed das Manifest acm-config.yaml aktualisiert, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" ~/asm-acm-tutorial-dir/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${MEMBERSHIP} \
        --config ~/asm-acm-tutorial-dir/acm-config.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.

    Im folgenden Befehl wird mit sed das Manifest acm-config.yaml aktualisiert, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${MEMBERSHIP} \
        --config ~/asm-acm-tutorial-dir/acm-config.yaml
    

    Der vorherige Befehl wendet die folgenden Ressourcen an:

  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 ansehen

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

  1. Rufen Sie in der Google Cloud Console die Seite GKE Enterprise-Sicherheit auf.

    Zur 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

    Google Cloud-Projekt löschen:

    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