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

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

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

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  12. Installieren Sie das kubectl-Befehlszeilentool
  13. 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:

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

  2. 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 Wahl
    • POLICY_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_ID
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME ist der Name des Clusters.
    • LOCATION: Der Standort, z. B. us-central1 oder asia-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 oder asia-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

  1. Rufen Sie die Anmeldedaten für kubectl ab:

    gcloud container clusters get-credentials CLUSTER_NAME
    
  2. 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 in us-central1-docker.pkg.dev/my-project/my-directory befindet. Daher erzeugt CV TrustedDirectoryCheck-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 hat
  • checkResults: Ein Ergebnisblock, der die folgenden Felder enthält:

    • explanation: Eine Fehlermeldung
    • checkSetName: Der Wert displayName für die Diagnosegruppe
    • checkSetIndex: Index der in der Richtlinie festgelegten Diagnose
    • checkName: Der Name der Diagnose
    • checkIndex: Der Index der Diagnose in der Diagnosegruppe
    • verdict: Das Ergebnis, das zum Logeintrag geführt hat, in diesem Fall NOT_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 Clusterstandort
  • CLUSTER_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 Clusterstandort
  • CLUSTER_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 Richtlinie
  • POLICY_PROJECT_ID: Die Richtlinien-Projekt-ID

Nächste Schritte