Włączanie przezroczystego szyfrowania danych w usłudze SQL Managed Instance włączonej przez usługę Azure Arc (wersja zapoznawcza)

W tym artykule opisano sposób włączania i wyłączania funkcji Transparent Data Encryption (TDE) magazynowanych w wystąpieniu zarządzanym SQL włączonym przez usługę Azure Arc. W tym artykule termin wystąpienie zarządzane odnosi się do wdrożenia wystąpienia zarządzanego SQL włączonego przez usługę Azure Arc i włączenie/wyłączenie funkcji TDE będzie miało zastosowanie do wszystkich baz danych uruchomionych w wystąpieniu zarządzanym.

Aby uzyskać więcej informacji na temat funkcji TDE, zapoznaj się z tematem Transparent Data Encryption.

Włączenie funkcji TDE wykonuje następujące czynności:

  • Wszystkie istniejące bazy danych będą teraz automatycznie szyfrowane.
  • Wszystkie nowo utworzone bazy danych zostaną automatycznie zaszyfrowane.

Uwaga

Jako funkcja w wersji zapoznawczej technologia przedstawiona w tym artykule podlega dodatkowym warunkom użytkowania dla wersji zapoznawczych platformy Microsoft Azure.

Najnowsze aktualizacje są dostępne w informacjach o wersji.

Wymagania wstępne

Przed kontynuowaniem pracy z tym artykułem musisz mieć wystąpienie zarządzane SQL włączone przez utworzony zasób usługi Azure Arc i nawiązać z nim połączenie.

Ograniczenia

Podczas włączania automatycznego szyfrowania TDE obowiązują następujące ograniczenia:

  • Obsługiwana jest tylko warstwa ogólnego przeznaczenia.
  • Grupy trybu failover nie są obsługiwane.

Tworzenie wystąpienia zarządzanego z włączoną funkcją TDE (interfejs wiersza polecenia platformy Azure)

Poniższy przykład tworzy wystąpienie zarządzane SQL włączone przez usługę Azure Arc z jedną repliką z włączoną funkcją TDE:

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

Włączanie funkcji TDE w wystąpieniu zarządzanym

Po włączeniu funkcji TDE w wystąpieniu zarządzanym SQL z obsługą usługi Arc usługa danych automatycznie wykonuje następujące zadania:

  1. Dodaje klucz główny bazy danych zarządzanej przez usługę master w bazie danych.
  2. Dodaje funkcję ochrony certyfikatu zarządzanego przez usługę.
  3. Dodaje skojarzone klucze szyfrowania bazy danych (DEK) we wszystkich bazach danych w wystąpieniu zarządzanym.
  4. Włącza szyfrowanie we wszystkich bazach danych w wystąpieniu zarządzanym.

Możesz ustawić usługę SQL Managed Instance włączoną przez funkcję TDE usługi Azure Arc w jednym z dwóch trybów:

  • Zarządzane przez usługę
  • Zarządzane przez klienta

W trybie zarządzanym przez usługę funkcja TDE wymaga, aby wystąpienie zarządzane używało klucza głównego bazy danych zarządzanej przez usługę, a także certyfikatu serwera zarządzanego przez usługę. Te poświadczenia są tworzone automatycznie po włączeniu funkcji TDE zarządzanej przez usługę.

W trybie zarządzanym przez klienta funkcja TDE używa klucza głównego bazy danych zarządzanej przez usługę i używa kluczy, które należy podać dla certyfikatu serwera. Aby skonfigurować tryb zarządzany przez klienta:

  1. Utwórz certyfikat.
  2. Zapisz certyfikat jako wpis tajny w tej samej przestrzeni nazw platformy Kubernetes co wystąpienie.

Włączanie

W poniższej sekcji opisano sposób włączania funkcji TDE w trybie zarządzanym przez usługę.

Aby włączyć funkcję TDE w trybie zarządzanym usługi, uruchom następujące polecenie:

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

Wyłączanie funkcji TDE w wystąpieniu zarządzanym

Gdy funkcja TDE jest wyłączona w wystąpieniu zarządzanym SQL z obsługą usługi Arc, usługa danych automatycznie wykonuje następujące zadania:

  1. Wyłącza szyfrowanie we wszystkich bazach danych w wystąpieniu zarządzanym.
  2. Pomiń skojarzone zestawy DEKs we wszystkich bazach danych w wystąpieniu zarządzanym.
  3. Pomiń ochronę certyfikatu zarządzanego przez usługę.
  4. Pomiń klucz główny bazy danych zarządzanej przez usługę master w bazie danych.

Aby wyłączyć funkcję TDE:

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

Tworzenie kopii zapasowej poświadczeń TDE

Po utworzeniu kopii zapasowej poświadczeń z wystąpienia zarządzanego poświadczenia są przechowywane w kontenerze. Aby przechowywać poświadczenia na woluminie trwałym, określ ścieżkę instalacji w kontenerze. Na przykład var/opt/mssql/data. Poniższy przykład wykonuje kopię zapasową certyfikatu z wystąpienia zarządzanego:

Uwaga

kubectl cp Jeśli polecenie jest uruchamiane z systemu Windows, polecenie może zakończyć się niepowodzeniem podczas korzystania z bezwzględnych ścieżek systemu Windows. Użyj ścieżek względnych lub poleceń określonych poniżej.

  1. Tworzenie kopii zapasowej certyfikatu z kontenera na /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>');
    

    Przykład:

    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. Skopiuj certyfikat z kontenera do systemu plików.

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

    Przykład:

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

  1. Skopiuj klucz prywatny z kontenera do systemu plików.

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

    Przykład:

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

  1. Usuń certyfikat i klucz prywatny z kontenera.

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

    Przykład:

    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"
    

Przywracanie poświadczeń TDE do wystąpienia zarządzanego

Podobnie jak powyżej, aby przywrócić poświadczenia, skopiuj je do kontenera i uruchom odpowiedni kod T-SQL później.

Uwaga

kubectl cp Jeśli polecenie jest uruchamiane z systemu Windows, polecenie może zakończyć się niepowodzeniem podczas korzystania z bezwzględnych ścieżek systemu Windows. Użyj ścieżek względnych lub poleceń określonych poniżej. Aby przywrócić kopie zapasowe bazy danych, które zostały wykonane przed włączeniem funkcji TDE, należy wyłączyć funkcję TDE w wystąpieniu zarządzanym SQL, przywrócić kopię zapasową bazy danych i ponownie włączyć funkcję TDE.

  1. Skopiuj certyfikat z systemu plików do kontenera.

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

    Przykład:

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

  1. Skopiuj klucz prywatny z systemu plików do kontenera.

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

    Przykład:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. Utwórz certyfikat przy użyciu ścieżek plików z pliku /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>' );
    

    Przykład:

    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. Usuń certyfikat i klucz prywatny z kontenera.

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

    Przykład:

    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"
    

Niewidoczne szyfrowanie danych