在 Azure Arc 所啟用的 SQL 受控執行個體上啟用透明資料加密 (預覽)

本文說明如何在 Azure Arc 所啟用的 SQL 受控執行個體上啟用和停用待用透明資料加密 (TDE)。在本文中,受控執行個體一詞是指 Azure Arc 所啟用的 SQL 受控執行個體的部署,且啟用/停用 TDE 會套用至在受控執行個體上執行的所有資料庫。

如需 TDE 的詳細資訊,請參閱透明資料加密

開啟 TDE 功能會執行下列動作:

  • 所有現有的資料庫現在都會自動加密。
  • 所有新建立的資料庫都會自動加密。

注意

作為預覽功能,本文所述的技術受限於 Microsoft Azure 預覽版增補使用規定

版本資訊中提供的最新更新。

必要條件

在繼續進行本文之前,您必須建立 Azure Arc 所啟用的 SQL 受控執行個體資源,並連線到該資源。

限制

當您啟用自動 TDE 時會套用下列限制:

  • 僅支援一般用途層。
  • 不支援容錯移轉群組。

建立已啟用 TDE (Azure CLI) 的受控執行個體

下列範例會建立已啟用 TDE 之具有一個複本的 Azure Arc 所啟用的 SQL 受控執行個體:

az sql mi-arc create --name sqlmi-tde --k8s-namespace arc --tde-mode ServiceManaged --use-k8s

在受控執行個體上開啟 TDE

在已啟用 Arc 的 SQL 受控執行個體上啟用 TDE 時,資料服務會自動執行下列工作:

  1. master 資料庫中新增服務管理資料庫的主要金鑰。
  2. 新增服務管理憑證保護程式。
  3. 在受控執行個體上的所有資料庫上新增相關聯的資料庫加密金鑰 (DEK)。
  4. 在受控執行個體上的所有資料庫上啟用加密。

您可以透過以下兩種模式之一來設定 Azure Arc 所啟用的 SQL 受控執行個體 TDE:

  • 服務管理
  • 由客戶管理

在服務管理的模式中,TDE 需要受控執行個體使用服務管理資料庫的主要金鑰,以及服務管理伺服器憑證。 啟用服務管理 TDE 時,會自動建立這些認證。

在客戶管理模式中,TDE 會使用服務管理資料庫的主要金鑰,並使用您提供的伺服器憑證金鑰。 若要設定客戶管理模式:

  1. 建立憑證。
  2. 將憑證儲存為與執行個體相同之 Kubernetes 命名空間中的秘密。

啟用

下一節說明如何在服務管理模式中啟用 TDE。

若要在服務管理模式中啟用 TDE,請執行下列命令:

az sql mi-arc update --tde-mode ServiceManaged

在受控執行個體上關閉 TDE

在已啟用 Arc 的 SQL 受控執行個體上停用 TDE 時,資料服務會自動執行下列工作:

  1. 在受控執行個體上的所有資料庫上停用加密。
  2. 卸除受控執行個體之所有資料庫上的相關聯 DEK。
  3. 卸除服務管理憑證保護程式。
  4. master 資料庫中卸除服務管理資料庫的主要金鑰。

若要停用 TDE:

az sql mi-arc update --tde-mode Disabled

備份 TDE 認證

當您從受控執行個體備份認證時,認證會儲存在容器內。 若要將認證儲存在永續性磁碟區上,請在容器中指定掛接路徑。 例如: var/opt/mssql/data 。 下列範例會從受控執行個體備份憑證:

注意

如果 kubectl cp 命令是從 Windows 執行,當使用絕對 Windows 路徑時,命令可能會失敗。 使用下列指定的相對路徑或命令。

  1. 將憑證從容器備份至 /var/opt/mssql/data

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    範例:

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. 將憑證從容器複製到您的檔案系統。

    kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>
    

    範例:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
    

  1. 將私密金鑰從容器複製到您的檔案系統。

     kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>
    

    範例:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
    

  1. 從容器中刪除憑證和私密金鑰。

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    範例:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

將 TDE 認證還原至受控執行個體

與上述類似,若要還原認證,請將認證複製到容器中,然後執行對應的 T-SQL。

注意

如果 kubectl cp 命令是從 Windows 執行,當使用絕對 Windows 路徑時,命令可能會失敗。 使用下列指定的相對路徑或命令。 若要還原在啟用 TDE 之前就取用的資料庫備份,您必須停用 SQL 受控執行個體上的 TDE、還原資料庫備份,然後再次啟用 TDE。

  1. 將憑證從檔案系統複製到您的容器。

    type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>
    

    範例:

    type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
    

  1. 將私密金鑰從檔案系統複製到您的容器。

    type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>
    

    範例:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. 使用 /var/opt/mssql/data 的檔案路徑建立憑證。

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    範例:

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  3. 從容器中刪除憑證和私密金鑰。

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    範例:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

透明資料加密