Partager via


Déployer une instance SQL Managed Instance intégrée à Active Directory activée par Azure Arc

Dans cet article, vous apprenez à déployer Azure SQL Managed Instance avec Azure Arc avec l’authentification Active Directory.

Prérequis

Avant de commencer votre déploiement SQL Managed Instance, vérifiez que vous avez ces prérequis :

Exigences du connecteur

Le connecteur Active Directory avec keytab géré par le client et le connecteur Active Directory avec keytab géré par le système sont des modes de déploiement différents qui ont des exigences et des étapes différentes. Chaque mode a des exigences spécifiques pendant le déploiement. Sélectionnez l’onglet correspondant au connecteur que vous utilisez.

Pour un déploiement Active Directory avec keytab géré par le client, vous devez fournir :

  • Un compte d’utilisateur Active Directory pour SQL
  • Les noms de principal du service (SPN) sous le compte d’utilisateur
  • L’enregistrement DNS A (transfert) pour le point de terminaison principal de SQL (et éventuellement un point de terminaison secondaire)

Préparer le déploiement

En fonction de votre mode de déploiement, effectuez les étapes suivantes pour préparer le déploiement de SQL Managed Instance.

Pour préparer le déploiement en mode keytab géré par le client :

  1. Identifier un nom DNS pour les points de terminaison SQL : choisissez des noms DNS uniques pour les points de terminaison SQL auxquels les clients doivent se connecter en dehors du cluster Kubernetes.

    • Ces noms DNS doivent se trouver dans le domaine Active Directory ou dans ses domaines descendants.
    • Les exemples de cet article utilisent sqlmi-primary.contoso.local pour le nom DNS principal et sqlmi-secondary.contoso.local pour le nom DNS secondaire.
  2. Identifier les numéros de port des points de terminaison SQL : entrez un numéro de port pour chacun des points de terminaison SQL.

    • Les numéros de port doivent se trouver dans la plage de numéros de port acceptable pour votre cluster Kubernetes.
    • Les exemples de cet article utilisent 31433 pour le numéro de port principal et 31434 pour le numéro de port secondaire.
  3. Créer un compte Active Directory pour l’instance managée : choisissez un nom pour le compte Active Directory afin de représenter votre instance managée.

    • Le nom doit être unique dans le domaine Active Directory.
    • Les exemples de cet article utilisent sqlmi-account pour le nom du compte Active Directory.

    Pour créer le compte :

    1. Sur le contrôleur de domaine, ouvrez l’outil Utilisateurs et ordinateurs Active Directory. Créez un compte pour représenter l’instance managée.
    2. Entrez un mot de passe de compte conforme à la stratégie de mot de passe de domaine Active Directory. Vous utilisez ce mot de passe dans certaines étapes des sections suivantes.
    3. Assurez-vous que le compte est activé. Le compte n’a pas besoin d’autorisations spéciales.
  4. Créer des enregistrements DNS pour les points de terminaison SQL dans les serveurs DNS Active Directory : dans l’un des serveurs DNS Active Directory, créez des enregistrements A (enregistrements de recherche directe) pour le nom DNS que vous avez choisi à l’étape 1.

    • Les enregistrements DNS doivent pointer vers l’adresse IP sur laquelle le point de terminaison SQL écoute les connexions provenant de l’extérieur du cluster Kubernetes.
    • Vous n’avez pas besoin de créer des enregistrements PTR (pointeur de recherche inversée) avec les enregistrements A.
  5. Créer des SPN : pour que SQL puisse accepter l’authentification Active Directory sur les points de terminaison SQL, vous devez inscrire deux SPN dans le compte que vous avez créé à l’étape précédente. Deux SPN doivent être inscrits pour le point de terminaison principal. Si vous voulez l’authentification Active Directory sur le point de terminaison secondaire, les SPN doivent également être inscrits pour le point de terminaison secondaire.

    Pour créer et enregistrer des SPN :

    1. Utilisez le format suivant pour créer les SPN :

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. Sur l’un des contrôleurs de domaine, exécutez les commandes suivantes pour inscrire les SPN :

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      Vos commandes peuvent ressembler à l’exemple suivant :

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. Si vous voulez l’authentification Active Directory sur le point de terminaison secondaire, exécutez les mêmes commandes pour ajouter des SPN pour le point de terminaison secondaire :

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      Vos commandes peuvent ressembler à l’exemple suivant :

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. Générez un fichier keytab avec des entrées pour le compte et les SPN : pour que SQL puisse s’authentifier sur Active Directory et accepter l’authentification des utilisateurs Active Directory, fournissez un fichier keytab en utilisant un secret Kubernetes.

    • Le fichier keytab contient des entrées chiffrées pour le compte Active Directory qui a été généré pour l’instance managée et les SPN.

    • SQL Server utilise ce fichier comme informations d’identification sur Active Directory.

    • Vous pouvez choisir parmi plusieurs outils pour générer un fichier keytab :

      • adutil : disponible pour Linux (voir Présentation d’adutil)
      • ktutil : disponible sur Linux
      • ktpass : disponible sur Windows
      • Scripts personnalisés

    Pour générer le fichier keytab spécifiquement pour l’instance managée :

    1. Utilisez l’un de ces scripts personnalisés :

      Ce script accepte plusieurs paramètres, et génère un fichier keytab et un fichier de spécification YAML pour le secret Kubernetes contenant le keytab.

    2. Dans votre script, remplacez les valeurs de paramètre par les valeurs de votre déploiement d’instance managée.

      Pour les paramètres d’entrée, utilisez les valeurs suivantes :

      • --realm : domaine Active Directory en majuscules. Exemple : CONTOSO.LOCAL
      • --account : compte Active Directory où sont inscrits les SPN. Exemple : sqlmi-account
      • --port : numéro de port du point de terminaison SQL principal. Exemple : 31433
      • --dns-name : nom DNS du point de terminaison SQL principal.
      • --keytab-file : chemin du fichier keytab.
      • --secret-name : nom du secret keytab pour lequel générer une spécification.
      • --secret-namespace : espace de noms Kubernetes qui contient le secret keytab.
      • --secondary-port : numéro de port du point de terminaison SQL secondaire (facultatif). Exemple : 31434
      • --secondary-dns-name : nom DNS du point de terminaison SQL secondaire (facultatif).

      Choisissez un nom pour le secret Kubernetes hébergeant le keytab. Utilisez l’espace de noms où l’instance managée est déployée.

    3. Exécutez la commande suivante pour créer un keytab :

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm <Active Directory domain in uppercase> --account <Active Directory account name> --port <endpoint port> --dns-name <endpoint DNS name> --keytab-file <keytab file name/path> --secret-name <keytab secret name> --secret-namespace <keytab secret namespace>
      

      Votre commande peut ressembler à l’exemple suivant :

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm CONTOSO.LOCAL --account sqlmi-account --port 31433 --dns-name sqlmi.contoso.local --keytab-file sqlmi.keytab --secret-name sqlmi-keytab-secret --secret-namespace sqlmi-ns
      
    4. Exécutez la commande suivante pour vérifier que le keytab est correct :

      klist -kte <keytab file>
      
  7. Déployer le secret Kubernetes pour le keytab : utilisez le fichier de spécification de secret Kubernetes que vous avez créé à l’étape précédente pour déployer le secret.

    Le fichier de spécification ressemble à cet exemple :

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: <secret name>
      namespace: <secret namespace>
    data:
      keytab: <keytab content in Base64>
    

    Pour déployer le secret Kubernetes, exécutez cette commande :

    kubectl apply -f <file>
    

    Votre commande peut ressembler à cet exemple :

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Définir les propriétés pour l’authentification Active Directory

