Version 1.14

Mit Anthos Service Mesh und Anthos Config Management 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 Anthos Service Mesh verwaltet, einer Gruppe von Tools, mit denen Sie ein zuverlässiges Service Mesh überwachen und verwalten können. Sie sind dafür verantwortlich, dass Ihr Mesh-Netzwerk und Ihre Anwendungen sicher sind.

Sie können Fehlkonfigurationen verhindern und Ihre Anthos Service Mesh-Richtlinien automatisch validieren, indem Sie Anthos Config Management Policy Controller und Config Sync verwenden. Policy Controller ermöglicht das Erzwingen vollständig programmierbarer Richtlinien für Ihre Cluster. Policy Controller enthält außerdem eine Standardbibliothek mit Einschränkungsvorlagen, die Sie zusammen mit dem Anthos Service Mesh-Sicherheitsset verwenden können, um die Einhaltung von Schwachstellen und Best Practices in Ihrem Mesh zu überprüfen. Config Sync gleicht den Status von Clustern kontinuierlich mit einem zentralen Satz deklarativer Kubernetes-Konfigurationsdateien ab. Wenn Sie Policy Controller und Config Sync zusammen verwenden, können Sie Einschränkungen für Ihre Anthos Service Mesh-Richtlinienkonfigurationen kontinuierlich erzwingen.

Das folgende Diagramm bietet eine Übersicht darüber, wie Anthos Service Mesh, Policy Controller und Config Sync in diesem Tutorial zusammenarbeiten, um die Online Boutique-Beispielanwendungen, die Sie in diesem Tutorial verwenden, zu verwalten und zu schützen:

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 Anthos Service Mesh auf einem Cluster installieren
  • Beispiel-Apps von Online Boutique und ein Ingress-Gateway bereitstellen
  • Mit dem Anthos Service Mesh-Richtlinien-Bundle können Sie die folgenden Best Practices erzwingen:
    • Alle Arbeitslasten im Mesh-Netzwerk müssen eine automatische Sidecar-Einfügung haben
    • Verschlüsseln Sie den gesamten Traffic im Mesh-Netzwerk.
    • Alle Arbeitslasten im Mesh-Netzwerk müssen eine detaillierte Zugriffssteuerung haben.

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

  • GKE.
  • Anthos. Die Abrechnung für Anthos umfasst die Abrechnung für Anthos Service Mesh und Anthos Config Management-Komponenten.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Vorbereitung

  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 Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

Umgebung vorbereiten

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

  1. Öffnen Sie eine Cloud Shell-Sitzung. Klicken Sie zum Öffnen dieser Sitzung rechts oben auf dieser Seite auf Cloud Shell aktivieren und dann auf Bestätigen. In einem Frame im unteren Teil der Seite wird eine Cloud Shell-Sitzung geöffnet. Führen Sie in dieser Cloud Shell-Sitzung die folgenden Befehle aus.
  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 mithilfe einer Umgebungsvariablen:

    WORK_DIR=~/asm-acm-tutorial-dir
    mkdir $WORK_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
    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 services enable \
        container.googleapis.com \
        gkehub.googleapis.com \
        mesh.googleapis.com \
        anthos.googleapis.com
    

    Dieser Vorgang kann mehr als eine Minute dauern.

Einen GKE-Cluster einrichten

In diesem Abschnitt erstellen Sie einen GKE-Cluster und registrieren ihn dann für eine Flotte. Environs sind ein Google Cloud-Konzept für die logische Organisation von Clustern und anderen Ressourcen, mit dem Sie Multi-Cluster-Funktionen nutzen und verwalten sowie einheitliche Richtlinien auf Ihre Systeme anwenden können.

Der Cluster, den Sie in diesem Abschnitt erstellen, ist der Cluster, auf dem Sie Anthos Service Mesh, Policy Controller und Config Sync installieren. Es ist auch der Cluster, in dem Sie die Beispiel-Apps für die Online-Boutique bereitstellen.

