Kurzanleitung: Pod-Sicherheit mit kontinuierlicher Validierung überwachen
Erste Schritte mit der kontinuierlichen Validierung (CV) für die Binärautorisierung mit prüfbasierten Richtlinien In dieser Kurzanleitung verwenden Sie die folgenden Prüfungen für die kontinuierliche Validierung, 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.
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Aktivieren Sie die APIs für die Binärautorisierung und Google Kubernetes Engine, falls sie noch nicht aktiviert sind:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable container.googleapis.com
binaryauthorization.googleapis.com -
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Aktivieren Sie die APIs für die Binärautorisierung und Google Kubernetes Engine, falls sie noch nicht aktiviert sind:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud 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 EOFMit 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-directorygespeichert.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_IDErsetzen 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_NAMEist der Name des Clusters.LOCATION: Der Standort, z. B.us-central1oderasia-south1POLICY_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_IDErsetzen Sie Folgendes:
CLUSTER_NAMEist der Name des Clusters.LOCATION: Der Standort, z. B.us-central1oderasia-south1POLICY_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
kubectlab:gcloud container clusters get-credentials CLUSTER_NAMEEin Image bereitstellen:
kubectl run hello-app \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0Das Image
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0erfü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-directorybefindet. 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 WertdisplayNamefü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 Projekt von Google Cloud zusammen mit den Ressourcen, damit Ihrem Konto von Google Cloud die auf dieser Seite verwendeten Ressourcen nicht in Rechnung gestellt werden.
In diesem Abschnitt wird beschrieben, wie Sie das zuvor in dieser Anleitung konfigurierte Monitoring der kontinuierlichen Validierung 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_NAMEist 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_NAMEist 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