Einschränkungen für Anthos Service Mesh-Sicherheitsrichtlinien verwenden

Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die mit dem Sicherheits-Bundle von Anthos Service Mesh verwendet werden können, um die Compliance Ihrer Sicherheitslücken und Best Practices für Mesh-Netzwerke zu prüfen.

Dieses Bundle mit Einschränkungen setzt Richtlinien in den folgenden Domains durch:

  • Anthos Service Mesh erzwingt mTLS-Traffic
  • Best Practices für Anthos Service Mesh-AuthorizationPolicy
  • Arbeitslastsicherheitsanforderungen von Anthos Service Mesh

Einschränkungen für Anthos Service Mesh-Richtlinien-Bundles

Name der Einschränkung Beschreibung der Einschränkung Einstellungs-ID
asm-policy-v0.0.1-asm-ingressgateway-label Erzwingen Sie die Labelverwendung von Istio-Ingressgateways nur für Ingressgateway-Pods 1.1.1
asm-policy-v0.0.1-asm-sidecar-injection Erzwingen Sie, dass die istio-Proxy-Sidecar-Datei immer in die Workload-Pods eingefügt wird 1.1.2
asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny Erzwingen Sie die AuthorizationPolicy für standardmäßige Ablehnung auf Mesh-Ebene 1.2.1
asm-policy-v0.0.1-asm-authz-policy-normalization Erzwingen Sie die Normalisierung der AuthorizationPolicy 1.2.2
asm-policy-v0.0.1-asm-authz-policy-safe-pattern Erzwingen Sie die sicheren Muster der AuthorizationPolicy 1.2.3
asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls Erzwingen Sie die strikte mTLS PeerAuthentication auf Mesh-Ebene 1.3.1
asm-policy-v0.0.1-asm-peer-authn-strict-mtls Erzwingen Sie, dass alle PeerAuthentications keine strikten mTLS überschreiben können 1.3.2
asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers jwtRules-outputPayloadToHeader erzwingen, damit sie keine bekannten HTTP-Anfrageheader enthält 1.4.1

Bundle-Profile

Im Anthos Service Mesh-Sicherheitsrichtlinien-Bundle können Sie zwei Profile verwenden, die auf der Strengheitsgrad basieren. Bei einem niedrigen Strengheitsgrad werden weniger Beschränkungen angewandt, was mehr Flexibilität bietet. Bei einem hohen Strengheitsgrad werden mehr Beschränkungen angewandt, was eine sicherere Richtlinienkontrolle ermöglicht.

Niedriger Strengheitsgrad

Für das Profil mit niedrigem Strengheitsgrad gelten folgende Richtlinieneinschränkungen:

  • Das Label istio:ingressgateway kann nur von Istio-Ingress-Gateway-Pods verwendet werden.

  • In AuthorizationPolicy können die Felder hosts oder notHosts nur verwendet werden, wenn das Istio-Ingress-Gateway mit dem Label istio:ingressgateway ausgewählt wird.

  • Wenn in AuthorizationPolicy die Felder methods oder notMethods verwendet werden, müssen die Werte Großbuchstaben sein.

  • Wenn in AuthorizationPolicy das Feld request.headers verwendet wird, dürfen die Werte keine Leerzeichen enthalten.

  • Wenn in AuthorizationPolicy die Felder paths oder notPaths verwendet werden, müssen die Werte normalisierte Werte sein.

Hoher Strengheitsgrad

Der hohe Strengheitsgrad umfasst alle Einschränkungen aus dem niedrigen Strengheitsgrad sowie die folgenden Einschränkungen:

  • Bei allen Arbeitslast-Pods kann die Annotation sidecar.istio.io/inject: false nicht angewendet werden, um die Proxy-Injektion zu umgehen.

  • Eine AuthorizationPolicy einer Mesh-Ebene, die eine Standardregel zum Ablehnen definiert, wird erzwungen.

  • Die AuthorizationPolicy muss entweder auf ALLOW-with-positive-matching oder DENY-with-negative-match folgen.

  • Wenn in AuthorizationPolicy die Felder hosts oder notHosts verwendet werden, müssen die Werte Paare von <host-name> und <host-name>:* sein.

  • Eine PeerAuthentication einer Mesh-Ebene, die strikte mTLS definiert, wird erzwungen.

  • Für alle PeerAuthentication im Mesh-Netzwerk kann der mTLS-Modus nur entweder UNSET oder STRICT sein, um strikter mTLS zu folgen.

Gruppierungseinstellungen

KPT-Setter Beschreibung
Strengheitsgrad Profil des Anthos Service Mesh-Bundles für die strikte Integrität, Optionen sind „Niedrig“ oder „Hoch“ (Standardeinstellung)