Führen Sie die folgenden Schritte aus, um den Cluster einzurichten:

  1. Erstellen Sie einen GKE-Cluster.

    gcloud container clusters create ${CLUSTER} \
        --zone ${CLUSTER_ZONE} \
        --machine-type=e2-standard-4 \
        --num-nodes 4 \
        --workload-pool ${PROJECT_ID}.svc.id.goog \
        --labels mesh_id=proj-${PROJECT_NUMBER}
    

    Dieser Vorgang kann mehr als fünf Minuten dauern.

    Die entsprechende Ausgabe sieht etwa so aus:

    kubeconfig entry generated for asm-acm-tutorial.
    NAME: asm-acm-tutorial
    LOCATION: us-east4-a
    MASTER_VERSION: 1.21.10-gke.2000
    MASTER_IP: 34.85.159.120
    MACHINE_TYPE: e2-standard-4
    NODE_VERSION: 1.21.10-gke.2000
    NUM_NODES: 4
    STATUS: RUNNING
    
  2. Registrieren Sie den Cluster auf einer Flotte.

    gcloud container fleet memberships register ${CLUSTER} \
        --project=${PROJECT_ID} \
        --gke-cluster=${CLUSTER_ZONE}/${CLUSTER} \
        --enable-workload-identity
    

    Die entsprechende Ausgabe sieht etwa so aus:

    kubeconfig entry generated for asm-acm-tutorial.
    Waiting for membership to be created...done.
    Created a new membership [projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial] for the cluster [asm-acm-tutorial]
    Generating the Connect Agent manifest...
    Deploying the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect]...
    Deployed the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect].
    Finished registering the cluster [asm-acm-tutorial] with the Fleet.
    

Repository entdecken

Im folgenden Installationsabschnitt wenden Sie das Anthos Config Management-Manifest acm-config.yaml an. Dieses Manifest konfiguriert Ihren Cluster für die Synchronisierung aus dem Ordner asm-acm-tutorial des Beispiel-Repositorys für Anthos Config Management. Dieser Ordner enthält alle Konfigurationsdateien, die Sie für die weitere Ausführung dieser Anleitung benötigen.

Die Ausführung dieser Anleitung lässt sich vereinfachen, wenn Sie sed-Befehle verwenden, um die Datei acm-config.yaml zu aktualisieren und so die erforderlichen Manifeste für jeden Schritt bereitstellen. Durch das Aktualisieren einer einzelnen Datei können Sie sich auf die Konzepte und den Ablauf der Sicherung Ihrer Cluster, Mesh-Netzwerke und Anwendungen konzentrieren, ohne die Dateien wiederholt bearbeiten und git add|commit|push-Befehle ausführen zu müssen.

Bevor Sie das Manifest acm-config.yaml anwenden, ist es hilfreich, die Gesamtstruktur und den Inhalt des Repositorys zu verstehen.

Damit Config Sync die Synchronisierung mit mehreren Repositories nutzen kann, enthält das Repository asc-acm-tutorial zwei Ordner auf der obersten Ebene: root-sync und online-boutique.

Tippen Sie auf den entsprechenden root-sync-Ordner.

Der Ordner root-sync ist das Root-Repository. Dieses Repository ist in mehrere Unterordner unterteilt. Jeder dieser Unterordner enthält Ressourcen und Richtlinien für verschiedene Abschnitte dieser Anleitung.

Es gibt zwei Ordner mit Ressourcen zum Einrichten der Beispiel-App „Online Boutique” und des Ingress-Gateways:

  • init: Ressourcen zum Einrichten der RepoSync für die Online Boutique-Anwendungen.
  • deployments: Ressourcen zum Bereitstellen des Ingress-Gateways und der Namespaces und Anwendungen für die Online Boutique.

Es gibt drei Ordner, die Ressourcen zum Bereitstellen der verschiedenen Anthos Service Mesh-Richtlinien enthalten:

  • enforce-sidecar-injection: Ressourcen zum Bereitstellen von Richtlinien, um die Sidecar-Einfügung für Namespace und Pod zu erzwingen
  • enforce-strict-mtls: Ressourcen zum Bereitstellen von Richtlinien, um STRICT mTLS für das gesamte Mesh-Netzwerk und für jede PeerAuthentication zu erzwingen
  • enforce-authorization-policies: Ressourcen zum Bereitstellen von Richtlinien, um die Standard-deny-AuthorizationPolicy für das gesamte Mesh-Netzwerk zu erzwingen und detaillierte Quellhauptkonten für alle AuthorizationPolicies zu erzwingen.

Die verbleibenden drei Ordner enthalten Ressourcen zum Bereitstellen der Ressourcen, mit denen die Anthos Service Mesh-Richtlinienverstöße behoben werden:

  • fix-strict-mtls: Ressourcen zum Bereitstellen des standardmäßigen STRICT-mTLS-PeerAuthentication im Namespace istio-system.
  • fix-default-deny-authorization-policy: Ressourcen zum Bereitstellen des standardmäßigen deny AuthorizationPolicy im Namespace istio-system.
  • deploy-authorization-policies: Ressourcen zur Bereitstellung detaillierter AuthorizationPolicy-Ressourcen, damit die Beispiel-Apps von Online Boutique funktionieren.

Tippen Sie auf den entsprechenden online-boutique-Ordner.

