Utilizzare la crittografia trasparente dei dati (TDE)

Questa pagina mostra come utilizzare la crittografia trasparente dei dati (TDE).

Le sezioni riportate di seguito mostrano come gestire i certificati TDE.

Prima di iniziare

Per importare o esportare i certificati TDE, devi disporre dell'autorizzazione Identity and Access Management cloudsql.instances.manageEncryption, disponibile nel ruolo cloudsql.admin. Per ulteriori informazioni, consulta i ruoli Cloud SQL.

GRANT VIEW ANY DEFINITION TO other_login AS CustomerDbRootRole

Importare un certificato TDE esterno

Console

Non puoi importare un certificato TDE utilizzando la console Google Cloud.

gcloud

Utilizza il seguente gcloud sql import per importare un certificato da un bucket Cloud Storage:

    gcloud sql import tde INSTANCE_NAME \
    --certificate CERTIFICATE_NAME \
    --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
    --pvk-path=gs://BUCKET_NAME/KEY_NAME \
    --prompt-for-pvk-password \
    --pvk-password CERTIFICATE_PASSWORD
    

Esegui le seguenti sostituzioni:

  • INSTANCE_NAME: il nome dell'istanza Cloud SQL a cui vuoi importare il certificato TDE.
  • CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi importare.
  • BUCKET_NAME: il nome del bucket Cloud Storage in cui si trova il certificato TDE che vuoi importare.
  • KEY_NAME: il nome della chiave di crittografia associata al bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: la password del certificato.

REST v1

Per importare un certificato TDE, utilizza il metodo instances.import e specifica le seguenti proprietà:

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

  • PROJECT_ID: il nome del progetto in cui deve essere importato il certificato di crittografia.
  • INSTANCE_NAME: il nome dell'istanza Cloud SQL a cui vuoi importare il certificato di crittografia.
  • TDE_CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi utilizzare dopo averlo importato.
  • CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi importare.
  • BUCKET_NAME: il nome del bucket Cloud Storage in cui si trova il certificato di crittografia che vuoi importare.
  • KEY_NAME: il nome della chiave di crittografia associata al bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: la password del certificato.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

Corpo JSON della richiesta:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Per importare un certificato TDE, utilizza il metodo instances.import e specifica le seguenti proprietà:

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

  • PROJECT_ID: il nome del progetto in cui deve essere importato il certificato di crittografia.
  • INSTANCE_NAME: il nome dell'istanza Cloud SQL a cui vuoi importare il certificato di crittografia.
  • TDE_CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi utilizzare dopo averlo importato.
  • CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi importare.
  • BUCKET_NAME: il nome del bucket Cloud Storage in cui si trova il certificato di crittografia che vuoi importare.
  • KEY_NAME: il nome della chiave di crittografia associata al bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: la password del certificato.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

Corpo JSON della richiesta:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

A ogni certificato TDE importato viene assegnato un nome univoco nel seguente formato:

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

Se il recupero point-in-time (PITR) è abilitato nell'istanza, potrebbero essere necessari alcuni minuti prima che il certificato TDE importato sia disponibile.

Ruota i certificati TDE

  • Puoi ruotare un certificato TDE importato con la procedura memorizzata msdb.dbo.gcloudsql_rotate_tde_certificate. La procedura deve essere invocata dall'utente sqlserver o dagli utenti a cui l'utente sqlserver ha concesso l'autorizzazione, utilizzando una chiamata simile alla seguente:

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

Eliminare i certificati TDE

  • Puoi importare fino a dieci certificati TDE utente. Se devi importarne altri, elimina i certificati TDE non necessari utilizzando la procedura memorizzata msdb.dbo.gcloudsql_drop_tde_user_certificate. La procedura deve essere invocata dall'utente sqlserver o dagli utenti a cui l'utente sqlserver ha concesso l'autorizzazione, utilizzando una chiamata simile alla seguente:

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • Non puoi eliminare un certificato gestito da Cloud SQL.

  • Non puoi eliminare un certificato mentre è in uso.

Esportare un certificato TDE

Per l'esportazione, devi specificare il nome completo del certificato TDE, inclusi il prefisso e il suffisso. Puoi cercare il nome completo del certificato di crittografia TDE eseguendo una query sulla colonna Nome della visualizzazione sys.certificates:

    SELECT name FROM sys.certificates
  

