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

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

Panoramica

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

La tecnologia CMEK ti offre il controllo su più aspetti del ciclo di vita e della gestione delle tue 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 gestisci centralmente le chiavi di più progetti.

Puoi assegnare 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 sulla CMEK in generale, inclusi 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 AML AI, come set di dati, configurazioni motore, modelli e altro ancora. 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, le ponderazioni del modello e i risultati delle previsioni, vengono criptate tramite la chiave CMEK dell'istanza corrispondente.

AML AI non gestisce la crittografia dei dati di input o di output nel tuo progetto Google Cloud. Se vuoi che questi dati siano criptati, devi configurare una chiave CMEK separata nel tuo 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 istruzioni seguenti 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 criptata.

      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:
        • 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:

      arricciatura

      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 uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

      • LOCATION: la posizione del keyring; utilizza una delle regioni supportate:
        • 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 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:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: l'identificatore definito dall'utente per il keyring
      • KEY_ID: un identificatore della chiave definito dall'utente.

      Corpo JSON della richiesta:

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      Per inviare la richiesta, scegli una delle seguenti opzioni:

      arricciatura

      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 uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

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

      Esegui questo 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. Creare l'account di servizio:

    Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

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

    Esegui questo 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 per la chiave che hai creato.

    Prima di utilizzare uno qualsiasi dei dati di comando riportati 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:
      • 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 di Google Cloud per il progetto in cui è in esecuzione AML AI

    Esegui questo 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 su 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, in modo da poter osservare gli effetti della disattivazione o dell'eliminazione di una chiave.

Se 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 motore, risultati dei backtest e 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 AML AI o Proprietario 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?