Statistiken zur Laufzeitsicherheit

1. Einführung

In diesem Lab stellen Sie eine Anwendung in einem Cloud Run- und GKE-Cluster bereit und sehen sich Sicherheitsinformationen für das Deployment in Software Delivery Shield Security an.

Aufgaben in diesem Lab

  • Artifact Registry-Sicherheitsinformationen
  • Cloud Run-Sicherheitsinformationen
  • GKE-Sicherheitsstatus

2. Einrichtung und Anforderungen

Cloud-Projekt einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die üblicherweise als PROJECT_ID gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.

Umgebung einrichten

Aktivieren Sie Cloud Shell, indem Sie auf das Symbol rechts neben der Suchleiste klicken.

ecdc43ada29e91b.png

Aktivieren Sie in Cloud Shell die für dieses Lab erforderlichen APIs:

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf „Autorisieren“. um fortzufahren.

6356559df3eccdda.png

Wenn die Aktivierung erfolgreich war, erhalten Sie eine Meldung, die ungefähr so aussieht:

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

Führen Sie den Befehl aus, um den GKE-Cluster asynchron zu erstellen. Sie wird später in diesem Lab verwendet:

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. Antrag vorbereiten

Zuerst bereiten Sie eine einfache Express-basierte Node.js-Anwendung vor, die auf HTTP-Anfragen reagiert.

Erstellen Sie in Cloud Shell ein neues Verzeichnis mit dem Namen starter-nodejs und wechseln Sie zu diesem Verzeichnis:

mkdir starter-nodejs
cd starter-nodejs

Erstellen Sie mit den folgenden Befehlen eine package.json-Datei:

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

Die Datei oben enthält einen Startskriptbefehl und eine Abhängigkeit vom Express-Framework für Webanwendungen.

Erstellen Sie als Nächstes im selben Verzeichnis eine index.js-Datei, indem Sie die folgenden Befehle ausführen:

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

Mit diesem Code wird ein einfacher Webserver erstellt, der den von der Umgebungsvariable PORT definierten Port überwacht. Ihre Anwendung ist jetzt fertig und kann containerisiert und bereitgestellt werden.

4. Cloud Run-Anwendung bereitstellen

Führen Sie den folgenden Befehl aus, um die Anwendung bereitzustellen:

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

Bestätigen Sie das Erstellen des Artifact Registry-Repositorys:

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

5. Artifact Registry und Cloud Build Security Insights

Es dauert einige Minuten, bis der Build abgeschlossen ist.

Öffnen Sie Cloud Build und überprüfen Sie die Build-Artefakte auf den neuesten Build.

Die Cloud Build-Benutzeroberfläche in der Google Cloud Console enthält den Bereich „Software Delivery Shield Security“ mit Sicherheitsinformationen zum Build, z. B. SLSA-Level, Sicherheitslücken in den Abhängigkeiten und Build-Herkunft.

7d9fd2213f3704c4.png

Prüfen Sie die Sicherheitsinformationen für das erstellte Container-Image. Folgen Sie dem Link zu gescannten Artefakten, um Details zu Sicherheitslücken für dieses Image in Artifact Registry aufzurufen.

Kehren Sie zur Cloud Shell-Konsole zurück und prüfen Sie, ob die Bereitstellung der Cloud Run-Anwendung abgeschlossen ist.

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. Cloud Run-Sicherheitsinformationen

Cloud Run enthält einen Sicherheitsbereich (Vorabversion), in dem Statistiken zur Sicherheit der Softwarelieferkette angezeigt werden, z. B. Informationen zur Compliance auf SLSA-Build-Ebene, zur Build-Herkunft und zu Sicherheitslücken in ausgeführten Diensten.

Öffnen Sie Cloud Run und sehen Sie sich die Sicherheitsinformationen auf dem Tab „ÜBERARBEITUNGEN / SICHERHEIT“ an.

62a9f5d26207e58e.png

In diesem Bereich werden die folgenden Informationen angezeigt:

  • Identität und Verschlüsselung: Die E-Mail-Adresse des Compute Engine-Standarddienstkontos und der Verschlüsselungsschlüssel, der für die Bereitstellung verwendet wird.
  • SLSA-Level:Dieser Build entspricht dem SLSA-Level 3. Damit wird der Reifegrad des Software-Build-Prozesses gemäß der SLSA-Spezifikation angegeben.
  • Sicherheitslücken: Alle Sicherheitslücken in Anwendungsabhängigkeiten.
  • Build-Details:Details zum Build, z. B. der Builder und der Link zum Ansehen von Logs.
  • Build-Herkunft:Herkunft für den Build, d. h. eine Sammlung überprüfbarer Metadaten zu einem Build. Sie enthält Details wie die Digests der erstellten Images, die Speicherorte der Eingabequellen, die Build-Toolchain, Build-Schritte und die Build-Dauer.

7. GKE-Sicherheitsstatus