Hinweise

  1. Installieren und initialisieren Sie die Google Cloud CLI, die die in dieser Anleitung verwendeten Befehle gcloud und kubectl enthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert.
  2. Installieren Sie Policy Controller Version 1.11.2 oder höher mit der Standardbibliothek der Einschränkungsvorlagen in Ihrem Cluster. Außerdem müssen Sie die Unterstützung für referenzielle Einschränkungen aktivieren, da dieses Bundle referenzielle Einschränkungen enthält.
  3. Prüfen Sie, ob Anthos Service Mesh in Ihrem Cluster installiert ist.

Policy Controller für referenzielle Einschränkungen konfigurieren

  1. Speichern Sie das folgende YAML-Manifest als policycontroller-config.yaml:

    apiVersion: config.gatekeeper.sh/v1alpha1
    kind: Config
    metadata:
      name: config
      namespace: "gatekeeper-system"
    spec:
      sync:
        syncOnly:
          - group: ""
            version: "v1"
            kind: "Namespace"
          - group: "security.istio.io"
            version: "v1beta1"
            kind: "AuthorizationPolicy"
          - group: "security.istio.io"
            version: "v1beta1"
            kind: "PeerAuthentication"
    

    Dieses Manifest konfiguriert Policy Controller so, dass bestimmte Arten von Objekten beobachtet werden.

  2. Wenden Sie das policycontroller-config.yaml-Manifest an:

    kubectl apply -f policycontroller-config.yaml
    

Anthos Service Mesh-Richtlinien-Bundle prüfen

Mit Policy Controller können Sie Richtlinien für Ihren Kubernetes-Cluster erzwingen. Damit Sie Ihre Arbeitslasten und deren Compliance in Bezug auf die in der vorherigen Tabelle beschriebenen Anthos Service Mesh-Sicherheitsrichtlinien testen können, können Sie diese Einschränkungen im „Audit”-Modus bereitstellen, um Verstöße aufzudecken und vor allem selbst eine Gelegenheit zu geben, um sie zu beheben, bevor Sie sie auf Ihrem Kubernetes-Cluster erzwingen.

Sie können diese Richtlinien anwenden, wenn spec.enforcementAction mit kubectl, kpt oder Config Sync auf dryrun festgelegt ist.

