Kurzanleitung: Pod-Sicherheit mit kontinuierlicher Validierung überwachen
Erfahren Sie mehr über die ersten Schritte mit der kontinuierlichen Autorisierungsvalidierung (Binärautorisierung, CV) mit prüfbasierten Richtlinien. In dieser Kurzanleitung verwenden Sie die folgenden Prüfungen für CVs, um laufende Pods kontinuierlich für die folgenden Bedingungen zu validieren:
- Vertrauenswürdiges Verzeichnis: prüft, ob sich die mit dem Pod verknüpften Images in einem oder mehreren vertrauenswürdigen Verzeichnissen befinden, die Sie in der Richtlinie angeben.
- Image-Aktualität: prüft, ob die Bilder des Pods innerhalb der Anzahl der Tage hochgeladen werden, die Sie in der Richtlinie angegeben haben.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Installieren Sie das
kubectl
-Befehlszeilentool - Wenn sich Ihre Richtlinien für die Binärautorisierung und GKE-Cluster in verschiedenen Projekten befinden, muss die Binärautorisierung in beiden Projekten aktiviert sein.
Eine Plattformrichtlinie erstellen
So richten Sie eine CV-GKE-Plattformrichtlinie ein:
Erstellen Sie die YAML-Datei für die Plattformrichtlinie:
cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - trustedDirectoryCheck: trustedDirPatterns: - us-central1-docker.pkg.dev/my-project/my-directory displayName: My trusted directory check - imageFreshnessCheck: maxUploadAgeDays: 30 displayName: My image freshness check displayName: My trusted directory and image freshness check set EOF
Bei dieser Richtlinie werden die folgenden Bedingungen geprüft:
Die Pods-Images werden im Artifact Registry-Repository mit dem Namen
us-central1-docker.pkg.dev/my-project/my-directory
gespeichert.Die Images der Pods wurden innerhalb der letzten 30 Tage in die Artifact Registry- oder Container Registry-Repositories hochgeladen.
Erstellen Sie die Plattformrichtlinie:
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=/tmp/my-policy.yaml \ --project=POLICY_PROJECT_ID
Ersetzen Sie Folgendes:
POLICY_ID
: ID Ihrer WahlPOLICY_PROJECT_ID
: Die Richtlinien-Projekt-ID
Cluster erstellen oder aktualisieren
Wenn Sie CV in einem Cluster aktivieren möchten, können Sie einen neuen Cluster erstellen oder einen vorhandenen Cluster aktualisieren.
Führen Sie den folgenden Befehl aus, um einen Cluster mit aktivierter prüfbasierter Plattformrichtlinie zu erstellen:
gcloud beta container clusters create CLUSTER_NAME
\ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_IDErsetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der Standort, z. B.us-central1
oderasia-south1
POLICY_PROJECT_ID
: Die ID des Projekts, in dem die Richtlinie gespeichert ist.POLICY_ID
: Die Richtlinien-ID.CLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Warten Sie, bis der Cluster erstellt wurde.
Führen Sie den folgenden Befehl aus, um einen vorhandenen Cluster mit aktivierten prüfbasierten Richtlinien zu aktualisieren:
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Ersetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der Standort, z. B.us-central1
oderasia-south1
POLICY_PROJECT_ID
: Die ID des Projekts, in dem die Richtlinie gespeichert ist.POLICY_ID
: Die Richtlinien-ID.CLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Warten Sie, bis der Cluster aktualisiert wurde.
Ein Image bereitstellen
Rufen Sie die Anmeldedaten für
kubectl
ab:gcloud container clusters get-credentials CLUSTER_NAME
Ein Image bereitstellen:
kubectl run hello-app \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Das Image
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
erfüllt die Aktualitätsprüfung, da es innerhalb der letzten 30 Tage in das Repository hochgeladen wurde. Das Image erfüllt jedoch nicht die vertrauenswürdige Verzeichnisprüfung, da es sich nicht inus-central1-docker.pkg.dev/my-project/my-directory
befindet. Daher erzeugt CVTrustedDirectoryCheck
-Logeinträge in Cloud Logging.
Logs ansehen
Der Logeintrag wird innerhalb von 24 Stunden nach der Bereitstellung des Pods in Cloud Logging angezeigt, kann jedoch in nur wenigen Stunden angezeigt werden.
Verwenden Sie den folgenden Filter, um das Log in Cloud Logging aufzurufen:
logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"
Das Log für den Pod hello-app
sieht in etwa so aus: Einige Felder können je nach Projekt-ID, Clustername usw. unterschiedlich sein.
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/1234567890/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "Default check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
Der Logeintrag enthält Informationen zum Richtlinienverstoß, einschließlich der folgenden Felder:
policyName
: eine Plattformrichtlinie, die CV beim Identifizieren des Verstoßes verwendet hatcheckResults
: Ein Ergebnisblock, der die folgenden Felder enthält:explanation
: Eine FehlermeldungcheckSetName
: Der WertdisplayName
für die DiagnosegruppecheckSetIndex
: Index der in der Richtlinie festgelegten DiagnosecheckName
: Der Name der DiagnosecheckIndex
: Der Index der Diagnose in der Diagnosegruppeverdict
: Das Ergebnis, das zum Logeintrag geführt hat, in diesem FallNOT_CONFORMANT
, da die Prüfung nicht erfüllt war.
Einige Prüfungen können zusätzliche Informationen enthalten, die Aufschluss darüber geben, warum die Diagnose nicht erfüllt wurde.
Da das Image der Aktualitätsprüfung entspricht, wird es nicht im Log angezeigt.
Bereinigen
Löschen Sie das Google Cloud-Projekt mit den Ressourcen, damit Ihrem Google Cloud-Konto die auf dieser Seite verwendeten Ressourcen nicht in Rechnung gestellt werden.
In diesem Abschnitt wird beschrieben, wie Sie das zuvor in dieser Anleitung konfigurierte CV-Monitoring bereinigen.
Sie können das CV-Monitoring oder sowohl die Binärautorisierung als auch CV in Ihrem Cluster deaktivieren.
Binärautorisierung in einem Cluster deaktivieren
Führen Sie den folgenden Befehl aus, um die CV und Binärautorisierungserzwingung in Ihrem Cluster zu deaktivieren:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
Ersetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der ClusterstandortCLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Prüfbasiertes Richtlinien-Monitoring in einem Cluster deaktivieren
Führen Sie den folgenden Befehl aus, um CV mit prüfbasierten Richtlinien im Cluster zu deaktivieren und die Erzwingung mithilfe der Richtlinie für die Binärautorisierungserzwingung neu zu aktivieren:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
Ersetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der ClusterstandortCLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Beachten Sie, dass --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
dem älteren Flag --enable-binauthz
entspricht.
Richtlinie löschen
Führen Sie den folgenden Befehl aus, um die Richtlinie zu löschen. Die prüfbasierte Plattformrichtlinie muss nicht gelöscht werden, um die prüfbasierte Richtlinienprüfung zu deaktivieren.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Ersetzen Sie Folgendes:
POLICY_ID
: Die ID der RichtliniePOLICY_PROJECT_ID
: Die Richtlinien-Projekt-ID