Afin de déployer une instance SQL Managed Instance doté d’Azure Arc pour l’authentification Azure Arc Active Directory, mettez à jour le fichier de spécifications de votre déploiement pour référencer l’instance de connecteur Active Directory à utiliser. Le référencement du connecteur Active Directory dans le fichier de spécification SQL configure automatiquement SQL pour l’authentification Active Directory.

Pour prendre en charge l’authentification Active Directory sur SQL en mode keytab géré par le client, définissez les propriétés suivantes dans votre fichier de spécification de déploiement. Certaines propriétés sont obligatoires, d’autres facultatives.

Requis

  • spec.security.activeDirectory.connector.name : nom de la ressource personnalisée de connecteur Active Directory préexistante à joindre pour l’authentification Active Directory. Si vous entrez une valeur pour cette propriété, l’authentification Active Directory est implémentée.
  • spec.security.activeDirectory.accountName : nom du compte Active Directory pour l’instance managée.
  • spec.security.activeDirectory.keytabSecret : nom du secret Kubernetes qui héberge le fichier keytab précréé pour les utilisateurs. Ce secret doit se trouver dans le même espace de noms que l’instance managée. Ce paramètre est obligatoire uniquement pour le déploiement Active Directory en mode keytab géré par le client.
  • spec.services.primary.dnsName : entrez un nom DNS pour le point de terminaison SQL principal.
  • spec.services.primary.port : entrez un numéro de port pour le point de terminaison SQL principal.