Der Ordner online-boutique ist ein Namespace-Repository. Dieses Repository enthält die Ressourcen, die Sie zum Bereitstellen der Online Boutique-Beispielanwendungen mit Kustomize benötigen.

Policy Controller, Config Sync und verwaltetes Anthos Service Mesh installieren

Nachdem Sie nun Ihren Cluster erstellt und registriert haben, können Sie Config Sync, Policy Controller und Anthos Service Mesh auf Ihrem Cluster installieren und Ihren Cluster für die Synchronisierung mit den Configs im Ordner asc-acm-tutorial konfigurieren:

  1. Aktivieren Sie Anthos Config Management in Ihrer Flotte:

    gcloud beta container fleet config-management enable
    
  2. Aktivieren Sie Anthos Service Mesh in Ihrer Flotte:

    gcloud container fleet mesh enable
    
  3. Aktivieren Sie die automatische Verwaltung der Anthos Service Mesh-Steuerungsebene, damit Google die empfohlene Konfiguration von verwaltetem Anthos Service Mesh anwenden kann:

    gcloud container fleet mesh update \
        --control-plane automatic \
        --memberships ${CLUSTER}
    
  4. Erstellen Sie zum Installieren und Konfigurieren von Config Sync und Policy Controller das folgende Anthos Config Management-Manifest:

    cat <<EOF > $WORK_DIR/acm-config.yaml
    applySpecVersion: 1
    spec:
      policyController:
        enabled: true
        templateLibraryInstalled: true
        referentialRulesEnabled: true
      configSync:
        enabled: true
        sourceFormat: unstructured
        syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
        syncBranch: main
        secretType: none
        policyDir: asm-acm-tutorial/root-sync/init
    EOF
    

    Weitere Informationen zu den Anthos Config Management-Konfigurationsfeldern finden Sie unter gcloud apply spec fields.

  5. Wenden Sie die Datei an:

    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Nachdem Sie diese Datei angewendet haben, sind Policy Controller und Config Sync auf Ihrem Cluster installiert. Als Nächstes beginnt Config Sync mit der Synchronisierung aller Konfigurationen im Ordner asm-acm-tutorial mit Ihrem Cluster. Diese Konfigurationen installieren und konfigurieren die folgenden Schlüsselkomponenten:

    • Das RepoSync-Objekt, das die Online-Boutique-Anwendung konfiguriert, wird synchronisiert:

      apiVersion: configsync.gke.io/v1beta1
      kind: RepoSync
      metadata:
        name: repo-sync
      spec:
        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
    • Da der RepoSync-Abgleicher zusätzliche Berechtigungen benötigt, um Istio-Ressourcen zu erstellen, enthält das Repository auch Clusterrollen und Clusterrollenbindungen, um diese Berechtigungen zu erteilen. Dies ist das Manifest für die Clusterrolle, die automatisch auf Ihren Cluster angewendet wird:

      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"
        verbs:
        - "*"
  6. Prüfen Sie den Status von Anthos Config Management, um sicherzustellen, dass Policy Controller und Config Sync erfolgreich installiert werden:

    gcloud beta container fleet config-management status
    

    Die entsprechende Ausgabe sieht etwa so aus:

    Name: asm-acm-tutorial
    Status: SYNCED
    Last_Synced_Token: 4b3384d
    Sync_Branch: main
    Last_Synced_Time: 2022-05-04T21:32:58Z
    Policy_Controller: INSTALLED
    Hierarchy_Controller: PENDING
    

    Wenn in den Zeilen Status 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.

  7. Beschreiben Sie den Status, um sicherzustellen, dass Anthos Service Mesh erfolgreich installiert wird:

    gcloud container fleet mesh describe
    

    Die entsprechende Ausgabe sieht etwa so aus:

    createTime: '2022-05-05T23:33:44.041608250Z'
    membershipSpecs:
      projects/841604900168/locations/global/memberships/asm-acm-tutorial:
        mesh:
          controlPlane: AUTOMATIC
    membershipStates:
      projects/841604900168/locations/global/memberships/asm-acm-tutorial:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
          updateTime: '2022-05-05T23:45:38.800808838Z'
    name: projects/PROJECT_ID/locations/global/features/servicemesh
    resourceState:
      state: ACTIVE
    spec: {}
    state:
      state: {}
    updateTime: '2022-05-05T23:45:44.848011023Z'
    

    Wenn state.code: ERROR anstelle 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" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Beachten Sie, dass dieser Schritt einige Minuten dauern kann.

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

    Zum Aufrufen verwalteter Ressourcen können Sie das Flag --managed-resources hinzufügen. Weitere Informationen finden Sie unter Config Sync-Status auf mehreren Clustern ansehen.

  3. Rufen Sie den Config Sync-Status für RepoSync auf:

    gcloud alpha anthos config sync repo describe \
        --sync-name repo-sync \
        --sync-namespace onlineboutique
    

    Die Ausgabe sieht etwa so aus:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//online-boutique/deployments@main:HEAD",
        "status": "SYNCED"
      }
    ]
    

    Wenn status: RECONCILING anstelle von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud alpha anthos config sync repo describe noch einmal aus.

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

    Der folgende Befehl verwendet sed, um die Datei acm-config.yaml zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.

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

    Der vorherige Befehl wendet die folgenden Ressourcen an:

  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.

    Der folgende Befehl verwendet sed, um die Datei acm-config.yaml zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.

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

    Der vorherige Befehl wendet die folgenden Ressourcen an:

  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",
        "kind": "AsmPeerAuthnMeshStrictMtls",
        "message": "Root namespace <istio-system> does not have a strict mTLS PeerAuthentication",
        "name": "mesh-level-strict-mtls"
      }
    ]
    
  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.

    Der folgende Befehl verwendet sed, um die Datei acm-config.yaml zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" $WORK_DIR/acm-config.yaml
    gcloud beta container hub config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Der vorhergehende Befehl wendet die folgenden STRICT-mTLS-PeerAuthentication auf den 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.

    Der folgende Befehl verwendet sed, um die Datei acm-config.yaml zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.

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

    Der vorherige Befehl wendet die folgenden Ressourcen an:

  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",
        "kind": "AsmAuthzPolicyDefaultDeny",
        "message": "Root namespace <istio-system> does not have a default deny AuthorizationPolicy",
        "name": "default-deny-authorization-policies"
      }
    ]
    
  4. Beheben Sie das Problem, indem Sie AuthorizationPolicy im Namespace istio-system bereitstellen.

    Der folgende Befehl verwendet sed, um die Datei acm-config.yaml zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" $WORK_DIR/acm-config.yaml
    gcloud beta container hub config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Der vorherige Befehl wendet die folgende AuthorizationPolicy zum Alles-Ablehnen im 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 für das gesamte Mesh-Netzwerk gilt.

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

    Der folgende Befehl verwendet sed, um die Datei acm-config.yaml zu aktualisieren, damit Config Sync die zugehörigen Ressourcen bereitstellt.

    sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" $WORK_DIR/acm-config.yaml
    gcloud beta container hub config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Der vorherige Befehl wendet die folgenden Ressourcen an:

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

  10. Rufen Sie den Config Sync-Status für RepoSync auf:

    gcloud alpha anthos config sync repo describe \
        --sync-name repo-sync \
        --sync-namespace onlineboutique
    

    Die Ausgabe sieht etwa so aus:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/online-boutique/authorization-policies@main",
        "status": "SYNCED"
      }
    ]
    

    Wenn status: RECONCILING anstelle von status: SYNCED angezeigt wird, warten Sie einige Minuten und führen Sie gcloud alpha anthos config sync repo describe noch einmal aus.

  11. Rufen Sie die Online Boutique-Anwendung noch einmal in Ihrem Browser auf:

    echo http://${EXTERNAL_IP}
    

    Wenn Sie einige Minuten warten, sollte die Website jetzt wie erwartet erfolgreich funktionieren.

