Freigeben über


Rotieren einer kundenseitig verwalteten Schlüsseltabelle in SQL Managed Instance mit Azure Arc-Unterstützung

In diesem Artikel wird beschrieben, wie die kundenseitig verwaltete Schlüsseltabelle für eine von Azure Arc aktivierte SQL Managed Instance rotiert wird. Diese Schlüsseltabellen werden verwendet, um Active Directory-Anmeldungen für die verwaltete Instanz zu aktivieren.

Voraussetzungen:

Bevor Sie mit diesem Artikel fortfahren, müssen Sie über einen aktiven Verzeichnisconnector im Modus kundenseitig verwaltete Schlüsseltabelle und über eine von Azure Arc aktivierte SQL Managed Instance verfügen.

So rotieren Sie kundenseitig verwaltete Schlüsseltabellen in einer verwalteten Instanz

Die folgenden Schritte müssen befolgt werden, um die Schlüsseltabelle zu rotieren:

  1. Rufen Sie den kvno-Wert für die aktuelle Generation von Anmeldeinformationen für das SQL MI Active Directory-Konto ab.
  2. Erstellen Sie eine neue Schlüsseltabellendatei mit Einträgen für die aktuelle Generation von Anmeldeinformationen. Insbesondere sollte der kvno-Wert aus Schritt (1.) oben übereinstimmen.
  3. Aktualisieren Sie die neue Schlüsseltabellendatei mit neuen Einträgen für die neuen Anmeldeinformationen für das SQL MI Active Directory-Konto.
  4. Erstellen Sie ein Kubernetes-Geheimnis, das die neuen Schlüsseltabelleninhalte im selben Namespace wie die SQL MI enthält.
  5. Bearbeiten Sie die SQL MI-Spezifikation, um die Einstellung für das Active Directory-Schlüsseltabellengeheimnis auf dieses neue Geheimnis zu verweisen.
  6. Ändern Sie das Kennwort in der Active Directory-Domäne.

Wir haben die folgenden PowerShell- und Bash-Skripts bereitgestellt, welche die Schritte 1 bis 5 für Sie erledigen:

  • rotate-sqlmi-keytab.sh – Dieses Bash-Skript verwendet ktutil oder adutil (wenn das --use-adutil-Flag angegeben ist), um die neue Schlüsseltabelle für Sie zu generieren.
  • rotate-sqlmi-keytab.ps1 – Dieses PowerShell-Skript verwendet ktpass.exe, um die neue Schlüsseltabelle für Sie zu generieren.

Das Ausführen des obigen Skripts würde zur folgenden Schlüsseltabellendatei für den Benutzer arcsqlmi@CONTOSO.COM, das Geheimnis sqlmi-keytab-secret-kvno-2-3 und den Namespace test führen:

KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 02/16/2023 17:12:05 arcsqlmiuser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   2 02/16/2023 17:12:05 arcsqlmiuser@CONTOSO.COM (arcfour-hmac) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (arcfour-hmac) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (arcfour-hmac) 
   3 02/16/2023 17:13:41 arcsqlmiuser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   3 02/16/2023 17:13:41 arcsqlmiuser@CONTOSO.COM (arcfour-hmac) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (arcfour-hmac) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (arcfour-hmac)

Und die folgende updated-secret.yaml-Spezifikation:

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: sqlmi-keytab-secret-kvno-2-3
  namespace: test
data:
  keytab:
    <keytab-contents>

Ändern Sie schließlich das Kennwort für das arcsqlmiBenutzerkonto im Domänencontroller für die Active Directory-Domäne contoso.com:

  1. Öffnen Sie Server-Manager auf dem Domänencontroller für die Active Directory-Domäne contoso.com. Sie können entweder nach Server-Manager suchen oder die Option über das Startmenü öffnen.

  2. Wechseln Sie zu Tools>Active Directory-Benutzer und -Computer

    Screenshot von „Active Directory-Benutzer und -Computer“

  3. Wählen Sie den Benutzer aus, für den Sie das Kennwort ändern möchten. Klicken Sie mit der rechten Maustaste, um den Benutzer auszuwählen. Wählen Sie Kennwort zurücksetzen aus:

    Screenshot des Steuerelements zum Zurücksetzen des Kennworts für ein Active Directory-Benutzerkonto

  4. Geben Sie ein neues Kennwort ein, und wählen Sie OK.

Problembehandlung bei Fehlern nach der Rotation

Falls Fehler beim Versuch auftreten, die Active Directory-Authentifizierung nach Abschluss der Schlüsseltabellenrotation zu verwenden, sind die folgenden Dateien im arc-sqlmi-Container im SQL MI-Pod ein guter Ausgangspunkt, um die Untersuchung der Grundursache zu beginnen:

  • security.log-Datei gefunden unter /var/opt/mssql/log – Diese Protokolldatei enthält Interaktionen von SQL mit der Active Directory-Domäne.
  • errorlog-Datei gefunden unter /var/opt/mssql/log – Diese Protokolldatei enthält Protokolle von SQL Server, das auf dem Container ausgeführt wird.
  • mssql.keytab-Datei gefunden unter /var/run/secrets/managed/keytabs/mssql – Überprüfen Sie, ob diese Schlüsseltabellendatei die neu aktualisierten Einträge enthält und mit der Schlüsseltabellendatei übereinstimmt, die mit den oben angegebenen Skripten erstellt wurde. Die Schlüsseltabellendatei kann mit dem klist-Befehl gelesen werden, d. h. klist -k mssql.keytab -e

Überprüfen Sie außerdem nach dem Abrufen des Kerberos Ticket-Granting Ticket (TGT) mithilfe des kinit-Befehls, ob der kvno des SQL-Benutzers mit der höchsten kvno In der mssql.keytab-Datei im arc-sqlmi-Container übereinstimmt. Beispiel für den arcsqlmi@CONTOSO.COM-Benutzer:

  • Rufen Sie das Kerberos-TGT aus der Active Directory-Domäne ab, indem Sie kinit arcsqlmi@CONTOSO.COM ausführen. Dadurch wird ein Benutzer zur Eingabe des Kennworts für den arcsqlmi-Benutzer aufgefordert.
  • Sobald dies erfolgreich ist, kann die kvno durch Ausführen von kvno arcsqlmi@CONTOSO.COM abgefragt werden.

Wir können auch die Debuggenprotokollierung für den kinit-Befehl aktivieren, indem wir Folgendes ausführen: KRB5_TRACE=/dev/stdout kinit -V arcsqlmi@CONTOSO.COM. Dies erhöht die Ausführlichkeit und gibt die Protokolle beim Ausführen des Befehls an stdout aus.