Vom Kunden verwaltete Verschlüsselungsschlüssel verwenden

In diesem Thema wird gezeigt, wie Sie Container-Images schützen, die in Cloud Run-Diensten mit vom Kunden verwalteten Verschlüsselungsschlüsseln (Customer Managed Encryption Keys, CMEKs) für Cloud KMS bereitgestellt werden. Sie können dieses Feature verwenden, um von Cloud Run importierte Container mit einem ruhenden CMEK-Schlüssel zu schützen.

Sie sollten Folgendes beachten:

  • Dateimetadaten wie der Dateipfad sind nicht verschlüsselt.
  • Metadaten des Cloud Run-Dienstes wie Name oder Umgebungsvariablen werden nicht mit dem bereitgestellten Schlüssel verschlüsselt, sondern mit einem Google-eigenen und von Google verwalteten Schlüssel.
  • Zur Laufzeit werden der Speicher- und Dateiinhalt nicht verschlüsselt.
  • Wenn ein CMEK-Schlüssel deaktiviert ist, werden neue Instanzen vorhandener Cloud Run-Überarbeitungen, die den Schlüssel verwenden, nicht gestartet.
  • Wenn ein CMEK-Schlüssel deaktiviert ist, schlägt die Bereitstellung einer neuen Cloud Run-Überarbeitung fehl, sofern kein neuer gültiger Schlüssel verwendet wird.

Da der CMEK-Schlüssel von Ihnen und nicht von Google kontrolliert wird, kann niemand (auch Google nicht) auf die Daten zugreifen, die durch diese Verschlüsselungsschlüssel geschützt sind, wenn die Schlüssel deaktiviert oder gelöscht werden.

Mit CMEK werden Audit-Logs generiert. Weitere Informationen finden Sie unter Audit-Logs und Fehlermeldungen verstehen.

Cloud KMS-Kontingente und Cloud Run

Sie können Ihren CMEK auf eine der verfügbaren Schutzstufen setzen, um anzugeben, wie kryptografische Vorgänge ausgeführt werden. Wenn Sie CMEK in Cloud Run verwenden, können Ihre Projekte Kontingente für kryptografische Cloud KMS-Anfragen verbrauchen. CMEK-verschlüsselte Repositories können diese Kontingente beispielsweise pro Up- oder Download verbrauchen.

Ver- und Entschlüsselungsvorgänge über CMEK-Schlüssel wirken sich auf die Cloud KMS-Kontingente so aus:

  • Für in Cloud KMS generierte Software-CMEK-Schlüssel wird kein Cloud KMS-Kontingent verbraucht.
  • Bei Hardware-CMEK-Schlüsseln (manchmal auch Cloud HSM-Schlüssel genannt) werden Verschlüsselungs- und Entschlüsselungsvorgänge auf Cloud HSM-Kontingente in dem Projekt angerechnet, das den Schlüssel enthält.
  • Bei externen CMEK-Schlüsseln (manchmal auch Cloud EKM-Schlüssel genannt) werden Verschlüsselungs- und Entschlüsselungsvorgänge auf Cloud EKM-Kontingente in dem Projekt angerechnet, das den Schlüssel enthält.

Weitere Informationen finden Sie unter Cloud KMS-Kontingente.

Von CMEK betroffenes Autoscaling-Verhalten

Das erwartete Autoscaling für Ihren Cloud Run-Dienst kann betroffen sein, wenn Sie vom Kunden verwaltete Verschlüsselungsschlüssel verwenden. Beispielsweise kann die Latenz beim Starten neuer Instanzen aufgrund von Verzögerungen bei der Kontaktaufnahme mit externen Schlüsselverwaltungssystemen während des Schlüsselvorgangs erhöhen.

Die folgende Tabelle zeigt die möglichen Verhaltensänderungen aufgrund der Verwendung von CMEK-Schlüsseln:

CMEK-bezogener Vorgang Verhalten von Autoscaling
Schlüssel deaktiviert/gelöscht/widerrufen Neue Instanzen werden nicht gestartet.
Externer Schlüsselmanager kann nicht kontaktiert werden Wenn die Schlüsselanfrage wiederholt werden kann, werden während der Wiederholungsversuche keine Instanzen heruntergefahren und keine neuen Instanzen gestartet. Das Hochskalieren kann langsamer als erwartet erscheinen.
Wenn die Schlüsselanfrage nicht wiederholt werden kann, werden keine neuen Instanzen gestartet und laufende Instanzen nach einer Wartezeit heruntergefahren.
KMS-Kontingent überschritten Wird dieses Kontingent überschritten, werden RESOURCE_EXHAUSTED-Fehler protokolliert und neue Instanzen werden nicht gestartet. Sie können zusätzliche Kontingente anfordern, um dieses Problem zu beheben.

