Usar a criptografia transparente de dados (TDE)

Nesta página, mostramos como usar a criptografia transparente de dados (TDE).

As seções a seguir mostram como gerenciar certificados de TDE.

Antes de começar

Para importar ou exportar certificados de TDE, é necessário ter a permissão cloudsql.instances.manageEncryption do Identity and Access Management, disponível no papel cloudsql.admin. Para mais informações, consulte os papéis do Cloud SQL.

GRANT VIEW ANY DEFINITION TO other_login AS CustomerDbRootRole

Importar um certificado de TDE externo

Console

Não é possível importar um certificado de TDE usando o console do Google Cloud.

gcloud

Use o seguinte gcloud sql import para importar um certificado de um bucket do 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
    

Faça as seguintes substituições:

  • INSTANCE_NAME: o nome da instância do Cloud SQL para a qual você quer importar o certificado TDE.
  • CERTIFICATE_NAME: o nome do certificado de criptografia que você quer importar.
  • BUCKET_NAME: o nome do bucket do Cloud Storage em que o certificado de TDE que você quer importar está localizado.
  • KEY_NAME: o nome da chave de criptografia associada ao bucket do Cloud Storage.
  • CERTIFICATE_PASSWORD: a senha do certificado.

REST v1

Para importar um certificado de TDE, use o método instances.import e especifique as seguintes propriedades:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o nome do projeto em que o certificado de criptografia será importado.
  • INSTANCE_NAME: o nome da instância do Cloud SQL para a qual você quer importar o certificado de criptografia.
  • TDE_CERTIFICATE_NAME: o nome do certificado de criptografia que você quer usar depois que ele for importado.
  • CERTIFICATE_NAME: o nome do certificado de criptografia que você quer importar.
  • BUCKET_NAME: o nome do bucket do Cloud Storage em que o certificado de criptografia que você quer importar está localizado.
  • KEY_NAME: o nome da chave de criptografia associada ao bucket do Cloud Storage.
  • CERTIFICATE_PASSWORD: a senha do certificado.

Método HTTP e URL:

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

Corpo JSON da solicitação:


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



Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

Para importar um certificado de TDE, use o método instances.import e especifique as seguintes propriedades:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o nome do projeto em que o certificado de criptografia será importado.
  • INSTANCE_NAME: o nome da instância do Cloud SQL para a qual você quer importar o certificado de criptografia.
  • TDE_CERTIFICATE_NAME: o nome do certificado de criptografia que você quer usar depois que ele for importado.
  • CERTIFICATE_NAME: o nome do certificado de criptografia que você quer importar.
  • BUCKET_NAME: o nome do bucket do Cloud Storage em que o certificado de criptografia que você quer importar está localizado.
  • KEY_NAME: o nome da chave de criptografia associada ao bucket do Cloud Storage.
  • CERTIFICATE_PASSWORD: a senha do certificado.

Método HTTP e URL:

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

Corpo JSON da solicitação:


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



Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Cada certificado TDE importado recebe um nome exclusivo no formato a seguir:

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

Se a recuperação pontual (PITR) estiver ativada na instância, pode levar vários minutos até que o certificado TDE importado esteja disponível.

Girar certificados de TDE

  • É possível girar um certificado de TDE importado com o procedimento armazenado msdb.dbo.gcloudsql_rotate_tde_certificate. O procedimento precisa ser invocado pelo usuário sqlserver ou por usuários a quem o usuário sqlserver deu permissão, usando uma chamada semelhante a esta:

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

Excluir certificados TDE

  • É possível importar até dez certificados de TDE do usuário. Se você precisar importar mais, exclua todos os certificados de TDE desnecessários usando o procedimento armazenado msdb.dbo.gcloudsql_drop_tde_user_certificate. O procedimento precisa ser invocado pelo usuário sqlserver ou por usuários a quem o usuário sqlserver deu permissão, usando uma chamada semelhante a esta:

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • Não é possível excluir um certificado gerenciado pelo Cloud SQL.

  • Não é possível excluir um certificado enquanto ele estiver em uso.

Exportar um certificado de TDE