Status von Anthos-Sicherheitsfeatures aufrufen

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

  1. Rufen Sie in der Console die Seite Anthos-Sicherheit auf.

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

  1. Wechseln Sie in der Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Einzelne Ressourcen löschen

So löschen Sie die einzelnen Ressourcen:

  1. Heben Sie die Registrierung Ihres Clusters bei der Flotte auf:

    gcloud container fleet memberships unregister ${CLUSTER} \
        --project=${PROJECT_ID} \
        --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
    

    Die entsprechende Ausgabe sieht etwa so aus:

    kubeconfig entry generated for asm-acm-tutorial.
    Waiting for membership to be deleted...done.
    Deleting membership CR in the cluster...done.
    Deleting namespace [gke-connect] in the cluster...done.
    
  2. Löschen Sie Ihre Cluster:

    gcloud container clusters delete ${CLUSTER} \
        --zone ${CLUSTER_ZONE}
    

    Drücken Sie y, wenn Sie dazu aufgefordert werden. Die Verarbeitung dieses Befehls kann etwa fünf Minuten dauern.

    Die entsprechende Ausgabe sieht etwa so aus:

    Deleting cluster asm-acm-tutorial...done.
    Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-east4-a/clusters/asm-acm-tutorial].
    
  3. Löschen Sie die von Ihnen erstellten Dateien:

    rm -r $WORK_DIR
    

Nächste Schritte