Hinweise

Cloud Run Zugriff auf einen Schlüssel gewähren

Führen Sie die folgenden Schritte aus, um CMEK für Cloud Run zu verwenden:

  1. Konfigurieren Sie Artifact Registry für die Verwendung von CMEK.

  2. Verwenden Sie die Docker-Kurzanleitung für Artifact Registry als Referenz, um ein Docker-Repository zu erstellen und ein Image dorthin zu übertragen.

  3. Verwenden Sie einen vorhandenen symmetrischen Cloud KMS-Schlüssel oder erstellen Sie einen neuen symmetrischen Schlüssel.

  4. Damit Cloud Run Zugriff auf den Schlüssel erhält, weisen Sie dem Cloud Run-Dienst-Agent die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler zu:

    Console

    1. Zur Seite Kryptografische Schlüssel

    2. Klicken Sie auf den Schlüsselbund für Ihren Schlüssel, um die zugehörige Seite mit der Schlüsselliste zu öffnen.

    3. Wählen Sie den Schlüssel aus und klicken Sie im rechten Tab „Berechtigungen“ auf Hauptkonto hinzufügen.

    4. Kopieren Sie im Feld Neue Hauptkonten die Cloud Run-E-Mail-Adresse des Dienst-Agents. Es hat das folgende Suffix:

      PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    5. Wählen Sie im Feld Rolle auswählen Cloud KMS CryptoKey Verschlüsseler/Entschlüsseler aus.

    6. Klicken Sie auf Speichern.

    gcloud

    Verwenden Sie den folgenden gcloud kms Befehl:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring=KEYRING \
    --location=LOCATION) \
    --member serviceAccount:PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
    --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

    Ersetzen

    • KEY_NAME durch den Namen des Schlüssels.
    • KEYRING durch den Name des Schlüsselbunds
    • LOCATION durch den Namen Ihrer Region.
    • PROJECT_NUMBER Durch die Projektnummer, in der Sie den Cloud Run-Dienst bereitstellen möchten.

    Sie benötigen Berechtigung zum Verwalten von Cloud KMS-Ressourcen im Google Cloud-Projekt, um die IAM-Rolle roles/cloudkms.cryptoKeyEncrypterDecrypter zu gewähren. Nur IAM-Mitglieder mit der Rolle „Inhaber“ (roles/owner) oder „Cloud KMS-Administrator“ (roles/cloudkms.admin) können den Zugriff auf Cloud KMS-Ressourcen gewähren oder entziehen.

CMEK für einen Cloud Run-Dienst konfigurieren

Jede Konfigurationsänderung führt zur Erstellung einer neuen Überarbeitung. Für nachfolgende Überarbeitungen gilt automatisch dieselbe Konfigurationseinstellung, sofern Sie sie nicht explizit aktualisieren.

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. Klicken Sie auf Container bereitstellen und wählen Sie Dienst aus, um einen neuen Dienst zu konfigurieren. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und dann auf Neue Überarbeitung bearbeiten und bereitstellen.

  3. Wenn Sie einen neuen Dienst konfigurieren, füllen Sie die Seite mit den anfänglichen Diensteinstellungen aus und klicken Sie dann auf Container, Volumes, Netzwerk, Sicherheit, um die Seite zur Dienstkonfiguration zu maximieren.

  4. Klicken Sie auf den Tab Sicherheit.

    Bild

    • Unter Verschlüsselung:
      1. Wählen Sie Vom Kunden verwalteter Verschlüsselungsschlüssel (CMEK) aus.
      2. Wählen Sie im Menü Vom Kunden verwalteten Schlüssel auswählen eine der folgenden Optionen aus:
        • Wählen Sie Projekt wechseln aus, wenn Sie einen Schlüssel aus einem anderen Projekt verwenden müssen. Sie können auf einen Schlüssel aus einem anderen Projekt verweisen, wenn das Dienstkonto Ihres Projekts auf den Schlüssel für Verschlüsselungs- und Entschlüsselungsvorgänge zugreifen kann.

        • Wählen Sie Schlüssel manuell eingeben aus, um das Secret aus einem Projekt im folgenden Format einzugeben: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

        So kopieren Sie den Ressourcennamen aus einem anderen Projekt, auf das Sie Zugriff haben, und fügen es ein:

        • Zur Seite Kryptografische Schlüssel.
        • Klicken Sie auf den Schlüsselbund.
        • Wählen Sie den Namen des ausgewählten Schlüsselbunds aus und klicken Sie auf Aktionen.
        • Wählen Sie im Menü Ressourcenname kopieren aus und fügen Sie ihn in das Feld Name der Schlüsselressource aus dem vorherigen Schritt ein.

      3. Wählen Sie im Menü Schlüsselwiderrufsaktion eine der folgenden Optionen aus:
        • Neue Containerinstanz verhindern: Nach dem Widerrufen des CMEK-Schlüssels werden keine neuen Instanzen mehr gestartet.

        • So bald wie möglich herunterfahren: Nach der Sperrung des CMEK-Schlüssels werden keine neuen Instanzen gestartet und vorhandene Instanzen werden heruntergefahren.

        • Benutzerdefinierte Shutdown-Verzögerung: Geben Sie die Anzahl der Stunden an, bevor der Dienst heruntergefahren wird.

  5. Klicken Sie auf Erstellen oder Bereitstellen.