GKE kann den Sicherheitsstatus von Containern bewerten und aktiv Unterstützung in Bezug auf Clustereinstellungen, Arbeitslastkonfiguration und Sicherheitslücken bieten. Dazu gehört das Dashboard für den Sicherheitsstatus (Vorabversion), das Ihre GKE-Cluster und -Arbeitslasten scannt. So erhalten Sie fundierte, umsetzbare Empfehlungen zur Verbesserung Ihres Sicherheitsstatus.

In den nächsten Schritten stellen Sie die Anwendung im GKE-Cluster bereit und überprüfen die Sicherheitsinformationen im GKE-Dashboard für den Sicherheitsstatus.

Prüfen Sie mit dem folgenden Befehl, ob der Cluster bereit ist:

gcloud beta container clusters list

Beispielausgabe:

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

Rufen Sie die Anmeldedaten und die Konfiguration für den GKE-Cluster ab:

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

Führen Sie den Befehl aus, um die Anwendung mit dem im vorherigen Schritt erstellten Image bereitzustellen:

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

Die GKE-Arbeitslasten sollten idealerweise eine gehärtete Konfiguration haben, die ihre Angriffsfläche begrenzt. Es kann schwierig sein, Arbeitslasten clusterübergreifend auf Konfigurationsprobleme zu prüfen, und zwar in großem Umfang manuell. Sie können das Dashboard für den Sicherheitsstatus verwenden, um die Konfiguration aller ausgeführten Arbeitslasten in mehreren Clustern automatisch zu scannen und umsetzbare, bewertete Ergebnisse sowie spezifische Empfehlungen zur Verbesserung Ihres Sicherheitsstatus zurückzugeben.

Aktivieren Sie das Scannen der Arbeitslastkonfiguration:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

Neben dem Scannen der Arbeitslastkonfiguration können Sie auch das Scannen von Arbeitslasten auf Sicherheitslücken aktivieren und die Ergebnisse im Sicherheitsstatus-Dashboard prüfen. Dieses Dashboard umfasst eine Reihe von Features, die spezifische Informationen und Empfehlungen zur Verbesserung der Sicherheit Ihrer GKE-Cluster und -Arbeitslasten enthalten.

GKE scannt die Container-Images in jedem zulässigen Pod, der in Ihrem GKE-Cluster ausgeführt wird, automatisch auf bekannte Sicherheitslücken. Dazu werden Daten zu Sicherheitslücken aus öffentlichen CVE-Datenbanken wie NIST verwendet.

Wenn in Ihren Container-Images eine Sicherheitslücke gefunden wird, weist GKE einen Schweregrad zu und zeigt die Ergebnisse im Dashboard für den Sicherheitsstatus in der Google Cloud Console an. GKE fügt Cloud Logging außerdem Einträge zur Prüfung und Rückverfolgbarkeit hinzu.

Aktivieren Sie das Scannen von Arbeitslasten auf Sicherheitslücken:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

Öffnen Sie die GKE-Seite Security Posture (Sicherheitsstatus).

Warten Sie einige Minuten, bis die Prüfung der Arbeitslast abgeschlossen ist, und prüfen Sie dann die Ergebnisse.

5b1b8158bc55ce67.png

Prüfen Sie Konfigurationsbedenken und betroffene Arbeitslasten.

58e6f4b6d8eaa99a.png

Vorteile des Dashboards für den Sicherheitsstatus

Das Dashboard für den Sicherheitsstatus ist eine grundlegende Sicherheitsmaßnahme, die Sie für jeden geeigneten GKE-Cluster aktivieren können. Google Cloud empfiehlt aus folgenden Gründen, das Dashboard für den Sicherheitsstatus in allen Clustern zu verwenden:

  • Minimale Unterbrechungen: Laufende Arbeitslasten werden nicht durch Features beeinträchtigt oder unterbrochen.
  • Umsetzbare Empfehlungen: Sofern verfügbar, werden im Dashboard für den Sicherheitsstatus Maßnahmen zur Behebung erkannter Probleme angezeigt. Zu diesen Aktionen gehören Befehle, die Sie ausführen können, Beispiele für erforderliche Konfigurationsänderungen und Tipps dazu, wie Sie Sicherheitslücken minimieren können.
  • Visualisierung: Das Dashboard für den Sicherheitsstatus bietet eine allgemeine Visualisierung der Bedenken, die Cluster in Ihrem Projekt betreffen, und enthält Diagramme und Grafiken, die den von Ihnen gemachten Fortschritt und die möglichen Auswirkungen der einzelnen Bedenken darstellen.
  • Bewertende Ergebnisse: Die GKE vergibt für erkannte Bedenken einen Schweregrad, der auf dem Fachwissen der Sicherheitsteams von Google und den Branchenstandards basiert.
  • Überprüfbare Ereignislogs: GKE fügt alle erkannten Probleme in Logging hinzu, um die Berichterstellung und Beobachtbarkeit zu verbessern.

8. Glückwunsch!

Glückwunsch! Sie haben das Codelab abgeschlossen.

Behandelte Themen:

  • Security Insights-Informationen zu Build-Artefakten und Anwendungen, die in Cloud Run und GKE ausgeführt werden

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

Letzte Aktualisierung: 21.03.2023