使用透明資料加密 (TDE)

本頁面說明如何使用透明資料加密 (TDE)

以下各節說明如何管理 TDE 憑證。

事前準備

如要匯入或匯出 TDE 憑證,您必須具備 cloudsql.instances.manageEncryption Identity and Access Management 權限,這項權限包含在 cloudsql.admin 角色中。詳情請參閱 Cloud SQL 角色

GRANT VIEW ANY DEFINITION TO other_login AS CustomerDbRootRole

匯入外部 TDE 憑證

控制台

您無法使用 Google Cloud 主控台匯入 TDE 憑證。

gcloud

使用下列 gcloud sql import 從 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
    

請將下列項目改為對應的值:

  • INSTANCE_NAME:要匯入 TDE 憑證的 Cloud SQL 執行個體名稱。
  • CERTIFICATE_NAME:要匯入的加密憑證名稱。
  • BUCKET_NAME:您要匯入的 TDE 憑證所在 Cloud Storage bucket 的名稱。
  • KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
  • CERTIFICATE_PASSWORD:憑證密碼。

REST v1

如要匯入 TDE 憑證,請使用 instances.import 方法,並指定下列屬性:

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:要匯入加密憑證的專案名稱。
  • INSTANCE_NAME:您要將加密憑證匯入的 Cloud SQL 執行個體名稱。
  • TDE_CERTIFICATE_NAME:匯入後要使用的加密憑證名稱。
  • CERTIFICATE_NAME:要匯入的加密憑證名稱。
  • BUCKET_NAME:您要匯入的加密憑證所在的 Cloud Storage bucket 名稱。
  • KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
  • CERTIFICATE_PASSWORD:憑證密碼。

HTTP 方法和網址:

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

JSON 要求主體:


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



如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

如要匯入 TDE 憑證,請使用 instances.import 方法,並指定下列屬性:

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:要匯入加密憑證的專案名稱。
  • INSTANCE_NAME:您要將加密憑證匯入的 Cloud SQL 執行個體名稱。
  • TDE_CERTIFICATE_NAME:匯入後要使用的加密憑證名稱。
  • CERTIFICATE_NAME:要匯入的加密憑證名稱。
  • BUCKET_NAME:您要匯入的加密憑證所在的 Cloud Storage bucket 名稱。
  • KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
  • CERTIFICATE_PASSWORD:憑證密碼。

HTTP 方法和網址:

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

JSON 要求主體:


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



如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

每個匯入的 TDE 憑證都會指派專屬名稱,格式如下:

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

如果執行個體已啟用時間點復原 (PITR),匯入的 TDE 憑證可能需要幾分鐘的時間才能使用。

輪替 TDE 憑證

  • 您可以使用 msdb.dbo.gcloudsql_rotate_tde_certificate 預存程序,輪替匯入的 TDE 憑證。程序必須由 sqlserver 使用者叫用,或由 sqlserver 使用者授權的使用者叫用,方法是使用類似下列的呼叫:

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

刪除 TDE 憑證

  • 您最多可以匯入 10 個使用者 TDE 憑證。如要匯入更多憑證,請使用 msdb.dbo.gcloudsql_drop_tde_user_certificate 預存程序刪除不必要的 TDE 憑證。程序必須由 sqlserver 使用者叫用,或由 sqlserver 使用者授權的使用者叫用,方法是使用類似下列的呼叫:

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • 您無法刪除 Cloud SQL 管理的憑證。

  • 使用中的憑證無法刪除。

匯出 TDE 憑證

您必須指定完整的 TDE 憑證名稱 (包括前置字串和後置字串) 才能匯出。您可以從 sys.certificates 檢視畫面查詢名稱資料欄,找出完整的 TDE 加密憑證名稱:

    SELECT name FROM sys.certificates
  

控制台

您無法使用 Google Cloud 控制台匯出 TDE 憑證。

gcloud

使用下列 gcloud sql export 將 TDE 憑證匯出至 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
        

請將下列項目改為對應的值:

  • INSTANCE_NAME:要匯出 TDE 憑證的 Cloud SQL 執行個體名稱。
  • CERTIFICATE_NAME:要匯出的加密憑證名稱。
  • BUCKET_NAME:您要匯出的 TDE 憑證所在的 Cloud Storage bucket 名稱。
  • KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
  • CERTIFICATE_PASSWORD:憑證密碼。

REST v1

如要匯出 TDE 憑證,請使用 instances.export 方法,並指定下列屬性:

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:要匯出加密憑證的專案名稱。
  • INSTANCE_NAME:要匯出加密憑證的 Cloud SQL 執行個體名稱。
  • TDE_CERTIFICATE_NAME:匯出後要使用的加密憑證名稱。
  • CERTIFICATE_NAME:要匯出的加密憑證名稱。
  • BUCKET_NAME:您要匯出加密憑證的 Cloud Storage bucket 名稱。
  • KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
  • CERTIFICATE_PASSWORD:憑證密碼。

HTTP 方法和網址:

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

JSON 要求主體:


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


如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

如要匯出 TDE 憑證,請使用 instances.export 方法,並指定下列屬性:

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:要匯出加密憑證的專案名稱。
  • INSTANCE_NAME:要匯出加密憑證的 Cloud SQL 執行個體名稱。
  • TDE_CERTIFICATE_NAME:匯出後要使用的加密憑證名稱。
  • CERTIFICATE_NAME:要匯出的加密憑證名稱。
  • BUCKET_NAME:您要匯出加密憑證的 Cloud Storage bucket 名稱。
  • KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
  • CERTIFICATE_PASSWORD:憑證密碼。

HTTP 方法和網址:

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

JSON 要求主體:


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


如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

匯入以 TDE 加密的備份

匯入 TDE 加密備份時,如果來源執行個體上已有相符的 TDE 憑證,您可以直接匯入加密備份,系統不會解密。您不必再次提供憑證。

如果執行個體上沒有憑證,請在匯入時使用 --keep-encrypted 旗標。這個標記具有下列優點:

  • 保留與執行個體相關聯的 TDE 憑證。
  • 防止系統在匯入期間解密備份。

如果未使用 --keep-encrypted 旗標,匯入的備份檔會經過解密,且 TDE 憑證不會儲存在伺服器上。

詳情請參閱下列資源:

匯出 TDE 加密備份

您可以採用與匯出未加密備份相同的方式,匯出 TDE 加密備份。匯出內容不包含用於加密備份的憑證。你必須分開匯出。

詳情請參閱下列資源:

加密及解密資料庫

加密及解密執行個體的方式與使用 SQL Server 時大致相同。

一開始,只有使用者 root 登入 (例如 sqlserver) 才能存取 TDE 憑證。如要授予其他使用者存取權,請使用下列指令或類似指令:

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

或者,您也可以授予特定憑證和資料庫使用者存取權。

您可以使用下列或類似指令加密資料庫:

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

您可以使用下列或類似指令解密資料庫:

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

後續步驟