Statistiken zur Laufzeitsicherheit

1. Einführung

In diesem Lab stellen Sie eine Anwendung in einem Cloud Run- und GKE-Cluster bereit und rufen Sicherheitserkenntnisse für die Bereitstellung in Software Delivery Shield Security auf.

Lerninhalte

  • Sicherheitserkenntnisse für Artifact Registry
  • Sicherheitserkenntnisse für Cloud Run
  • 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. 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 Teilnehmer dieses Projekts. Er ist eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können ihn 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 eine eindeutige Zeichenfolge. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie eine eigene ID eingeben und prüfen, ob sie verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Es gibt noch einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie die Abrechnung aktivieren in der Cloud Console, um Cloud-Ressourcen/APIs verwenden zu können. Die Durchführung dieses Codelabs sollte wenig oder gar nichts kosten. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach dieser Anleitung keine Kosten in Rechnung gestellt werden, können Sie die erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testprogramm im Wert von 300$ teilnehmen.

Umgebung einrichten

Klicken Sie rechts neben der Suchleiste auf das Symbol, um Cloud Shell zu aktivieren.

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. Er wird später im Lab verwendet:

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

3. Anwendung vorbereiten

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

Erstellen Sie in Cloud Shell ein neues Verzeichnis mit dem Namen starter-nodejs und öffnen Sie es:

mkdir starter-nodejs
cd starter-nodejs

Erstellen Sie eine package.json-Datei, indem Sie die folgenden Befehle ausführen:

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 obige Datei enthält einen Befehl zum Starten des Skripts und eine Abhängigkeit vom Express-Framework für Webanwendungen.

Erstellen Sie als Nächstes im selben Verzeichnis die Datei index.js, 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 Umgebungsvariablen PORT definierten Port überwacht. Die 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 die Erstellung 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. Sicherheitserkenntnisse für Artifact Registry und Cloud Build

Es dauert einige Minuten, bis der Build abgeschlossen ist.

Öffnen Sie Cloud Build und prüfen Sie die Build-Artefakte für den letzten Build.

Die Cloud Build-UI in der Google Cloud Console enthält den Bereich „Sicherheitserkenntnisse“ von Software Delivery Shield Security, in dem Sicherheitsinformationen zum Build angezeigt werden, z. B. die SLSA-Ebene, alle Sicherheitslücken in den Abhängigkeiten und die Build-Herkunft.

7d9fd2213f3704c4.png

Prüfen Sie die Sicherheitserkenntnisse für das erstellte Container-Image. Folgen Sie dem Link für gescannte Artefakte, um die Details zu den 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. Sicherheitserkenntnisse für Cloud Run

Cloud Run enthält einen Bereich „Sicherheit“ (Vorschau), in dem Sicherheitserkenntnisse zur Softwarelieferkette angezeigt werden, z. B. Informationen zur Einhaltung der SLSA-Build-Ebene, die Build-Herkunft und Sicherheitslücken, die in laufenden Diensten gefunden wurden.

Öffnen Sie Cloud Run und prüfen Sie die Sicherheitserkenntnisse auf dem Tab „REVISIONEN“ / „SICHERHEIT“.

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 für die Bereitstellung verwendete Verschlüsselungsschlüssel.
  • SLSA-Ebene:Dieser Build befindet sich auf SLSA-Ebene 3, die die Reifestufe des Software-Build-Prozesses gemäß der SLSA-Spezifikation angibt.
  • Sicherheitslücken:Alle in den Anwendungsabhängigkeiten gefundenen Sicherheitslücken.
  • Build-Details:Details des Builds wie der Builder und der Link zum Aufrufen von Logs.
  • Build-Herkunft:Herkunft des Builds, eine Sammlung überprüfbarer Metadaten zu einem Build. Dazu gehören Details wie die Digests der erstellten Images, die Quell-Speicherorte, die Build-Toolchain, die Build-Schritte und die Build-Dauer.

7. GKE-Sicherheitsstatus

GKE kann den Sicherheitsstatus Ihrer Container bewerten und aktive Anleitungen zu Clustereinstellungen, Arbeitslastkonfiguration und Sicherheitslücken geben. Dazu gehört das Sicherheitsstatus-Dashboard (Vorschau), das Ihre GKE-Cluster und -Arbeitslasten scannt, um Ihnen fundierte, umsetzbare Empfehlungen zur Verbesserung Ihres Sicherheitsstatus zu geben.

In den nächsten Schritten stellen Sie die Anwendung im GKE-Cluster bereit und prüfen die Sicherheitserkenntnisse im GKE-Sicherheitsstatus-Dashboard.

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 die Angriffsfläche begrenzt. Das clusterübergreifende Prüfen von Arbeitslasten auf Konfigurationsprobleme kann schwierig sein. Mit dem Sicherheitsstatus-Dashboard können Sie die Konfiguration all Ihrer laufenden Arbeitslasten in mehreren Clustern automatisch scannen und umsetzbare, bewertete Ergebnisse und Empfehlungen zur Verbesserung Ihres Sicherheitsstatus zurückgeben.

Aktivieren Sie das Scannen von Arbeitslastkonfigurationen:

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 bietet eine Reihe von Funktionen, die fundierte Informationen und Empfehlungen zur Verbesserung der Sicherheit Ihrer GKE-Cluster und -Arbeitslasten bereitstellen.

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

Wenn in Ihren Container-Images eine Sicherheitslücke gefunden wird, weist GKE eine Schweregradbewertung zu und zeigt die Ergebnisse im Sicherheitsstatus-Dashboard in der Google Cloud Console an. GKE fügt auch Einträge für Prüfung und Rückverfolgbarkeit zu Cloud Logging 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 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 die Konfigurationsprobleme und die betroffenen Arbeitslasten.

58e6f4b6d8eaa99a.png

Warum das Sicherheitsstatus-Dashboard verwenden?

Das Sicherheitsstatus-Dashboard ist eine grundlegende Sicherheitsmaßnahme, die Sie für jeden zulässigen GKE-Cluster aktivieren können. Google Cloud empfiehlt aus folgenden Gründen, das Sicherheitsstatus-Dashboard für alle Cluster zu verwenden:

  • Minimale Störungen: Die Funktionen beeinträchtigen oder stören keine laufenden Arbeitslasten.
  • Umsetzbare Empfehlungen: Wenn verfügbar, zeigt das Sicherheitsstatus-Dashboard Maßnahmen zur Behebung erkannter Probleme auf. Zu diesen Maßnahmen gehören Befehle, die Sie ausführen können, Beispiele für Konfigurationsänderungen, die Sie vornehmen sollten, und Ratschläge zur Entschärfung von Sicherheitslücken.
  • Visualisierung: Das Sicherheitsstatus-Dashboard bietet eine allgemeine Visualisierung der Aspekte, die sich auf Cluster in Ihrem Projekt auswirken. Es enthält Diagramme und Grafiken, die Ihren Fortschritt und die potenziellen Auswirkungen der einzelnen Aspekte zeigen.
  • Beurteilte Ergebnisse: GKE weist erkannten Problemen eine Schweregradbewertung zu, basierend auf dem Fachwissen der Sicherheitsteams von Google und der Branchenstandards.
  • Prü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.

Inhalt:

  • Informationen zu Sicherheitserkenntnissen für Build-Artefakte 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