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 Felderhosts
odernotHosts
nur verwendet werden, wenn das Istio-Ingress-Gateway mit dem Labelistio:ingressgateway
ausgewählt wird.Wenn in
AuthorizationPolicy
die Feldermethods
odernotMethods
verwendet werden, müssen die Werte Großbuchstaben sein.Wenn in
AuthorizationPolicy
das Feldrequest.headers
verwendet wird, dürfen die Werte keine Leerzeichen enthalten.Wenn in
AuthorizationPolicy
die Felderpaths
odernotPaths
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 Felderhosts
odernotHosts
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 entwederUNSET
oderSTRICT
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
- Installieren und initialisieren Sie die Google Cloud CLI, die die in dieser Anleitung verwendeten Befehle
gcloud
undkubectl
enthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert. - 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.
- Prüfen Sie, ob Anthos Service Mesh in Ihrem Cluster installiert ist.
Policy Controller für referenzielle Einschränkungen konfigurieren
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.
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
(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
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
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
Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
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
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
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"
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
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
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
- 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:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
So erstellen oder hängen Sie
.gitignore
mitresourcegroup.yaml
an:echo resourcegroup.yaml >> .gitignore
Erstellen Sie ein dediziertes
policies
-Verzeichnis:mkdir -p policies
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
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
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"
(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
Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie
policies/asm-policy-v0.0.1
dem Stammverzeichniskustomization.yaml
hinzu. Andernfalls entfernen Sie die Dateipolicies/asm-policy-v0.0.1/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/asm-policy-v0.0.1/kustomization.yaml
Ü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
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
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"}]'
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
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
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:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Ü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
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:
Ü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
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.