Fehler bei CMEK und Standardeinstellungen beheben

In diesem Dokument wird beschrieben, wie Sie häufige CMEK-Konfigurationsfehler finden und beheben können. Außerdem wird beschrieben, wie Sie Fehler identifizieren, die beim Festlegen des Standardressourcenstandorts auftreten können.

Fehlerbehebung beim Festlegen des Standardressourcenstandorts

Sie versuchen, den Standardspeicherort für eine Organisation oder einen Ordner zu aktualisieren, aber der Befehl schlägt mit einem Fehler wie dem folgenden 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 den Ordner so fest, dass er mit dem Speicherort des Cloud Key Management Service-Schlüssels für die Organisation oder den Ordner übereinstimmt.

Probleme mit VPC Service Controls und der domaineingeschränkten Freigabe beheben

Sie haben CMEK als Standardressourceneinstellung für Ihre Organisation oder für einen Ordner konfiguriert oder einen Log-Bucket mit aktiviertem CMEK erstellt. Anschließend konfigurieren Sie VPC Service Controls. Nachdem Sie VPC Service Controls konfiguriert haben, beschränken Sie den Zugriff auf Cloud Key Management Service in VPC Service Controls oder aktivieren Sie die auf die Domain beschränkte Freigabe.

Es gibt mindestens eine der folgenden Situationen:

  • Sie haben von Cloud Logging eine Benachrichtigung 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.

  • Wenn Sie Daten aus Log-Buckets mit aktiviertem CMEK lesen, treten Fehler auf. Die angezeigten Fehler ähneln der 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`
    
  • Wenn Sie Log-Buckets mit aktiviertem CMEK erstellen oder aktualisieren, treten Fehler auf. Die angezeigten Fehler ähneln der folgenden:

    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 ermitteln Sie, ob diese Probleme auf die Konfiguration von VPC Service Controls zurückzuführen sind:

  1. Ermitteln Sie die Cloud Logging-Einstellungen für die Ressource, die die CMEK-Konfiguration enthält. Eine Ressource kann ein Projekt, ein Ordner oder eine Organisation sein. Wenn Sie Log-Buckets mit aktiviertem CMEK erstellt haben, wählen Sie die PROJECT-Ressource aus.

    PROJEKT

    gcloud logging settings describe --project=PROJECT_ID
    

    Ersetzen Sie PROJECT_ID vor dem Ausführen des Befehls durch die Projekt-ID, die den Log-Bucket enthält.

    ORDNER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Ersetzen Sie FOLDER_ID vor dem Ausführen des Befehls durch die ID des Ordners.

    ORGANISATION

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Ersetzen Sie ORGANIZATION_ID vor dem Ausführen des Befehls durch die ID der Organisation.

    Der vorherige Befehl gibt Informationen wie diese 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 der Schlüssel gespeichert ist.

  2. Ermitteln Sie, ob Sie Dienstkonten migrieren müssen:

    • Wenn der Wert des Felds kmsServiceAccountId das Präfix service- hat, müssen Sie Ihr Dienstkonto nicht migrieren. Informationen zu CMEK-Konfigurationsfehlern finden Sie in diesem Dokument im Abschnitt Fehlerbehebung bei CMEK.

    • Wenn der Wert von kmsServiceAccountId das Präfix cmek- hat, fahren Sie mit dem nächsten Schritt fort.

  3. Bestätigen Sie, dass Sie Dienstkonten migrieren müssen. Deaktivieren Sie dazu die domaineingeschränkte Freigabe oder entfernen Sie Cloud Key Management Service aus der Liste der eingeschränkten Dienste von VPC Service Controls.

    Wenn die Fehler behoben sind, müssen Sie die betroffenen Ressourcen zu einem neuen Dienstkonto migrieren. Informationen zu diesen Schritten finden Sie im nächsten Abschnitt.

CMEK-Dienstkonten migrieren

Im folgenden Prozess wird beschrieben, wie Sie das Dienstkonto ändern, über das Cloud Logging auf konfigurierte Cloud Key Management Service-Schlüssel zugreift. Durch die Änderung des Dienstkontos wird ein bekanntes Problem mit VPC Service Controls und der domaineingeschränkten Freigabe behoben.

  1. Ermitteln Sie die loggingServiceAccountId für Ihre Ressource. Eine Ressource kann ein Projekt, ein Ordner oder eine Organisation sein. Wenn Sie Log-Buckets mit aktiviertem CMEK erstellt haben, wählen Sie die PROJECT-Ressource aus.

    PROJEKT

    gcloud logging settings describe --project=PROJECT_ID
    

    Ersetzen Sie PROJECT_ID vor dem Ausführen des Befehls durch die Projekt-ID, die den Log-Bucket enthält.

    ORDNER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Ersetzen Sie FOLDER_ID vor dem Ausführen des Befehls durch die ID des Ordners.

    ORGANISATION

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Ersetzen Sie ORGANIZATION_ID vor dem Ausführen des Befehls durch die ID der Organisation.

    Der vorherige Befehl gibt Informationen wie diese 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 der Schlüssel gespeichert ist.

  2. Wenn Sie eine Standardressourceneinstellung für Ihre Organisation oder für Ordner konfiguriert haben, gehen Sie so vor:

    1. Gewähren Sie dem Dienstkonto, das im Feld loggingServiceAccountId angegeben ist, in KMS_PROJECT_ID die Rolle Cloud Key Management Service CryptoKey Encrypter/Decrypter.

    2. Führen Sie den folgenden curl-Befehl aus, der das von der Ressource verwendete Dienstkonto des Cloud Key Management Service ändert.

      PROJEKT

      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 die zuvor ermittelte loggingServiceAccountId.

      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 die zuvor ermittelte loggingServiceAccountId.

      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"
      }
      
  3. Führen Sie für jedes Google Cloud-Projekt oder jeden Ordner, der vorhandene Log-Buckets mit CMEK enthält, folgende Schritte aus:

    1. Führen Sie im Projekt oder Ordner für jeden mit CMEK aktivierten Log-Bucket folgende Schritte aus:

      1. Ermitteln Sie das Google Cloud-Projekt, in dem der Cloud Key Management Service-Schlüssel gespeichert ist:

        PROJEKT

        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 den Log-Bucket enthält.
        • Ersetzen Sie LOCATION durch den Speicherort des Log-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'
        
      2. Rufen Sie das Google Cloud-Projekt auf, das den Cloud Key Management Service-Schlüssel KMS_PROJECT_ID besitzt, und gewähren Sie dem im Feld loggingServiceAccountId angegebenen Dienstkonto die Rolle Cloud Key Management Service CryptoKey Encrypter/Decrypter.

    2. Führen Sie für das Projekt den folgenden curl-Befehl aus, wodurch das Dienstkonto des Cloud Key Management Service geändert wird:

      PROJEKT

      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 Log-Bucket enthält.
      • Ersetzen Sie SERVICE_ACCT_NAME durch die zuvor ermittelte loggingServiceAccountId.

      ORDNER

      Es sind keine Maßnahmen erforderlich, da Sie das vom Ordner verwendete Dienstkonto für den Cloud Key Management Service in einem vorherigen Schritt geändert haben.

      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"
      }
      
  4. Führen Sie für jeden Log-Bucket mit aktiviertem CMEK die folgenden Schritte aus:

    1. Cloud KMS-Schlüssel rotieren.

    2. Bestätigen Sie die Migration. Die übergeordnete Ressource für den Log-Bucket bestimmt, welcher Google Cloud CLI-Befehl ausgeführt wird. Das übergeordnete Element kann ein Projekt, ein Ordner oder eine Organisation sein.

      PROJEKT

      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 den Log-Bucket enthält.
      • Ersetzen Sie LOCATION durch den Speicherort des Log-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.

      Für ein Projekt sieht das Ergebnis des vorherigen Befehls 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: 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 ermittelten loggingServiceAccountId übereinstimmt.

  5. Warten Sie mindestens 30 Minuten, bevor Sie Berechtigungen für das vorherige Dienstkonto widerrufen. Wenn nach dem Widerrufen von Berechtigungen für das vorherige Dienstkonto Probleme auftreten, stellen Sie die Berechtigungen wieder her und wenden Sie sich an den Cloud-Support.

Fehlerbehebung bei CMEK

Beim Konfigurieren von CMEK wird das Google Cloud-Projekt, das den Cloud KMS-Schlüssel enthält, über zugehörige Probleme benachrichtigt. Updates schlagen beispielsweise fehl, wenn KMS_KEY_NAME ungültig ist, wenn das zugehörige Dienstkonto nicht die erforderliche Rolle Cloud Key Management Service CryptoKey Encrypter/Decrypter hat oder wenn der Zugriff auf den Schlüssel deaktiviert ist.

Nachdem Sie CMEK konfiguriert haben, geschieht mindestens eines der folgenden Ereignisse:

  • Sie haben von Cloud Logging eine Benachrichtigung 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 Daten aus Log-Buckets mit aktiviertem CMEK lesen oder wenn Sie versuchen, Log-Buckets zu erstellen oder zu aktualisieren.

Die Benachrichtigung enthält Informationen zum Fehler sowie Möglichkeiten, das Problem zu beheben:

Fehler Empfehlung
Berechtigung für kryptografischen Schlüssel verweigert

Das mit Ihrem Google Cloud-Projekt verknüpfte Logging-Dienstkonto hat nicht die erforderlichen IAM-Berechtigungen für den angegebenen Cloud KMS-Schlüssel. Folgen Sie der Anleitung in der Fehlermeldung oder sehen Sie sich die folgenden Dokumente an:

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 sehen Sie sich die folgenden Dokumente an:

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, einem Log-Ordner oder einer Organisation verwendet wird:

PROJEKT

gcloud logging settings describe --project=PROJECT_ID

Ersetzen Sie PROJECT_ID vor dem Ausführen des Befehls durch die Projekt-ID, die den Log-Bucket enthält.

ORDNER

gcloud logging settings describe --folder=FOLDER_ID

Ersetzen Sie FOLDER_ID vor dem Ausführen des Befehls durch die ID des Ordners.

ORGANISATION

gcloud logging settings describe --organization=ORGANIZATION_ID

Ersetzen Sie ORGANIZATION_ID vor dem Ausführen des Befehls durch die ID der Organisation.

Der vorherige Befehl gibt Informationen wie diese 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 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.