gcloud

Verwenden Sie einen der folgenden Befehle, um einen Schlüssel für einen Dienst festzulegen:

gcloud run deploy SERVICE \
--image IMAGE_URL \
--key KEY \
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS
gcloud run services update SERVICE --key KEY
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS

Ersetzen

  • SERVICE durch den Namen des Dienstes.
  • IMAGE_URL durch einen Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • KEY durch den voll qualifizierten Schlüsselnamen im folgenden Format: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.
  • KEY_REVOCATION_ACTION durch shut-down oder prevent-new, je nach Ihren Einstellungen für den Widerruf von Schlüsseln.
  • SHUTDOWN_HOURS durch die Verzögerung in Stunden, bevor der Dienst nach dem Widerrufen heruntergefahren wird.

YAML

  1. 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
  2. Aktualisieren Sie die folgenden CMEK-Annotationen auf die gewünschten Werte:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/encryption-key: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
            run.googleapis.com/post-key-revocation-action-type: KEY_REVOCATION_ACTION
            run.googleapis.com/encryption-key-shutdown-hours: SHUTDOWN_HOURS
          name: REVISION

    Ersetzen

    • SERVICE durch den Namen Ihres Cloud Run-Dienstes.
    • PROJECT_NAME durch den Namen des Projekts, in dem der Schlüssel erstellt wurde.
    • LOCATION durch den Standort, an dem der Schlüssel erstellt wurde. Muss mit dem Standort des Cloud Run-Dienstes übereinstimmen.
    • KEYRING_NAME durch den Namen des Schlüsselbunds.
    • KEY_NAME durch den Namen des Schlüssels.
    • KEY_REVOCATION_ACTION durch shut-down oder prevent-new, je nach Ihren Einstellungen für den Widerruf von Schlüsseln.
    • SHUTDOWN_HOURS durch die Verzögerung in Stunden, bevor der Dienst nach dem Widerrufen heruntergefahren wird.
    • REVISION durch einen neuen Überarbeitungsnamen oder löschen (falls vorhanden). Wenn Sie einen neuen Überarbeitungsnamen angeben, muss er die folgenden Kriterien erfüllen:
      • Beginnt mit SERVICE-
      • Enthält nur Kleinbuchstaben, Ziffern und -
      • Endet nicht mit -
      • Darf nicht mehr als 63 Zeichen enthalten
  3. Ersetzen Sie den Dienst mit dem folgenden Befehl durch die neue Konfiguration:

    gcloud run services replace service.yaml

Sicherheitseinstellungen abrufen

So rufen Sie die aktuellen Sicherheitseinstellungen für Ihren Cloud Run-Dienst auf:

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. Klicken Sie auf den gewünschten Dienst, um die Seite Dienstdetails zu öffnen.

  3. Klicken Sie auf den Tab Überarbeitungen.

  4. Auf der rechten Seite finden Sie die Sicherheitseinstellung auf dem Tab Sicherheit.

gcloud

  1. Verwenden Sie den folgenden Befehl:

    gcloud run services describe SERVICE
  2. Suchen Sie in der zurückgegebenen Konfiguration nach der Sicherheitseinstellung.