É necessário especificar o nome completo do certificado TDE, incluindo o prefixo e o sufixo, para exportar. É possível procurar o nome completo do certificado de criptografia TDE consultando a coluna de nome da visualização sys.certificates:

    SELECT name FROM sys.certificates
  

Console

Não é possível exportar um certificado de TDE usando o console do Google Cloud.

gcloud

Use o seguinte gcloud sql export para exportar um certificado de TDE para um bucket do 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
        

Faça as seguintes substituições:

  • INSTANCE_NAME: o nome da instância do Cloud SQL de onde você quer exportar o certificado TDE.
  • CERTIFICATE_NAME: o nome do certificado de criptografia que você quer exportar.
  • BUCKET_NAME: o nome do bucket do Cloud Storage em que o certificado de TDE que você quer exportar está localizado.
  • KEY_NAME: o nome da chave de criptografia associada ao bucket do Cloud Storage.
  • CERTIFICATE_PASSWORD: a senha do certificado.

REST v1

Para exportar um certificado de TDE, use o método instances.export e especifique as seguintes propriedades:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o nome do projeto de onde o certificado de criptografia será exportado.
  • INSTANCE_NAME: o nome da instância do Cloud SQL de onde você quer exportar o certificado de criptografia.
  • TDE_CERTIFICATE_NAME: o nome do certificado de criptografia que você quer usar depois que ele for exportado.
  • CERTIFICATE_NAME: o nome do certificado de criptografia que você quer exportar.
  • BUCKET_NAME: o nome do bucket do Cloud Storage em que o certificado de criptografia que você quer exportar está localizado.
  • KEY_NAME: o nome da chave de criptografia associada ao bucket do Cloud Storage.
  • CERTIFICATE_PASSWORD: a senha do certificado.

Método HTTP e URL:

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

Corpo JSON da solicitação:


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


Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

Para exportar um certificado de TDE, use o método instances.export e especifique as seguintes propriedades:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o nome do projeto de onde o certificado de criptografia será exportado.
  • INSTANCE_NAME: o nome da instância do Cloud SQL de onde você quer exportar o certificado de criptografia.
  • TDE_CERTIFICATE_NAME: o nome do certificado de criptografia que você quer usar depois que ele for exportado.
  • CERTIFICATE_NAME: o nome do certificado de criptografia que você quer exportar.
  • BUCKET_NAME: o nome do bucket do Cloud Storage em que o certificado de criptografia que você quer exportar está localizado.
  • KEY_NAME: o nome da chave de criptografia associada ao bucket do Cloud Storage.
  • CERTIFICATE_PASSWORD: a senha do certificado.

Método HTTP e URL:

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

Corpo JSON da solicitação:


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


Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Importar um backup criptografado com TDE

Ao importar um backup criptografado com TDE, se o certificado de TDE correspondente já estiver na instância de origem, você poderá importar o backup criptografado diretamente, e ele não será descriptografado. Não é necessário fornecer o certificado novamente.

Se o certificado não estiver na instância, use a flag --keep-encrypted ao importar. A flag oferece os seguintes benefícios:

  • Mantém o certificado TDE associado à instância.
  • Impede que o backup seja descriptografado durante a importação.

Se você não usar a flag --keep-encrypted, o backup importado será descriptografado, e o certificado TDE não será salvo no servidor.

Para saber mais, acesse os recursos a seguir:

Exportar um backup criptografado com TDE

É possível exportar um backup criptografado com TDE da mesma forma que um não criptografado. O certificado usado para criptografar o backup não é incluído na exportação. Você precisa exportá-lo separadamente.

Para saber mais, acesse os recursos a seguir:

Criptografar e descriptografar um banco de dados

É possível criptografar e descriptografar a instância da mesma forma que você faria com o SQL Server.

Inicialmente, apenas os logins de usuário root, como sqlserver, podem acessar os certificados de TDE. Para conceder acesso a outros usuários, use o comando abaixo ou um semelhante:

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

Também é possível conceder acesso a um certificado e usuário de banco de dados específico.

É possível criptografar um banco de dados usando o comando a seguir ou um semelhante:

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

É possível descriptografar um banco de dados usando o comando a seguir ou um semelhante:

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

A seguir