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:
Konfigurieren Sie Artifact Registry für die Verwendung von CMEK.
Verwenden Sie die Docker-Kurzanleitung für Artifact Registry als Referenz, um ein Docker-Repository zu erstellen und ein Image dorthin zu übertragen.
Verwenden Sie einen vorhandenen symmetrischen Cloud KMS-Schlüssel oder erstellen Sie einen neuen symmetrischen Schlüssel.
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
Zur Seite Kryptografische Schlüssel
Klicken Sie auf den Schlüsselbund für Ihren Schlüssel, um die zugehörige Seite mit der Schlüsselliste zu öffnen.
Wählen Sie den Schlüssel aus und klicken Sie im rechten Tab „Berechtigungen“ auf Hauptkonto hinzufügen.
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.
Wählen Sie im Feld Rolle auswählen Cloud KMS CryptoKey Verschlüsseler/Entschlüsseler aus.
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
Rufen Sie in der Google Cloud Console Cloud Run auf.
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.
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.
Klicken Sie auf den Tab Sicherheit.
- Unter Verschlüsselung:
- Wählen Sie Vom Kunden verwalteter Verschlüsselungsschlüssel (CMEK) aus.
- 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
.- 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.
- 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.
So kopieren Sie den Ressourcennamen aus einem anderen Projekt, auf das Sie Zugriff haben, und fügen es ein:
- Unter Verschlüsselung:
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 FormLOCATION-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
oderprevent-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
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 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
oderprevent-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
- Beginnt mit
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
Rufen Sie in der Google Cloud Console Cloud Run auf.
Klicken Sie auf den gewünschten Dienst, um die Seite Dienstdetails zu öffnen.
Klicken Sie auf den Tab Überarbeitungen.
Auf der rechten Seite finden Sie die Sicherheitseinstellung auf dem Tab Sicherheit.
gcloud
Verwenden Sie den folgenden Befehl:
gcloud run services describe SERVICE
Suchen Sie in der zurückgegebenen Konfiguration nach der Sicherheitseinstellung.
CMEK-Widerruf testen
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.
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.
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. |