Facultatif

  • spec.security.activeDirectory.connector.namespace : espace de noms Kubernetes du connecteur Active Directory préexistant à joindre pour l’authentification Active Directory. Si vous n’entrez pas de valeur, l’espace de noms SQL est utilisé.
  • spec.services.readableSecondaries.dnsName : entrez un nom DNS pour le point de terminaison SQL secondaire.
  • spec.services.readableSecondaries.port : entrez un numéro de port pour le point de terminaison SQL secondaire.

Préparer votre fichier de spécification de déploiement

Ensuite, préparez un fichier de spécification YAML pour déployer SQL Managed Instance. Pour le mode que vous utilisez, entrez vos valeurs de déploiement dans le fichier de spécification.

Remarque

Dans le fichier de spécification pour les deux modes, la valeur admin-login-secret de l’exemple YAML fournit l’authentification de base. Vous pouvez utiliser la valeur du paramètre pour vous connecter à l’instance managée, puis créer des connexions pour les utilisateurs et les groupes Active Directory. Pour plus d’informations, consultez Se connecter à SQL Managed Instance doté d’Azure Arc intégré à Active Directory.

L’exemple suivant montre un fichier de spécification pour le mode keytab géré par le client :

apiVersion: v1
data:
  password: <your Base64-encoded password>
  username: <your Base64-encoded username>
kind: Secret
metadata:
  name: admin-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v3
kind: SqlManagedInstance
metadata:
  name: <name>
  namespace: <namespace>
spec:
  backup:
    retentionPeriodInDays: 7
  dev: false
  tier: GeneralPurpose
  forceHA: "true"
  licenseType: LicenseIncluded
  replicas: 1
  security:
    adminLoginSecret: admin-login-secret
    activeDirectory:
      connector:
        name: <Active Directory connector name>
        namespace: <Active Directory connector namespace>
      accountName: <Active Directory account name>
      keytabSecret: <keytab secret name>
  services:
    primary:
      type: LoadBalancer
      dnsName: <primary endpoint DNS name>
      port: <primary endpoint port number>
    readableSecondaries:
      type: LoadBalancer
      dnsName: <secondary endpoint DNS name>
      port: <secondary endpoint port number>
  storage:
    data:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi
    logs:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi

Déployer l’instance managée

Pour les modes keytab géré par le client et keytab géré par le système, déployez l’instance managée en utilisant le fichier YAML de spécification préparé :

  1. Enregistrez le fichier. L’exemple de l’étape suivante utilise sqlmi.yaml pour le nom de fichier de spécification, mais vous pouvez choisir n’importe quel nom de fichier.

  2. Exécutez la commande suivante pour déployer l’instance en utilisant la spécification :

    kubectl apply -f <specification file name>
    

    Votre commande peut ressembler à l’exemple suivant :

    kubectl apply -f sqlmi.yaml