CMEK-Widerruf testen

  1. Führen Sie den folgenden Befehl aus, um zu prüfen, ob der Dienst zugänglich ist:

    curl SERVICE_URL

    Ersetzen Sie SERVICE_URL durch die Dienst-URL. Sie finden sie nach der Bereitstellung in der Console-UI: Die Container-URL wird neben dem Text URL: angezeigt.

  2. Schlüsselversion deaktivieren

  3. Warten Sie die Anzahl an SHUTDOWN_HOURS ab, die Sie angegeben haben. Wenn Sie Schlüssel wieder aktivieren nicht angegeben haben und den Dienst mit einem Wert von mindestens einer Stunde bearbeiten oder noch einmal bereitstellen.

  4. Nachdem Sie die Anzahl an SHUTDOWN_HOURS abgewartet haben, führen Sie den folgenden Befehl noch einmal aus und bestätigen Sie, dass der Dienst nicht mehr zugänglich ist:

curl SERVICE_URL

Informationen zu Audit-Logs und Fehlermeldungen

Wenn Sie für das Monitoring der Audit-Logs zuständig sind, besteht Ihre Aufgabe möglicherweise darin, CMEK-Vorgänge in Ihrem Cloud Run-Dienst zu prüfen. In diesem Fall müssen Sie die zugehörigen Audit-Logs verstehen.

Wenn Sie für das Beheben und Beheben von Laufzeitfehlern für Ihren Cloud Run-Dienst zuständig sind, müssen Sie möglicherweise CMEK-bezogene Fehler beheben, die während des Vorgangs des Cloud Run-Dienstes protokolliert werden.

Die folgenden Abschnitte enthalten Informationen, die für die vorhergehenden Aufgaben erforderlich sind.

Audit-Logs

KMS-Audit-Logs bieten einen Audit-Trail für jeden Vorgang, der mit einem Schlüssel ausgeführt wird. Für CMEK-fähige Cloud Run-Dienste fügt Cloud Run einen spezifischen Aufruferkontext für Cloud Run hinzu, der angibt, warum das System auf den Kundenschlüssel zugegriffen hat. In der folgenden Tabelle sind die Kontexte aufgeführt, die in den Audit-Logs angezeigt werden können:

Grund für Schlüsselzugriff Beschreibung
Decrypting CMEK-encrypted layer during container clone start. Wird bei jedem Start einer neuen Instanz protokolliert.
Encrypting a newly created data-encryption-key w/ the customer-managed-encryption-key. Wird während der Bereitstellung eines CMEK-fähigen Dienstes protokolliert, wobei der CMEK-Schlüssel von einem KMS-Schlüssel verpackt wird.
Decrypting an existing encrypted data-encryption-key, under the same customer-managed-encryption-key, to be used to encrypt container contents. Wird protokolliert, wenn eine neue Instanz gestartet wird, die eine Entschlüsselung des Images erfordert.
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. Wird bei einer Validierungsprüfung des Schlüssels protokolliert, die regelmäßig durchgeführt wird.
Performing a decrypt operation on dummy data to check the customer-managed-encryption-key status and access. Wird bei einer Validierungsprüfung des Schlüssels protokolliert, die regelmäßig durchgeführt wird.

Weitere Informationen zum Format und Inhalt von Audit-Logs finden Sie auf der Seite KMS-Audit-Logging.

Fehlermeldungen

Beachten Sie, dass von einem externen Schlüsselverwaltungssystem bereitgestellte Fehlermeldungen direkt an die Cloud Run-Logs für Ihren Dienst weitergeleitet werden.

Die folgende Tabelle enthält die CMEK-Fehlermeldungen, die Sie möglicherweise sehen, zusammen mit Beschreibungen und möglichen Abhilfemaßnahmen.

Meldung Beschreibung
User's service account does not have CMEK decrypter permission. Service account: %s Lösung: Gewähren Sie dem Dienst Zugriff auf den Schlüssel
User's KMS operation quota has been exceeded. CMEK key: %s Der CMEK-fähige Dienst hat KMS-Kontingente überschritten. Lösung: Fordern Sie ein höheres KMS-Kontingent an
User's CMEK key has been disabled. CMEK key: %s Der CMEK-Schlüssel wurde widerrufen. Lösung: Ändern Sie den CMEK-Schlüssel des Dienstes und stellen Sie den Dienst noch einmal bereit.
User's CMEK key has been destroyed. CMEK key: %s Der CMEK-Schlüssel wurde gelöscht. Lösung: Ändern Sie den CMEK-Schlüssel des Dienstes und stellen Sie den Dienst noch einmal bereit.
User's CMEK key has been scheduled for deletion. CMEK Key: %s Der CMEK-Schlüssel wurde zum Löschen geplant. Lösung: Ändern Sie den CMEK-Schlüssel des Dienstes und stellen Sie den Dienst noch einmal bereit.

Nächste Schritte