Console

Non puoi esportare un certificato TDE utilizzando la console Google Cloud.

gcloud

Utilizza il seguente gcloud sql export per esportare un certificato TDE in un bucket Cloud Storage:

          gcloud sql export tde INSTANCE_NAME \
          --certificate CERTIFICATE_NAME \
          --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
          --pvk-path=gs://BUCKET_NAME/KEY_NAME \
          --prompt-for-pvk-password \
          --pvk-password CERTIFICATE_PASSWORD
        

Esegui le seguenti sostituzioni:

  • INSTANCE_NAME: il nome dell'istanza Cloud SQL da cui vuoi esportare il certificato TDE.
  • CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi esportare.
  • BUCKET_NAME: il nome del bucket Cloud Storage in cui si trova il certificato TDE che vuoi esportare.
  • KEY_NAME: il nome della chiave di crittografia associata al bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: la password del certificato.

REST v1

Per esportare un certificato TDE, utilizza il metodo instances.export e specifica le seguenti proprietà:

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

  • PROJECT_ID: il nome del progetto da cui deve essere esportato il certificato di crittografia.
  • INSTANCE_NAME: il nome dell'istanza Cloud SQL da cui vuoi esportare il certificato di crittografia.
  • TDE_CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi utilizzare dopo averlo esportato.
  • CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi esportare.
  • BUCKET_NAME: il nome del bucket Cloud Storage in cui si trova il certificato di crittografia che vuoi esportare.
  • KEY_NAME: il nome della chiave di crittografia associata al bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: la password del certificato.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

Corpo JSON della richiesta:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Per esportare un certificato TDE, utilizza il metodo instances.export e specifica le seguenti proprietà:

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

  • PROJECT_ID: il nome del progetto da cui deve essere esportato il certificato di crittografia.
  • INSTANCE_NAME: il nome dell'istanza Cloud SQL da cui vuoi esportare il certificato di crittografia.
  • TDE_CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi utilizzare dopo averlo esportato.
  • CERTIFICATE_NAME: il nome del certificato di crittografia che vuoi esportare.
  • BUCKET_NAME: il nome del bucket Cloud Storage in cui si trova il certificato di crittografia che vuoi esportare.
  • KEY_NAME: il nome della chiave di crittografia associata al bucket Cloud Storage.
  • CERTIFICATE_PASSWORD: la password del certificato.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

Corpo JSON della richiesta:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Importare un backup criptato con TDE

Quando importi un backup criptato con TDE, se il certificato TDE corrispondente è già nell'istanza di origine, puoi importare direttamente il backup criptato e non verrà decriptato. Non è necessario fornire nuovamente il certificato.

Se il certificato non è nell'istanza, utilizza il flag --keep-encrypted durante l'importazione. Il flag offre i seguenti vantaggi:

  • Mantiene il certificato TDE associato all'istanza.
  • Impedisce il decrittografia del backup durante l'importazione.

Se non utilizzi il flag --keep-encrypted, il backup importato verrà decriptato e il certificato TDE non verrà salvato sul server.

Per maggiori informazioni, consulta le seguenti risorse:

Esportare un backup con crittografia TDE

Puoi esportare un backup con crittografia TDE nello stesso modo in cui esporti un backup non criptato. Il certificato utilizzato per criptare il backup non è incluso nell'esportazione. Devi esportarlo separatamente.

Per maggiori informazioni, consulta le seguenti risorse:

Crittografare e decriptare un database

Puoi criptare e decriptare l'istanza in modo molto simile a come faresti con SQL Server.

Inizialmente, solo gli accessi root dell'utente, ad esempiosqlserver, possono accedere ai certificati TDE. Per concedere l'accesso ad altri utenti, utilizza il seguente comando o uno simile:

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

In alternativa, puoi concedere l'accesso a un determinato certificato e a un utente del database.

Puoi criptare un database utilizzando il seguente comando o uno simile:

    CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE CERTIFICATE_NAME
    ALTER DATABASE DATABASE_NAME SET ENCRYPTION ON
  

Puoi decriptare un database utilizzando il seguente comando o uno simile:

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

Passaggi successivi