Daten mit vom Kunden verwalteten Verschlüsselungsschlüsseln (CMEK) verschlüsseln

Auf dieser Seite wird beschrieben, wie Sie in AML AI-Instanzen gespeicherte Daten mit vom Kunden verwalteten Verschlüsselungsschlüsseln (CMEKs) verschlüsseln.

Überblick

Alle Kundendaten in einer AML AI-Instanz werden beim Speichern im Ruhezustand mit einem CMEK-Schlüssel verschlüsselt. Sie verwalten den Schlüssel im Cloud Key Management Service und steuern den Zugriff auf den Schlüssel mithilfe von Identity and Access Management. Wenn Sie den CMEK-Schlüssel vorübergehend deaktivieren oder dauerhaft löschen, kann nicht auf die mit diesem Schlüssel verschlüsselten Daten zugegriffen werden.

Mit CMEK haben Sie mehr Kontrolle über mehr Aspekte des Lebenszyklus und der Verwaltung Ihrer Schlüssel, verursachen aber auch zusätzliche Kosten für den Cloud KMS-Dienst.

Cloud KMS kann im selben Google Cloud-Projekt als AML AI oder in einem separaten Projekt ausgeführt werden, in dem Sie Schlüssel für mehrere Projekte zentral verwalten.

Sie weisen einen CMEK-Schlüssel zu, wenn Sie eine Instanz erstellen. Alle Instanzen müssen mit CMEK konfiguriert werden und können nicht für die Verwendung der Google-Standardverschlüsselung geändert werden.

Weitere Informationen zu CMEK und deren Aktivierung finden Sie in der Cloud KMS-Dokumentation.

Kundendaten

Alle von AML AI verarbeiteten Kundendaten werden im inaktiven Zustand mit dem CMEK-Schlüssel verschlüsselt, der in der entsprechenden übergeordneten Instanzressource angegeben ist. Dazu gehören alle Kundendaten im Zusammenhang mit AML AI-Ressourcen wie Datasets, Engine-Konfigurationen, Modelle usw. Alle temporären und nichtflüchtigen Speicher von Kundendaten, einschließlich Kopien von Ein- und Ausgaben, generierten ML-Features, Logs, Hyperparametern des Modells, Modellgewichtungen und Vorhersageergebnisse, werden mit dem CMEK-Schlüssel der entsprechenden Instanz verschlüsselt.

AML AI verwaltet nicht die Verschlüsselung der Ein- oder Ausgabedaten in Ihrem Google Cloud-Projekt. Wenn Sie möchten, dass diese Daten verschlüsselt werden, müssen Sie in Ihrem Google Cloud-Projekt einen separaten CMEK-Schlüssel einrichten. Der angegebene KMS-Schlüssel in einer Instanz wird für AML AI-Ressourcen und deren Daten verwendet.

Schlüssel erstellen und Berechtigungen gewähren

