Cripta i dati utilizzando chiavi di crittografia gestite dal cliente (CMEK)

Questa pagina descrive come criptare i dati archiviati in istanze AML AI con chiavi di crittografia gestite dal cliente (CMEK).

Panoramica

Tutti i dati dei clienti in un'istanza AML AI vengono criptati utilizzando una chiave CMEK quando sono archiviati at-rest. Puoi gestire la chiave all'interno di Cloud Key Management Service e controllare l'accesso alla chiave utilizzando Identity and Access Management. Se disabiliti temporaneamente o elimini in modo definitivo la chiave CMEK, non sarà possibile accedere ai dati criptati con quella chiave.

CMEK consente di controllare più aspetti del ciclo di vita e della gestione delle chiavi, ma comporta anche costi aggiuntivi per il servizio Cloud KMS.

Cloud KMS può essere eseguito nello stesso progetto Google Cloud di AML AI o in un progetto separato in cui puoi gestire centralmente le chiavi per più progetti.

Assegni una chiave CMEK quando crei un'istanza. Tutte le istanze devono essere configurate utilizzando CMEK e non possono essere modificate per utilizzare la crittografia predefinita di Google.

Per ulteriori informazioni su CMEK in generale, incluso quando e perché abilitarla, consulta la documentazione di Cloud KMS.

Dati del cliente

Tutti i dati dei clienti gestiti da AML AI vengono criptati at-rest utilizzando la chiave CMEK specificata nella risorsa Istanza padre corrispondente. Ciò include tutti i dati dei clienti associati alle risorse IA AML, come set di dati, configurazioni di motori, modelli e altro ancora. Tutta l'archiviazione temporanea e permanente dei dati dei clienti, comprese le copie di input e output, le funzionalità ML generate, i log, gli iperparametri del modello, i pesi del modello e i risultati delle previsioni, vengono criptati utilizzando la chiave CMEK dell'istanza corrispondente.

AML AI non gestisce la crittografia dei dati di input o di output nel progetto Google Cloud. Se vuoi che questi dati vengano criptati, devi configurare una chiave CMEK separata nel progetto Google Cloud. La chiave KMS specificata in un'istanza viene utilizzata per le risorse AML AI e i relativi dati.

Creazione di una chiave e concessione delle autorizzazioni

Le seguenti istruzioni spiegano come creare una chiave per un'istanza e concedere le autorizzazioni per criptare e decriptare i dati dell'istanza con la chiave. Puoi utilizzare una chiave creata direttamente in Cloud KMS o una chiave gestita esternamente che rendi disponibile con Cloud External Key Manager.

  1. Nel progetto Google Cloud in cui vuoi gestire le chiavi:

    1. Abilita l'API Cloud KMS.

    2. Crea un keyring utilizzando il metodo projects.locations.keyRings.create. La località del keyring di Cloud KMS deve corrispondere alla località dell'istanza che cripti.

      REST

      Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

      • KMS_PROJECT_ID: l'ID progetto Google Cloud del progetto contenente il keyring
      • LOCATION: la posizione del keyring; utilizza una delle regioni supportate
        Mostra località
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: un identificatore definito dall'utente per il keyring

      Per inviare la richiesta, scegli una delle seguenti opzioni:

      curl

      Esegui questo comando:

      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

      Esegui questo comando:

      $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

      Dovresti ricevere una risposta JSON simile alla seguente:

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

      gcloud

      Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

      • LOCATION: la posizione del keyring; utilizza una delle regioni supportate
        Mostra località
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: un identificatore definito dall'utente per il keyring

      Esegui questo seguente comando:

      Linux, macOS o 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
      
      Dovresti ricevere una risposta vuota:
      $

    3. Crea una chiave utilizzando il metodo projects.locations.keyRings.cryptoKeys.

      REST

      Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

      • KMS_PROJECT_ID: l'ID progetto Google Cloud del progetto contenente il keyring
      • LOCATION: la posizione del keyring; utilizza una delle regioni supportate
        Mostra località
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: identificatore definito dall'utente per il keyring
      • KEY_ID: un identificatore definito dall'utente per la chiave

      Corpo JSON della richiesta:

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      Per inviare la richiesta, scegli una delle seguenti opzioni:

      curl

      Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

      Quindi, esegui questo comando per inviare la richiesta REST:

      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

      Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

      Quindi, esegui questo comando per inviare la richiesta REST:

      $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

      Dovresti ricevere una risposta JSON simile alla seguente:

      {
        "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

      Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

      • LOCATION: la posizione del keyring; utilizza una delle regioni supportate
        Mostra località
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: identificatore definito dall'utente per il keyring
      • KEY_ID: un identificatore definito dall'utente per la chiave

      Esegui questo seguente comando:

      Linux, macOS o 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"
      
      Dovresti ricevere una risposta vuota:
      $

  2. Se non hai creato un'istanza AML AI nel progetto AML AI, l'account di servizio AML AI non esiste ancora. Crea il service account.

    Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID progetto Google Cloud per il progetto in cui è in esecuzione AML AI

    Esegui questo seguente comando:

    Linux, macOS o 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
    

    Dovresti ricevere una risposta simile alla seguente:

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

  3. Concedi il ruolo IAM Autore crittografia/decrittografia CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) all'account di servizio AML AI. Concedi questa autorizzazione sulla chiave che hai creato.

    Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID progetto Google Cloud per il progetto in cui è in esecuzione AML AI
    • KEY_ID: identificatore definito dall'utente per la chiave
    • LOCATION: la posizione del keyring; utilizza una delle regioni supportate
      Mostra località
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
    • KEY_RING_ID: un identificatore definito dall'utente per il keyring
    • PROJECT_NUMBER: il numero di progetto Google Cloud per il progetto in cui è in esecuzione AML AI

    Esegui questo seguente comando:

    Linux, macOS o 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
    

    Dovresti ricevere una risposta simile alla seguente:

    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
    

    Per ulteriori informazioni su questo comando, consulta la documentazione gcloud kms keys add-iam-policy-binding.

Ora puoi creare un'istanza e specificare la chiave da utilizzare per la crittografia.

Rimozione dell'accesso in corso...

Esistono diversi modi per rimuovere l'accesso a un'istanza criptata con CMEK:

Ti consigliamo di revocare le autorizzazioni dall'account di servizio AML AI prima di disabilitare o eliminare una chiave. Le modifiche alle autorizzazioni vengono propagate in pochi secondi, per consentirti di osservare gli effetti della disabilitazione o dell'eliminazione di una chiave.

Quando disabiliti o elimini la chiave di crittografia per un'istanza, perdi la possibilità di visualizzare o recuperare i dati dell'istanza. Tutti i dati archiviati nell'istanza diventano inaccessibili, comprese le risorse API come set di dati, modelli, configurazioni del motore, risultati di backtest e risultati delle previsioni. Gli utenti con il ruolo Visualizzatore AML AI possono comunque visualizzare i metadati dell'istanza, come il nome dell'istanza.

Gli utenti con il ruolo Amministratore o Proprietario AML AI possono eliminare l'istanza.

Criteri dell'organizzazione CMEK

AML AI non supporta i criteri dell'organizzazione CMEK. Tuttavia, AML AI richiede sempre l'utilizzo di CMEK, indipendentemente dal criterio dell'organizzazione constraints/gcp.restrictNonCmekServices.

Che cosa succede dopo?