Freigeben über


Aktivieren der transparenten Datenverschlüsselung für die von Azure Arc aktivierte verwaltete SQL-Instanz (Vorschau)

Dieser Artikel beschreibt Aktivieren bzw. Deaktivieren der transparenten Datenverschlüsselung (TDE) im Ruhezustand in einer von Azure Arc unterstützten SQL Managed Instance. In diesem Artikel bezieht sich der Begriff "verwaltete Instanz“ auf eine Bereitstellung der von Azure Arc aktivierten SQL-verwalteten Instanz. Dabei gilt die TDE- Aktivierung bzw. Deaktivierung für alle Datenbanken auf einer verwalteten Instanz.

Weitere Informationen zu TDE finden Sie unter Transparente Datenverschlüsselung.

Beim Einschalten des TDE-Features geschieht folgendes:

  • Alle vorhandenen Datenbanken werden jetzt automatisch verschlüsselt.
  • Alle neu erstellten Datenbanken werden automatisch verschlüsselt.

Hinweis

Als Previewfunktion unterliegt die in diesem Artikel vorgestellte Technologie den zusätzlichen Nutzungsbedingungen für Microsoft Azure-Vorschauen.

Die neuesten Updates sind in den Versionshinweisenverfügbar.

Voraussetzungen

Bevor Sie mit diesem Artikel fortfahren, müssen Sie über eine Azure Arc-fähige SQL Managed Instance-Ressource verfügen und eine Verbindung mit ihr herstellen.

Begrenzungen

Folgende Einschränkungen gelten, wenn Sie automatische TDE aktivieren:

  • Es wird nur die Ebene für allgemeinen Zwecke unterstützt.
  • Failovergruppen werden nicht unterstützt.

Erstellen einer verwalteten TDE-fähigen Instanz (Azure CLI)

Im folgenden Beispiel wird eine von Azure Arc aktivierte SQL Managed Instance mit einem Replikat (TDE-fähig) erstellt:

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

TDE-Aktivieren für die verwaltete Instanz

Wenn die TDE in einer Arc-fähigen SQL Managed Instanz aktiviert ist, führt der Datendienst automatisch folgende Schritte aus:

  1. Fügt den dienstseitig verwalteten Datenbankmasterschlüssel in der master Datenbank hinzu.
  2. Fügt die dienstseitig verwaltete Zertifikatschutzkomponente hinzu.
  3. Fügt die zugeordneten Datenbankverschlüsselungsschlüssel (DEK) für alle Datenbanken in der verwalteten Instanz hinzu.
  4. Aktiviert die Verschlüsselung für alle Datenbanken in der verwalteten Instanz.

Sie können die von Azure Arc TDE aktivierte SQL Managed Instance in einem von zwei Modi festlegen:

  • Dienstseitig verwaltetet
  • Vom Kunden verwaltet

Im dienstseitig verwalteten Modus benötigt TDE die verwaltete Instanz, um einen vom Dienst verwalteten Datenbankmasterschlüssel sowie das vom Dienst verwaltete Serverzertifikat zu verwenden. Diese Anmeldeinformationen werden automatisch erstellt, wenn die dienstseitig verwaltete TDE aktiviert ist.

Im kundenseitig verwalteten Modus verwendet die TDE einen vom Dienst verwalteten Datenbankmasterschlüssel sowie die von Ihnen für das Serverzertifikat bereitgestellten Schlüssel. Konfigurieren kundenseitig verwalteter Schlüssel:

  1. Erstellen eines Zertifikats.
  2. Im selben Kubernetes-Namespace wie die Instanz speichern Sie das Zertifikat als geheim.

Aktivieren

Im folgenden Abschnitt wird die Aktivierung der TDE im dienstseitig verwalteten Modus beschrieben.

Führen Sie folgenden Befehl aus, um die TDE im dienstseitig verwalteten Dienstmodus zu aktivieren:

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

Deaktivieren der TDE für die verwaltete Instanz

Wenn die TDE in einer Arc-fähigen SQL Managed Instanz deaktiviert ist, führt der Datendienst automatisch folgende Schritte aus:

  1. Deaktiviert die Verschlüsselung für alle Datenbanken in der verwalteten Instanz.
  2. Legt die zugeordneten DEKs für alle Datenbanken in der verwalteten Instanz ab.
  3. Legt die dienstseitig verwaltete Zertifikatschutzkomponente ab.
  4. Legt den dienstseitig verwalteten Datenbankmasterschlüssel in der master Datenbank ab.

So deaktivieren Sie TDE:

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

Sichern der TDE-Anmeldedaten

Wenn Sie Anmeldeinformationen der verwalteten Instanz sichern, werden die Anmeldeinformationen innerhalb des Containers gespeichert. Um Anmeldeinformationen auf einem dauerhaften Volume zu speichern, geben Sie den Einbindungspfad im Container an. Beispielsweise var/opt/mssql/data. Im folgenden Beispiel wird ein Zertifikat in der verwalteten Instanz gesichert:

Hinweis

Wenn der Befehl kubectl cp aus Windows ausgeführt wird und absolute Windows-Pfade verwendet werden, tritt möglicherweise ein Fehler auf. Verwenden Sie relative Pfade oder die unten angegebenen Befehle.

  1. Sichern Sie das Zertifikat aus dem Container in /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>');
    

    Beispiel:

    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. Kopieren Sie das Zertifikat aus dem Container in Ihr Dateisystem.

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

    Beispiel:

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

  1. Kopieren Sie den privaten Schlüssel aus dem Container in Ihr Dateisystem.

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

    Beispiel:

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

  1. Löschen Sie das Zertifikat und den privaten Schlüssel aus dem Container.

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

    Beispiel:

    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"
    

Wiederherstellen der TDE-Anmeldedaten in einer verwalteten Instanz

Ähnlich wie oben stellen Sie die Anmeldeinformationen wieder her, indem Sie sie in den Container kopieren und anschließend die entsprechenden T-SQL-Anweisungen ausführen.

Hinweis

Wenn der Befehl kubectl cp aus Windows ausgeführt wird und absolute Windows-Pfade verwendet werden, tritt möglicherweise ein Fehler auf. Verwenden Sie relative Pfade oder die unten angegebenen Befehle. Um Datenbanksicherungen wiederherzustellen, die vor dem Aktivieren der TDE ausgeführt wurden, müssen Sie die TDE in der SQL Managed Instance deaktivieren, die Datenbanksicherung wiederherstellen und die TDE erneut aktivieren.

  1. Kopieren Sie das Zertifikat aus Ihrem Dateisystem in den Container.

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

    Beispiel:

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

  1. Kopieren Sie den privaten Schlüssel aus Ihrem Dateisystem in den Container.

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

    Beispiel:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. Erstellen Sie das Zertifikat mithilfe von Dateipfaden aus /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>' );
    

    Beispiel:

    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. Löschen Sie das Zertifikat und den privaten Schlüssel aus dem Container.

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

    Beispiel:

    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"
    

Transparent Data Encryption