In der folgenden Anleitung wird erläutert, wie Sie einen Schlüssel für eine Instanz erstellen und Berechtigungen zum Verschlüsseln und Entschlüsseln von Instanzdaten mit dem Schlüssel gewähren. Sie können einen Schlüssel verwenden, der direkt in Cloud KMS erstellt wurde, oder einen extern verwalteten Schlüssel, den Sie mit Cloud External Key Manager bereitstellen.

  1. Im Google Cloud-Projekt, in dem Sie Ihre Schlüssel verwalten möchten:

    1. Aktivieren Sie die Cloud KMS API.

    2. Erstellen Sie mit der Methode projects.locations.keyRings.create einen Schlüsselbund. Der Speicherort des Cloud KMS-Schlüsselbunds muss mit dem Standort der von Ihnen verschlüsselten Instanz übereinstimmen.

      REST

      Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

      • KMS_PROJECT_ID: die Google Cloud-Projekt-ID für das Projekt, das den Schlüsselbund enthält
      • LOCATION: der Speicherort des Schlüsselbunds. Verwenden Sie eine der unterstützten Regionen:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: eine benutzerdefinierte Kennung für den Schlüsselbund

      Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

      curl

      Führen Sie folgenden Befehl aus:

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d "" \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID"

      PowerShell

      Führen Sie folgenden Befehl aus:

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID" | Select-Object -Expand Content

      Sie sollten in etwa folgende JSON-Antwort erhalten:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID",
        "createTime": CREATE_TIME
      }
      

      gcloud

      Bevor Sie die folgenden Befehlsdaten verwenden, ersetzen Sie die folgenden Werte:

      • LOCATION: der Speicherort des Schlüsselbunds. Verwenden Sie eine der unterstützten Regionen:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: eine benutzerdefinierte Kennung für den Schlüsselbund

      Führen Sie den folgenden Befehl aus:

      Linux, macOS oder Cloud Shell

      gcloud kms keyrings create KEY_RING_ID \
        --location LOCATION
      

      Windows (PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --location LOCATION
      

      Windows (cmd.exe)

      gcloud kms keyrings create KEY_RING_ID ^
        --location LOCATION
      
      Sie sollten eine leere Antwort erhalten:
      $

    3. Erstellen Sie einen Schlüssel mit der Methode projects.locations.keyRings.cryptoKeys.

      REST

      Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

      • KMS_PROJECT_ID: die Google Cloud-Projekt-ID für das Projekt, das den Schlüsselbund enthält
      • LOCATION: der Speicherort des Schlüsselbunds. Verwenden Sie eine der unterstützten Regionen:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: die benutzerdefinierte Kennung für den Schlüsselbund
      • KEY_ID: eine benutzerdefinierte Kennung für den Schlüssel

      JSON-Text anfordern:

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

      curl

      Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json. Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

      cat > request.json << 'EOF'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      EOF

      Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID"

      PowerShell

      Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json. Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

      @'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8

      Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID" | Select-Object -Expand Content

      Sie sollten in etwa folgende JSON-Antwort erhalten:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID",
        "primary": {
          "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1",
          "state": "ENABLED",
          "createTime": CREATE_TIME,
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": GENERATE_TIME
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": CREATE_TIME,
        "versionTemplate": {
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
        },
        "destroyScheduledDuration": "86400s"
      }
      

      gcloud

      Bevor Sie die folgenden Befehlsdaten verwenden, ersetzen Sie die folgenden Werte:

      • LOCATION: der Speicherort des Schlüsselbunds. Verwenden Sie eine der unterstützten Regionen:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: die benutzerdefinierte Kennung für den Schlüsselbund
      • KEY_ID: eine benutzerdefinierte Kennung für den Schlüssel

      Führen Sie den folgenden Befehl aus:

      Linux, macOS oder Cloud Shell

      gcloud kms keys create KEY_ID \
        --keyring KEY_RING_ID \
        --location LOCATION \
        --purpose "encryption"
      

      Windows (PowerShell)

      gcloud kms keys create KEY_ID `
        --keyring KEY_RING_ID `
        --location LOCATION `
        --purpose "encryption"
      

      Windows (cmd.exe)

      gcloud kms keys create KEY_ID ^
        --keyring KEY_RING_ID ^
        --location LOCATION ^
        --purpose "encryption"
      
      Sie sollten eine leere Antwort erhalten:
      $

  2. Wenn Sie im AML AI-Projekt keine AML AI-Instanz erstellt haben, ist das AML AI-Dienstkonto noch nicht vorhanden. Erstellen Sie das Dienstkonto.

    Bevor Sie die folgenden Befehlsdaten verwenden, ersetzen Sie die folgenden Werte:

    • PROJECT_ID: die Google Cloud-Projekt-ID für das Projekt, in dem AML AI ausgeführt wird

    Führen Sie den folgenden Befehl aus:

    Linux, macOS oder Cloud Shell

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID
    

    Windows (PowerShell)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID
    

    Windows (cmd.exe)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID
    

    Sie sollten eine Antwort ähnlich der folgenden erhalten:

    Service identity created: service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com

  3. Gewähren Sie dem AML AI-Dienstkonto die IAM-Rolle CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter). Erteilen Sie diese Berechtigung für den von Ihnen erstellten Schlüssel.

    Bevor Sie die folgenden Befehlsdaten verwenden, ersetzen Sie die folgenden Werte:

    • PROJECT_ID: die Google Cloud-Projekt-ID für das Projekt, in dem AML AI ausgeführt wird
    • KEY_ID: die benutzerdefinierte Kennung für den Schlüssel
    • LOCATION: der Speicherort des Schlüsselbunds. Verwenden Sie eine der unterstützten Regionen:
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
    • KEY_RING_ID: eine benutzerdefinierte Kennung für den Schlüsselbund
    • PROJECT_NUMBER: die Google Cloud-Projektnummer für das Projekt, in dem AML AI ausgeführt wird

    Führen Sie den folgenden Befehl aus:

    Linux, macOS oder Cloud Shell

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID \
      --location LOCATION --keyring=KEY_RING_ID \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Windows (PowerShell)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID `
      --location LOCATION --keyring=KEY_RING_ID `
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com `
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Windows (cmd.exe)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID ^
      --location LOCATION --keyring=KEY_RING_ID ^
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com ^
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Sie sollten eine Antwort ähnlich der folgenden erhalten:

    Updated IAM policy for key KEY_ID.
    bindings:
    - members:
      - serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com
      role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwYCq0Sq4Ho=
    version: 1
    

    Weitere Informationen zu diesem Befehl finden Sie in der Dokumentation zu gcloud kms keys add-iam-policy-binding.

Sie können jetzt eine Instanz erstellen und den Schlüssel für die Verschlüsselung angeben.

Zugriff entfernen

Es gibt mehrere Möglichkeiten, den Zugriff auf eine CMEK-verschlüsselte Instanz zu entfernen:

Wir empfehlen, die Berechtigungen des AML AI-Dienstkontos zu widerrufen, bevor Sie einen Schlüssel deaktivieren oder löschen. Änderungen an Berechtigungen werden innerhalb von Sekunden übernommen, sodass Sie die Auswirkungen der Deaktivierung oder des Löschens eines Schlüssels beobachten können.

Wenn Sie den Verschlüsselungsschlüssel für eine Instanz deaktivieren oder löschen, können Sie keine Instanzdaten mehr aufrufen oder abrufen. Alle in der Instanz gespeicherten Daten sind nicht mehr zugänglich, einschließlich API-Ressourcen wie Datasets, Modelle, Engine-Konfigurationen, Backtest-Ergebnisse und Vorhersageergebnisse. Nutzer mit der Rolle „AML AI-Betrachter“ können weiterhin Instanzmetadaten wie den Instanznamen ansehen.

Nutzer mit der AML AI-Administratorrolle oder der Inhaberrolle können die Instanz löschen.

CMEK-Organisationsrichtlinien

AML AI unterstützt keine CMEK-Organisationsrichtlinien. AML AI erfordert jedoch unabhängig von der Organisationsrichtlinie constraints/gcp.restrictNonCmekServices immer die Verwendung eines CMEK.

Nächste Schritte