Wenn Sie automatische Basis-Image-Aktualisierungen für Cloud Run konfigurieren, kann Google automatisch Sicherheits-Patches für die Betriebssystem- und Sprachlaufzeitkomponenten des Basis-Images anwenden. Sie müssen den Dienst nicht neu erstellen oder neu bereitstellen, damit das Basis-Image aktualisiert wird. Wenn das Basis-Image aktualisiert wird, wird keine neue Version erstellt.
Informationen zum Festlegen von Richtlinien für Sicherheitsupdates für Funktionen
, die mit gcloud functions-Befehlen oder
der Cloud Functions v2 API erstellt wurden, finden Sie unter
Sicherheit der Ausführungsumgebung.
Das folgende Diagramm zeigt, wie der Anwendungscode und die Abhängigkeiten („App-Image“) über der Sprachlaufzeit, den Betriebssystempaketen und dem Betriebssystem („Basis-Image“) angeordnet sind. Die Komponenten des Basis-Images werden automatisch von Google aktualisiert.
Richtlinie für Sicherheitsupdates
Automatische Updates: Aktualisierungen und Sicherheitspatches für die Laufzeitumgebung werden in neuen Versionen des Laufzeit-Images veröffentlicht. Nach einem Testzeitraum, der auf Stabilität und Zuverlässigkeit prüft, wird die aktualisierte Laufzeit für alle Dienste eingeführt, was zu einer Aktualisierung ohne Ausfallzeiten führt. Wenn Sie Sicherheitsupdates auf Sprachebene übernehmen möchten, müssen Sie möglicherweise Funktionen oder Dienste neu erstellen, die kompilierte Sprachen wie Go oder Java verwenden.
Bei Bereitstellungsupdates: Aktualisierungen und Sicherheitspatches werden nur dann auf Laufzeiten angewendet, wenn Dienste bereitgestellt oder neu bereitgestellt werden, sofern nicht anders angegeben. Aktualisierungen für die Bereitstellung sind sowohl für Cloud Run-Funktionen der 1. Generation als auch für Cloud Run-Funktionen verfügbar.
Automatische Sicherheitsupdates sind standardmäßig für Funktionen aktiviert, die mit Folgendem bereitgestellt werden:
gcloud functions- Cloud Functions v2 API
gcloud runmit dem Flag--functionsund dem Flag--base-image
Konfigurationsübersicht
So konfigurieren Sie automatische Updates für Basis-Images:
- Wählen Sie ein kompatibles Cloud Run-Basis-Image aus.
- Erstellen und stellen Sie Ihr Anwendungs-Image so bereit, dass die Möglichkeit erhalten bleibt, Ihren laufenden Dienst sicher neu zu starten.
Basis-Image auswählen
Das Basis-Image ist der Ausgangspunkt für die meisten containerbasierten Entwicklungsworkflows. Entwickler beginnen mit einem Basis-Image und fügen dann die erforderlichen Bibliotheken, Binärdateien und Konfigurationsdateien hinzu, die zum Ausführen ihrer Anwendung verwendet werden.
Google Cloud Buildpacks veröffentlicht und verwaltet Basis-Images zum Erstellen serverloser Anwendungen. Diese Basis-Images basieren auf der Ubuntu Linux-Distribution.
Cloud Run unterstützt nur automatische Basis-Images, die Buildpack-Basis-Images von Google Cloud verwenden.
Bei der Auswahl eines Buildpack-Basis-Images müssen Sie Folgendes berücksichtigen:
- Stack: Ein Stack besteht aus einer Linux Distributionsversion und Systempaketen wie OpenSSL und curl.
- Sprache: Die spezifische Version der Programmiersprache, die von Ihrer Anwendung verwendet wird.
Weitere Informationen zu Basis-Image-Varianten finden Sie unter Laufzeit-Basisbilder.
Anwendungs-Image erstellen
Für Dienste mit aktivierten automatischen Updates muss ein Anwendungs-Image bereitgestellt werden, bei dem die Basis-Betriebssystemebenen weggelassen werden. Dazu gibt es zwei mögliche Vorgehensweisen:
- Cloud Run-Bereitstellung aus Quelle verwenden (empfohlen)
- Kopieren Sie Ihre Anwendung mit einem Build-System in ein
scratch-Image.
Über Quelle bereitstellen
Mit der Cloud Run
Option zur Bereitstellung aus der Quelle können Sie Ihren Code erstellen und
bereitstellen, damit Ihr Dienst automatische
Updates empfangen kann. Dazu müssen Sie beim Erstellen der Anwendung das Flag --base-image angeben.
Wenn Sie beispielsweise einen Node.js-Dienst mit aktivierten automatischen Basis-Image-Updates bereitstellen möchten, verwenden Sie den folgenden Befehl:
gcloud run deploy \
--source . \
--base-image nodejs24 \
--automatic-updates
Wenn Sie eine Funktion bereitstellen möchten, müssen Sie das
--function Flag mit dem Funktionseinstiegspunkt aus Ihrem Quellcode angeben.
Auf scratch aufbauen
Sie können auch Ihre Build-Toolchain verwenden, um ein Anwendungscontainer-Image zu erstellen, das mit automatischen Basis-Image-Aktualisierungen kompatibel ist.
Wenn Sie einen Cloud Run-Dienst mit automatischen Basis-Image-Aktualisierungen bereitstellen, wird das Anwendungscontainer-Image auf ein Basiscontainer-Image aufgesetzt. Das Anwendungscontainer-Image sollte nur Ihre Anwendung enthalten, nicht das Betriebssystem oder die Laufzeit, die im Basiscontainer-Image bereitgestellt werden.
So erstellen Sie das Anwendungscontainer-Image:
- Erstellen Sie ein mehrstufiges Dockerfile mit den folgenden Eigenschaften:
- Die Anwendung wird mit einem geeigneten Basis-Image mit den erforderlichen Abhängigkeiten erstellt.
- Kopiert die erstellten Komponenten in ein Scratch-Image.
- Erstellen Sie das Anwendungscontainer-Image und übertragen Sie es per Push an Artifact Registry.
- Stellen Sie das Anwendungscontainer-Image in Cloud Run bereit und geben Sie ein Basis-Image an.
Mehrstufiges Dockerfile erstellen
In dieser Anleitung verwenden wir eine Node.js-Anwendung. Dieser Leitfaden ist nicht sprachspezifisch und kann für Ihre Anwendung und Sprache angepasst werden.
Erstellen Sie im Stammverzeichnis unseres Projekts eine
Dockerfile-Datei mit folgendem Inhalt:# This Dockerfile will produce an image that only includes the Node.js app and *not* the Node.js runtime. # The resulting image will not run locally. It is intended at being layered on top of a Node.js base image. FROM node:24-slim as builder # Create and change to the app directory. WORKDIR /usr/src/app # Copy application dependency manifests to the container image and install # production dependencies. COPY package*.json ./ RUN npm install --only=production # Copy local code to the container image. COPY . ./ # Copy the application source code and dependencies onto a scratch image. FROM scratch WORKDIR /workspace COPY --from=builder --chown=33:33 /usr/src/app/ ./ USER 33:33 # Run the web service on container startup. CMD [ "node", "index.js" ]
Dieses Dockerfile verwendet einen
mehrstufigen Build, um
den Quellcode und die Abhängigkeiten der Anwendung in ein scratch Image zu kopieren, bei dem
das Betriebssystem, die Pakete und Laufzeitkomponenten weggelassen und erst zur
Laufzeit vom verwalteten Cloud Run-Basis-Image bereitgestellt werden.
Anwendungs-Image erstellen
Erstellen Sie das Anwendungs-Image und laden Sie es in Artifact Registry hoch. Unter Container erstellen finden Sie weitere Informationen dazu, wie Sie eine Dockerfile mit Cloud Build erstellen und in die Artifact Registry hochladen.
Anwendungs-Image bereitstellen
Sie können jetzt Ihr Anwendungs-Image mit aktivierten automatischen Updates mit dem kompatibelsten Basis-Image für Ihre Anwendung bereitstellen. Im folgenden Beispiel werden die Laufzeit nodejs24 und die Region europe-west1 verwendet. Weitere Informationen zu Basis-Image-Varianten finden Sie unter
Laufzeit-Basisbilder.
Weitere Informationen zu den erforderlichen Rollen und Berechtigungen finden Sie unter Aus Quellcode bereitstellen.
gcloud
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Unten in der Google Cloud Console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.
Führen Sie den folgenden Befehl aus, um automatische Updates für die
nodejs24-Laufzeit beim Bereitstellen Ihres Anwendungs-Images zu aktivieren:gcloud run deploy SERVICE \ --image APP_IMAGE \ --base-image BASE_IMAGE
Ersetzen Sie Folgendes:
- SERVICE: Der Name des Dienstes, in dem Sie die Bereitstellung ausführen möchten.
- APP_IMAGE: Die URL Ihres Anwendungscontainer-Images.
- BASE_IMAGE: Die URL Ihres Basis-Images, z. B.
nodejs24odereurope-west1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24Weitere Informationen zu Basis-Image-Varianten finden Sie unter Laufzeit-Basisbilder .
YAML
Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud run services describe SERVICE --format export > service.yaml
Aktualisieren Sie
runtimeClassNameund dierun.googleapis.com/base-images-Anmerkungen:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/base-images: '{"NAME":"BASE_IMAGE"}' spec: containers: - name: NAME image: APP_IMAGE runtimeClassName: run.googleapis.com/linux-base-image-update
Ersetzen Sie Folgendes:
- SERVICE: Der Name des Dienstes, in dem Sie die Bereitstellung ausführen möchten.
- APP_IMAGE: Die URL Ihres Anwendungscontainer-Images.
- BASE_IMAGE: Die URL Ihres Basis-Images, z. B.
europe-west1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24. Weitere Informationen zu Basis-Image-Varianten finden Sie unter Laufzeit-Basisbilder.
Terraform
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Fügen Sie einergoogle_cloud_run_v2_service
Ressource in Ihrer Terraform-Konfiguration Folgendes hinzu:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
base_image_uri = "BASE_IMAGE"
}
}
}
Ersetzen Sie Folgendes:
- SERVICE: Der Name des Dienstes, in dem Sie die Bereitstellung ausführen möchten.
- REGION: Die Google Cloud Region.
- IMAGE_URL: Ein Verweis auf das Container-Image, zum
Beispiel
us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry, das Repository REPO_NAME muss bereits erstellt sein. Die URL hat das FormatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - BASE_IMAGE: Die URL Ihres Basis-Images, z. B.
us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24. Weitere Informationen zu Basis-Image-Varianten finden Sie unter Laufzeit-Basisbilder.
Container-Images für die lokale Ausführung neu zusammenstellen
Anwendungscontainer-Images, die mit automatischen Basis-Image-Updates verwendet werden, basieren auf scratch und können nicht außerhalb von Cloud Run ausgeführt werden, wenn Basis-Image-Updates aktiviert sind.
Sie können Ihr Anwendungs-Image ausführbar machen, indem Sie es auf einem kompatiblen Basis-Image neu ausrichten.
Installieren Sie die Docker Community Edition (CE) auf Ihrer Workstation.
Laden Sie das Anwendungs-Image herunter:
docker pull APP_IMAGEErsetzen Sie APP_IMAGE durch die URL Ihres Container Images.
Laden Sie das Basis-Image herunter:
docker pull BASE_IMAGEErsetzen Sie BASE_IMAGE durch den vollständigen Image-Pfad eines kompatiblen Basis-Images. Eine Liste der verfügbaren Basis-Images finden Sie unter Buildpack-Basis-Images von Google Cloud.
Bild wieder zusammensetzen:
Kopieren Sie mit einem
Dockerfilealle Dateien aus dem App-Image zurück in das Basis-Image:ARG APP_IMAGE ARG NEW_BASE_IMAGE # first copy all files from the app image onto the builder image FROM ${APP_IMAGE} AS app FROM ${NEW_BASE_IMAGE} AS builder COPY --from=app / / # restore the app image config by copying everything from previous step back # back onto the app image FROM ${APP_IMAGE} COPY --from=builder / /Erstellen Sie das Image:
docker build \ -t IMAGE \ --build-arg APP_IMAGE=APP_IMAGE \ --build-arg NEW_BASE_IMAGE=BASE_IMAGE \ .Ersetzen Sie IMAGE durch den Namen des neu zusammengesetzten Images.
Wenn Sie Warnungen erhalten, dass
ARG ${APP_IMAGE}undARG ${NEW_BASE_IMAGE}keine gültigen Basis-Images sind, können Sie diese ignorieren und das Image ausführen:docker run -p 8080:8080 IMAGE
Automatische Updates deaktivieren
Beim Bereitstellen aus der Quelle
Wenn Sie eine Bereitstellung aus der Quelle ausführen, können Sie automatische Basis-Image-Updates mithilfe des Flags --no-automatic-updates deaktivieren. Im folgenden Beispiel wird gezeigt, wie Sie automatische Basis-Image-Updates für einen Node.js-Dienst deaktivieren:
gcloud
gcloud run deploy SERVICE \ --source . \ --base-image nodejs24 \ --no-automatic-updates
Beim Bereitstellen eines Container-Images
Wenn Sie Basis-Image-Updates für einen Dienst deaktivieren möchten, der ein von Grund auf neu erstelltes Container-Image verwendet, müssen Sie ein neues Container-Image bereitstellen, das das Basis-Image enthält, und das Basis-Image entfernen:
gcloud
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Unten in der Google Cloud Console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.
Führen Sie den folgenden Befehl aus, um automatische Updates des Basis-Images zu deaktivieren:
gcloud run deploy SERVICE \ --image IMAGE \ --base-image ""
Ersetzen Sie Folgendes:
- SERVICE: Der Name des Dienstes, in dem Sie die Bereitstellung ausführen möchten.
- IMAGE: Die URL Ihres Container-Images, das die App, die Laufzeit und das Betriebssystem enthält.
YAML
Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud run services describe SERVICE --format export > service.yaml
Löschen Sie die Anmerkung
run.googleapis.com/base-images.Löschen Sie das
runtimeClassName-Attribut.Verwenden Sie in
imageein Container-Image, das die App, die Laufzeit und das Betriebssystem enthält.Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:
gcloud run services replace service.yaml
Basis-Image-Version ansehen
Wenn Sie die Basis-Image-Version sehen möchten, die zum Bereitstellen Ihrer Anwendung verwendet wird, rufen Sie die
LogEntry.labels.run.googleapis.com/base_image_versions Ressource
in den Cloud Run-Dienstlogs auf.
Bekannte Einschränkungen
Automatische Basis-Image-Updates werden nur für Buildpack-Basis-Images von Google Cloud unterstützt. Es ist nicht möglich, eigene Basis-Images zu verwenden.
Anwendungen, die kompilierte Sprachen verwenden, werden durch ein automatisches Basis-Image-Update nicht neu kompiliert.
Sicherheitsprüfungen Ihres Anwendungs-Images sind möglicherweise unvollständig. Da Ihr Anwendungs-Image jetzt auf
scratchbasiert, prüfen Sicherheitsscanner nur den Anwendungsteil Ihres Images. Um ein vollständigeres Bild der Containersicherheit zu erhalten, müssen Sie auch Scans für das entsprechende von Google bereitgestellte Basis-Image ausführen. Sie können das Basis-Image herunterladen und Open-Source-Tools verwenden, um einen Scan auszuführen.