kubectl

  1. (Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen mit kubectl an:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
    
  2. Wenden Sie die Richtlinieneinschränkungen mit kubectl an:

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
    

    Die Ausgabe sieht so aus:

    asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny created
    asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization created
    asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern created
    asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label created
    asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls created
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls created
    asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers created
    asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection created
    
  3. Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:

    kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
    

    Die Ausgabe sieht in etwa so aus:

    NAME                                                                                                       ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny   dryrun               0
    
    NAME                                                                                                     ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization   dryrun               0
    
    NAME                                                                                                  ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern   dryrun               0
    
    NAME                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label   dryrun               0
    
    NAME                                                                                                     ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls   dryrun               0
    
    NAME                                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls   dryrun               0
    
    NAME                                                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers   dryrun               0
    
    NAME                                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection   dryrun               0
    

KPT

  1. Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.

  2. Laden Sie das Anthos Service Mesh-Sicherheitsrichtlinien-Bundle von GitHub mit kpt herunter:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
    
  3. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf dryrun festzulegen:

    kpt fn eval asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. Führen Sie die kpt-Setter-Funktion aus, um spezifische Felder für Anthos Service Mesh-Sicherheitsrichtlinien festzulegen:

    kpt fn eval asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \
    strictness-level="Low"
    
  5. Initialisieren Sie das Arbeitsverzeichnis mit kpt, wodurch eine Ressource erstellt wird, um Änderungen verfolgen zu können:

    cd asm-policy-v0.0.1
    kpt live init
    
  6. Wenden Sie die Richtlinieneinschränkungen mit kpt an:

    kpt live apply
    

    Die Ausgabe sieht so aus:

    asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-authz-policy-mesh-default-deny created
    asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-authz-policy-normalization created
    asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-authz-policy-safe-pattern created
    asmingressgatewaylabel.constraints.gatekeeper.sh/asm-ingressgateway-label created
    asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-mesh-strict-mtls created
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-strict-mtls created
    asmsidecarinjection.constraints.gatekeeper.sh/asm-sidecar-injection created
    7 resource(s) applied. 7 created, 0 unchanged, 0 configured, 0 failed
    
  7. Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:

    kpt live status --output table --poll-until current
    

    Der Status CURRENT bestätigt die erfolgreiche Installation der Einschränkungen.

Config Sync

  1. Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.

Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:

  1. Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:

    cd SYNC_ROOT_DIR
    

    So erstellen oder hängen Sie .gitignore mit resourcegroup.yaml an:

    echo resourcegroup.yaml >> .gitignore
    

  2. Erstellen Sie ein dediziertes policies-Verzeichnis:

    mkdir -p policies
    
  3. Laden Sie das Anthos Service Mesh-Sicherheitsrichtlinien-Bundle von GitHub mit kpt herunter:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1 policies/asm-policy-v0.0.1
    
  4. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf dryrun festzulegen:

    kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. Führen Sie die kpt-Setter-Funktion aus, um spezifische Felder für Anthos Service Mesh-Sicherheitsrichtlinien festzulegen:

    kpt fn eval policies/asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \
    strictness-level="Low"
    
  6. (Optional) Sehen Sie sich eine Vorschau der zu erstellenden Richtlinieneinschränkungen an:

    kpt live init policies/asm-policy-v0.0.1
    kpt live apply --dry-run policies/asm-policy-v0.0.1
    

    Die Ausgabe sieht so aus:

    Dry-run strategy: client
    inventory update started
    inventory update finished
    apply phase started
    asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny apply successful
    asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization apply successful
    asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern apply successful
    asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label apply successful
    asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls apply successful
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls apply successful
    asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers apply successful
    asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection apply successful
    apply phase finished
    inventory update started
    inventory update finished
    apply result: 8 attempted, 8 successful, 0 skipped, 0 failed
    
  7. Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie policies/asm-policy-v0.0.1 dem Stammverzeichnis kustomization.yaml hinzu. Andernfalls entfernen Sie die Datei policies/asm-policy-v0.0.1/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/asm-policy-v0.0.1/kustomization.yaml
    
  8. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1
    git commit -m 'Adding ASM security policy audit enforcement'
    git push
    
  9. Prüfen Sie den Status der Installation:

    watch gcloud beta container fleet config-management status --project PROJECT_ID
    

    Der Status SYNCED bestätigt die Installation der Richtlinien.

Richtlinienverstöße ansehen

Nachdem die Richtlinieneinschränkungen im Prüfmodus installiert wurden, können Verstöße im Cluster über das Policy Controller-Dashboard in der Benutzeroberfläche angezeigt werden.

Sie können auch kubectl verwenden, um mit dem folgenden Befehl Verstöße im Cluster anzusehen:

kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

Wenn Verstöße vorliegen, kann eine Liste der Verstoßmeldungen pro Einschränkung wie folgt angezeigt werden:

kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'

Erzwingungsaktion des Anthos Service Mesh-Richtlinien-Bundles ändern

Nachdem Sie die Richtlinienverstöße in Ihrem Cluster geprüft haben, können Sie den Erzwingungsmodus so ändern, dass der Admission-Controller entweder warn auf den Cluster ausführt oder sogar deny die Anwendung nicht konformer Ressourcen auf den Cluster blockiert.

kubectl

  1. Legen Sie mit kubectl die Erzwingungsaktion der Richtlinien auf warn fest:

    kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. Prüfen Sie, ob die Maßnahme zur Durchsetzung von Richtlinieneinschränkungen aktualisiert wurde:

    kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
    

KPT

  1. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf warn festzulegen:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. Wenden Sie die Richtlinieneinschränkungen an:

    kpt live apply
    

Config Sync

Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:

  1. Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf warn festzulegen:

    kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1
    git commit -m 'Adding ASM security policy bundle warn enforcement'
    git push
    
  4. Prüfen Sie den Status der Installation:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Ihr Repository, das in der Spalte SYNCED angezeigt wird, bestätigt die Installation der Richtlinien.

Richtlinienerzwingung testen

Erstellen Sie mit dem folgenden Befehl eine nicht konforme Ressource im Cluster:

cat <<EOF | kubectl apply -f -
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: non-compliant-authz-policy
spec:
  action: ALLOW
  rules:
  - to:
    - operation:
        methods: ["get"]
EOF

Der Admission-Controller sollte eine Warnung ausgeben, in der die Richtlinienverstöße aufgelistet sind, gegen die diese Ressource verstößt, wie im folgenden Beispiel gezeigt:

Warning: [asm-policy-v0.0.1-asm-authz-policy-normalization] in rules-to-operation, methods or notMethods must be uppercase
authorizationpolicy.security.istio.io/non-compliant-authz-policy created

Anthos Service Mesh-Richtlinien-Bundle entfernen

Bei Bedarf kann das Anthos Service Mesh-Richtlinien-Bundle aus dem Cluster entfernt werden.

kubectl

  • Verwenden Sie kubectl, um die Richtlinien zu entfernen:

    kubectl delete constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
    

KPT

  • Entfernen Sie die Richtlinien:

    kpt live destroy
    

Config Sync

Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:

  1. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    git rm -r SYNC_ROOT_DIR/policies/asm-policy-v0.0.1
    git commit -m 'Removing Anthos Service Mesh  policies'
    git push
    
  2. Prüfen Sie den Status:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Das Repository, das in der Spalte SYNCED angezeigt wird, bestätigt das Entfernen der Richtlinien.