In diesem Dokument wird beschrieben, wie Sie häufige CMEK-Konfigurationsfehler finden und beheben. Außerdem erfahren Sie, wie Sie Fehler erkennen, die beim Festlegen des Standardspeicherorts für Ressourcen auftreten.
Fehlerbehebung beim Festlegen des Standardspeicherorts für Ressourcen
Sie versuchen, den Standardspeicherort für eine Organisation oder einen Ordner zu aktualisieren, aber der Befehl schlägt mit einer ähnlichen Fehlermeldung fehl:
ERROR: (gcloud.logging.settings.update) INVALID_ARGUMENT: The KMS key location must match the storage location. Received KMS key location: us-central1, storage location: us-west1
- '@type': type.googleapis.com/google.rpc.DebugInfo
detail: '[ORIGINAL ERROR] generic::invalid_argument: The KMS key location must match
the storage location. Received KMS key location: us-central1, storage location:
us-west1 [google.rpc.error_details_ext] { message: "The KMS key location must
match the storage location. Received KMS key location: us-central1, storage location:
us-west1" }'
Um diesen Fehler zu beheben, legen Sie den Standardspeicherort für die Organisation oder Ordner entsprechend dem Cloud Key Management Service-Schlüssel für die Organisation oder den Ordner.
Fehlerbehebung bei VPC Service Controls und der domaineingeschränkten Freigabe
Sie haben CMEK als Standardressourceneinstellung für Ihre Organisation oder einen Ordner konfiguriert oder einen Protokoll-Bucket mit aktiviertem CMEK erstellt. Anschließend konfigurieren Sie VPC Service Controls. Nachdem Sie VPC Service Controls konfiguriert haben, den Zugriff auf Cloud Key Management Service in VPC Service Controls oder Domaineingeschränkte Freigabe aktivieren
Mindestens eines der folgenden Ereignisse tritt ein:
Sie haben von Cloud Logging eine Benachrichtigung zu Problemen beim CMEK-Zugriff erhalten.
Sie stellen fest, dass für
_Default
und_Required
kein CMEK aktiviert ist. Log-Buckets, wenn Sie neue Google Cloud-Projekte in Ihrer Organisation erstellen oder in einem Ordner.Beim Lesen aus Log-Buckets mit aktiviertem CMEK werden Fehler ausgegeben. Die Die angezeigten Fehler ähneln dem folgenden:
ERROR: (gcloud.logging.read) FAILED_PRECONDITION: service account `cmek-PROJECT_IDgcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY`
Beim Erstellen oder Aktualisieren von Protokoll-Buckets mit aktiviertem CMEK werden Fehler ausgegeben. Die Fehlermeldungen ähneln dem folgenden Fehler:
ERROR: (gcloud.logging.buckets.create) service account `cmek-PROJECT_ID@gcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY` - '@type': type.googleapis.com/google.rpc.DebugInfo detail: '[ORIGINAL ERROR] generic::permission_denied: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: <var>ERRORID</var>;'
So können Sie feststellen, ob diese Probleme auf die VPC Service Controls-Konfiguration zurückzuführen sind:
Identifizieren Sie die Cloud Logging-Einstellungen für die Ressource, die enthält die CMEK-Konfiguration. Eine Ressource kann ein Projekt, Ordner oder Organisation. Wenn Sie Log-Buckets mit aktiviertem CMEK erstellt haben, wählen Sie die PROJECT-Ressource aus.
PROJECT
gcloud logging settings describe --project=PROJECT_ID
Ersetzen Sie vor der Ausführung des Befehls PROJECT_ID durch die Projekt-ID, die den Protokoll-Bucket enthält.
ORDNER
gcloud logging settings describe --folder=FOLDER_ID
Ersetzen Sie vor dem Ausführen des Befehls FOLDER_ID durch die ID des Ordners.
Organisation
gcloud logging settings describe --organization=ORGANIZATION_ID
Bevor Sie den Befehl ausführen, ersetzen Sie ORGANIZATION_ID durch die ID von für das Unternehmen.
Der vorherige Befehl gibt Informationen wie die folgenden zurück:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Für Organisationen und Ordner wird außerdem das folgende Feld zurückgegeben:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
Der Wert des Felds
kmsKeyName
enthält das Google Cloud-Projekt, in dem den Schlüssel.Prüfen Sie, ob Sie Dienstkonten migrieren müssen:
Wenn der Wert des Felds
kmsServiceAccountId
das Präfixservice-
hat, müssen Sie Ihr Dienstkonto nicht migrieren. Informationen zu CMEK-Konfigurationsfehlern finden Sie in der Abschnitt Fehlerbehebung für CMEK in diesem Dokument.Wenn der Wert von
kmsServiceAccountId
das Präfixcmek-
hat, fahren Sie mit dem nächsten Schritt fort.
Prüfen Sie, ob Sie Dienstkonten migrieren müssen, indem Sie die domaineinschränkte Freigabe deaktivieren oder den Cloud Key Management Service aus der Liste der eingeschränkten Dienste von VPC Service Controls entfernen.
Wenn die Fehler behoben sind, müssen Sie Migrieren Sie die betroffenen Ressourcen zu einem neuen Dienstkonto. Informationen zu diesen Schritten finden Sie im nächsten Abschnitt.
CMEK-Dienstkonten migrieren
Im Folgenden wird beschrieben, wie Sie das Dienstkonto ändern, das Cloud Logging für den Zugriff auf konfigurierte Cloud Key Management Service-Schlüssel verwendet. Durch die Änderung des Dienstkontos wird ein bekanntes Problem mit VPC Service Controls und der bereichsbeschränkten Freigabe behoben.
Identifizieren Sie den
loggingServiceAccountId
für Ihre Ressource. Eine Ressource kann ein Projekt, einen Ordner oder eine Organisation. Wenn Sie Log-Buckets mit aktiviertem CMEK erstellt haben, wählen Sie die PROJECT-Ressource aus.PROJECT
gcloud logging settings describe --project=PROJECT_ID
Ersetzen Sie vor der Ausführung des Befehls PROJECT_ID durch die Projekt-ID, die den Protokoll-Bucket enthält.
ORDNER
gcloud logging settings describe --folder=FOLDER_ID
Ersetzen Sie vor dem Ausführen des Befehls FOLDER_ID durch die ID des Ordners.
Organisation
gcloud logging settings describe --organization=ORGANIZATION_ID
Bevor Sie den Befehl ausführen, ersetzen Sie ORGANIZATION_ID durch die ID von für das Unternehmen.
Der vorherige Befehl gibt Informationen wie die folgenden zurück:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Für Organisationen und Ordner wird außerdem das folgende Feld zurückgegeben:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
Der Wert des Felds
kmsKeyName
enthält das Google Cloud-Projekt, in dem den Schlüssel.Wenn Sie eine Standard-Ressourceneinstellung für Ihre Organisation oder für und gehen Sie dann so vor:
Gewähren Sie im KMS_PROJECT_ID Cloud Key Management Service CryptoKey-Verschlüsseler/Entschlüsseler Rolle für das von
loggingServiceAccountId
angegebene Dienstkonto ein.Führen Sie den folgenden curl-Befehl aus, um das von der Ressource verwendete Cloud Key Management Service-Dienstkonto zu ändern.
PROJECT
Nicht zutreffend.
ORDNER
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/folders/FOLDER_ID/settings?updateMask=kmsServiceAccountId
Führen Sie vor dem Ausführen des Befehls die folgenden Schritte aus:
- Ersetzen Sie FOLDER_ID durch die ID des Ordners.
- Ersetzen Sie SERVICE_ACCT_NAME durch
loggingServiceAccountId
. identifiziert haben.
Organisation
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/settings?updateMask=kmsServiceAccountId
Führen Sie vor dem Ausführen des Befehls die folgenden Schritte aus:
- Ersetzen Sie ORGANIZATION_ID durch die ID der Organisation.
- Ersetzen Sie SERVICE_ACCT_NAME durch
loggingServiceAccountId
. identifiziert haben.
Das Ergebnis des vorherigen Befehls sieht in etwa so aus:
{ "name": ".../settings", "kmsKeyName": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "storageLocation": "...", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
Führen Sie für jedes Google Cloud-Projekt oder jeden Ordner, der vorhandene Log-Buckets mit CMEK enthält, die folgenden Schritte aus:
Führen Sie im Projekt oder Ordner für jeden mit CMEK aktivierten Log-Bucket die folgenden Schritte aus: Gehen Sie so vor:
Ermitteln Sie das Google Cloud-Projekt, in dem der Cloud Key Management Service-Schlüssel gespeichert ist:
PROJECT
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Führen Sie vor dem Ausführen des Befehls die folgenden Schritte aus:
- Ersetzen Sie PROJECT_ID durch die Projekt-ID, die Log-Bucket
- Ersetzen Sie LOCATION durch den Speicherort des Protokoll-Buckets.
ORDNER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Führen Sie vor dem Ausführen des Befehls die folgenden Schritte aus:
- Ersetzen Sie FOLDER_ID durch die ID des Ordners.
- Ersetzen Sie LOCATION durch den Speicherort des Log-Buckets.
Das Ergebnis des vorherigen Befehls sieht in etwa so aus:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
Rufen Sie das Google Cloud-Projekt auf, zu dem der Cloud Key Management Service-Schlüssel KMS_PROJECT_ID gehört, und weisen Sie dem Dienstkonto, das im Feld
loggingServiceAccountId
angegeben ist, die Rolle Cloud Key Management Service CryptoKey Encrypter/Decrypter zu.
Führen Sie für das Projekt den folgenden curl-Befehl aus, um das Dienstkonto für den Cloud Key Management Service zu ändern:
PROJECT
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/projects/PROJECT_ID/settings?updateMask=kmsServiceAccountId
Führen Sie vor dem Ausführen des Befehls die folgenden Schritte aus:
- Ersetzen Sie PROJECT_ID durch die Projekt-ID, die den Protokoll-Bucket enthält.
- Ersetzen Sie SERVICE_ACCT_NAME durch
loggingServiceAccountId
. identifiziert haben.
ORDNER
Keine Aktion erforderlich, da Sie das Cloud Key Management Service-Dienstkonto geändert haben die der Ordner in einem vorherigen Schritt verwendet hat.
Das Ergebnis des vorherigen Befehls sieht in etwa so aus:
{ "name": ".../settings", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
Führen Sie für jeden Log-Bucket mit aktiviertem CMEK die folgenden Schritte aus:
Bestätigen Sie die Migration. Die übergeordnete Ressource für den Log-Bucket bestimmt, welchen Google Cloud CLI-Befehl ausgeführt werden soll. Das übergeordnete Element kann ein Projekt, Ordner oder Organisation.
PROJECT
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Führen Sie vor dem Ausführen des Befehls die folgenden Schritte aus:
- Ersetzen Sie PROJECT_ID durch die Projekt-ID, die Log-Bucket
- Ersetzen Sie LOCATION durch den Speicherort des Protokoll-Buckets.
ORDNER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Führen Sie vor dem Ausführen des Befehls die folgenden Schritte aus:
- Ersetzen Sie FOLDER_ID durch die ID des Ordners.
- Ersetzen Sie LOCATION durch den Speicherort des Log-Buckets.
Bei einem Projekt ähnelt der vorherige Befehl dem Folgendes:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
Achten Sie darauf, dass
serviceAccountId
mit dem zuvor identifiziertenloggingServiceAccountId
übereinstimmt.
Warten Sie mindestens 30 Minuten, bevor Sie die Berechtigungen für das vorherige Dienstkonto widerrufen. Wenn nach dem Entziehen von Berechtigungen für das vorherige Dienstkonto Probleme auftreten, stellen Sie die Berechtigungen wieder her und wenden Sie sich an den Cloud-Support.
CMEK-Fehler beheben
Bei der Konfiguration von CMEK wird das Google Cloud-Projekt, das den Cloud KMS-Schlüssel enthält, über relevante Probleme benachrichtigt. Beispiel: Updates schlagen fehl wenn KMS_KEY_NAME ungültig ist, wenn das verknüpfte Dienstkonto nicht die erforderlichen die Rolle Cloud Key Management Service CryptoKey Encrypter/Decrypter haben, oder wenn der Zugriff auf den Schlüssel deaktiviert ist.
Nachdem Sie CMEK konfiguriert haben, geschieht mindestens eines der folgenden Dinge:
Sie haben eine Benachrichtigung von Cloud Logging zu Problemen mit dem CMEK-Zugriff erhalten.
Sie stellen fest, dass CMEK für die Log-Buckets
_Default
und_Required
nicht aktiviert ist, wenn Sie neue Google Cloud-Projekte in Ihrer Organisation oder in einem Ordner erstellen.Sie erhalten Fehler, wenn Sie aus Log-Buckets mit aktiviertem CMEK lesen oder wenn Log-Buckets erstellen oder aktualisieren.
Die Benachrichtigung enthält Informationen zum Fehler und Maßnahmen, mit denen Sie das Problem beheben können:
Fehler | Empfehlung |
---|---|
Berechtigung für kryptografischen Schlüssel verweigert | Dem mit Ihrem Google Cloud-Projekt verknüpften Logging-Dienstkonto fehlen die erforderlichen IAM-Berechtigungen für den angegebenen Cloud KMS-Schlüssel. Folgen Sie oder lesen Sie die folgenden Dokumente:
|
Kryptografischer Schlüssel ist deaktiviert | Der angegebene Cloud KMS-Schlüssel war deaktiviert. Folgen Sie der Anleitung in der Fehlermeldung, um den Schlüssel wieder zu aktivieren. |
Kryptografischer Schlüssel wurde gelöscht | Der angegebene Cloud KMS-Schlüssel war gelöscht. Folgen Sie der Anleitung oder lesen Sie die folgenden Dokumente: |
Projekt ermitteln, das den Cloud KMS-Schlüssel enthält
So ermitteln Sie die ID des Google Cloud-Projekts, das den Verschlüsselungsschlüssel enthält, der von einem Log-Bucket, Ordner oder einer Organisation verwendet wird:
PROJECT
gcloud logging settings describe --project=PROJECT_ID
Ersetzen Sie vor der Ausführung des Befehls PROJECT_ID durch die Projekt-ID, die den Protokoll-Bucket enthält.
ORDNER
gcloud logging settings describe --folder=FOLDER_ID
Ersetzen Sie vor dem Ausführen des Befehls FOLDER_ID durch die ID des Ordners.
Organisation
gcloud logging settings describe --organization=ORGANIZATION_ID
Bevor Sie den Befehl ausführen, ersetzen Sie ORGANIZATION_ID durch die ID von für das Unternehmen.
Der vorherige Befehl gibt Informationen wie die folgenden zurück:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Für Organisationen und Ordner wird außerdem das folgende Feld zurückgegeben:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
Der Wert des kmsKeyName
-Felds enthält das Google Cloud-Projekt, in dem der Schlüssel gespeichert ist.
Schlüssel auf Nutzbarkeit prüfen
Führen Sie folgenden Befehl zur Auflistung aller Schlüssel aus, um den Schlüssel auf Nutzbarkeit zu prüfen:
gcloud kms keys list \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING
Dieser Befehl gibt Informationen zu den einzelnen Schlüsseln in einem Tabellenformat zurück. Die erste Zeile der Ausgabe ist eine Liste an Spaltennamen:
NAME PURPOSE ...
Prüfen Sie, ob in der Befehlsausgabe Cloud KMS CryptoKey als ENABLED
aufgeführt und als Schlüsselzweck die symmetrische Verschlüsselung angegeben ist: Die Spalte PURPOSE
muss ENCRYPT_DECRYPT
enthalten und die Spalte PRIMARY_STATE
muss ENABLED
enthalten.
Bei Bedarf können Sie einen neuen Schlüssel erstellen.
Berechtigungskonfiguration prüfen
Dienstkonten, die mit den CMEK-Einstellungen der Organisation verknüpft sind, müssen die Rolle Cloud KMS CryptoKey-Ver-/Entschlüsseler für den konfigurierten Schlüssel haben.
Führen Sie den folgenden Befehl aus, um die IAM-Richtlinie des Schlüssels abzurufen:
gcloud kms keys get-iam-policy KMS_KEY_NAME
Fügen Sie dem Schlüssel bei Bedarf das Dienstkonto hinzu, das die Rolle "Cloud KMS CryptoKey-Ver-/Entschlüsseler“ enthält.