Udostępnij za pośrednictwem


Wdrażanie zintegrowanego z usługą Active Directory wystąpienia zarządzanego SQL włączonego przez usługę Azure Arc

Z tego artykułu dowiesz się, jak wdrożyć usługę Azure SQL Managed Instance z obsługą usługi Azure Arc przy użyciu uwierzytelniania usługi Active Directory.

Wymagania wstępne

Przed rozpoczęciem wdrażania usługi SQL Managed Instance upewnij się, że masz następujące wymagania wstępne:

Wymagania dotyczące łącznika

Łącznik usługi Active Directory zarządzany przez klienta i łącznik usługi Active Directory zarządzany przez system to różne tryby wdrażania, które mają różne wymagania i kroki. Każdy tryb ma określone wymagania podczas wdrażania. Wybierz kartę dla używanego łącznika.

W przypadku wdrożenia tab kluczy zarządzanych przez klienta usługi Active Directory należy podać następujące elementy:

  • Konto użytkownika usługi Active Directory dla bazy danych SQL
  • Nazwy główne usługi (SPN) na koncie użytkownika
  • Rekord DNS A (do przodu) dla podstawowego punktu końcowego SQL (i opcjonalnie pomocniczy punkt końcowy)

Przygotowanie do wdrożenia

W zależności od trybu wdrażania wykonaj następujące kroki, aby przygotować się do wdrożenia usługi SQL Managed Instance.

Aby przygotować się do wdrożenia w trybie tab kluczy zarządzanych przez klienta:

  1. Zidentyfikuj nazwę DNS dla punktów końcowych SQL: wybierz unikatowe nazwy DNS dla punktów końcowych SQL, z którymi klienci będą łączyć się spoza klastra Kubernetes.

    • Nazwy DNS powinny znajdować się w domenie usługi Active Directory lub w jej domenach potomnych.
    • Przykłady w tym artykule są używane sqlmi-primary.contoso.local dla podstawowej nazwy DNS i sqlmi-secondary.contoso.local pomocniczej nazwy DNS.
  2. Zidentyfikuj numery portów dla punktów końcowych SQL: wprowadź numer portu dla każdego z punktów końcowych SQL.

    • Numery portów muszą być w dopuszczalnym zakresie numerów portów dla klastra Kubernetes.
    • Przykłady w tym artykule są używane 31433 dla numeru portu podstawowego i 31434 numeru portu pomocniczego.
  3. Utwórz konto usługi Active Directory dla wystąpienia zarządzanego: wybierz nazwę konta usługi Active Directory do reprezentowania wystąpienia zarządzanego.

    • Nazwa musi być unikatowa w domenie usługi Active Directory.
    • Przykłady w tym artykule są używane sqlmi-account dla nazwy konta usługi Active Directory.

    Aby utworzyć konto:

    1. Na kontrolerze domeny otwórz narzędzie Użytkownicy i komputery usługi Active Directory. Utwórz konto reprezentujące wystąpienie zarządzane.
    2. Wprowadź hasło konta zgodne z zasadami haseł domeny usługi Active Directory. To hasło będzie używane w niektórych krokach w następnych sekcjach.
    3. Upewnij się, że konto jest włączone. Konto nie wymaga żadnych specjalnych uprawnień.
  4. Utwórz rekordy DNS dla punktów końcowych SQL na serwerach DNS usługi Active Directory: w jednym z serwerów DNS usługi Active Directory utwórz rekordy (rekordy wyszukiwania do przodu) dla nazwy DNS wybranej w kroku 1.

    • Rekordy DNS powinny wskazywać adres IP, na który punkt końcowy SQL będzie nasłuchiwać połączeń spoza klastra Kubernetes.
    • Nie musisz tworzyć rekordów wskaźnika wyszukiwania wstecznego (PTR) w skojarzeniu z rekordami A.
  5. Tworzenie nazw SPN: aby program SQL mógł zaakceptować uwierzytelnianie usługi Active Directory względem punktów końcowych SQL, należy zarejestrować dwie nazwy SPN na koncie utworzonym w poprzednim kroku. Dla podstawowego punktu końcowego należy zarejestrować dwie nazwy SPN. Jeśli chcesz uwierzytelniania usługi Active Directory dla pomocniczego punktu końcowego, nazwy SPN muszą być również zarejestrowane dla pomocniczego punktu końcowego.

    Aby utworzyć i zarejestrować nazwy SPN:

    1. Użyj następującego formatu, aby utworzyć nazwy SPN:

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. Na jednym z kontrolerów domeny uruchom następujące polecenia, aby zarejestrować nazwy SPN:

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

      Polecenia mogą wyglądać podobnie do następującego przykładu:

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. Jeśli chcesz uwierzytelniania usługi Active Directory w pomocniczym punkcie końcowym, uruchom te same polecenia, aby dodać nazwy SPN dla pomocniczego punktu końcowego:

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

      Polecenia mogą wyglądać podobnie do następującego przykładu:

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. Wygeneruj plik karty kluczy zawierający wpisy dla konta i nazw SPN: aby program SQL mógł uwierzytelnić się w usłudze Active Directory i zaakceptować uwierzytelnianie od użytkowników usługi Active Directory, podaj plik karty kluczy przy użyciu wpisu tajnego kubernetes.

    • Plik keytab zawiera zaszyfrowane wpisy dla konta usługi Active Directory wygenerowanego dla wystąpienia zarządzanego i nazw SPN.

    • Program SQL Server używa tego pliku jako poświadczenia do usługi Active Directory.

    • Możesz wybrać spośród wielu narzędzi, aby wygenerować plik keytab:

      • adutil: Dostępne dla systemu Linux (zobacz Wprowadzenie do narzędzia adutil)
      • ktutil: dostępne w systemie Linux
      • ktpass: dostępne w systemie Windows
      • Skrypty niestandardowe

    Aby wygenerować plik keytab specjalnie dla wystąpienia zarządzanego:

    1. Użyj jednego z tych skryptów niestandardowych:

      Skrypty akceptują kilka parametrów i generują plik keytab oraz plik specyfikacji YAML dla wpisu tajnego kubernetes zawierającego kartę klucza.

    2. W skrypcie zastąp wartości parametrów wartościami wdrożenia wystąpienia zarządzanego.

      W przypadku parametrów wejściowych użyj następujących wartości:

      • --realm: domena usługi Active Directory w wielkiej litery. Przykład: CONTOSO.LOCAL
      • --account: konto usługi Active Directory, na którym są zarejestrowane nazwy SPN. Przykład: sqlmi-account
      • --port: podstawowy numer portu punktu końcowego SQL. Przykład: 31433
      • --dns-name: nazwa DNS podstawowego punktu końcowego SQL.
      • --keytab-file: ścieżka do pliku keytab.
      • --secret-name: nazwa wpisu tajnego tab klucza w celu wygenerowania specyfikacji elementu .
      • --secret-namespace: Przestrzeń nazw kubernetes zawierająca klucz tajny.
      • --secondary-port: pomocniczy numer portu punktu końcowego SQL (opcjonalnie). Przykład: 31434
      • --secondary-dns-name: nazwa DNS pomocniczego punktu końcowego SQL (opcjonalnie).

      Wybierz nazwę wpisu tajnego kubernetes, który hostuje kartę klucza. Użyj przestrzeni nazw, w której jest wdrażane wystąpienie zarządzane.

    3. Uruchom następujące polecenie, aby utworzyć kartę klucza:

      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>
      

      Polecenie może wyglądać podobnie do następującego przykładu:

      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. Uruchom następujące polecenie, aby sprawdzić, czy tabułka klucza jest poprawna:

      klist -kte <keytab file>
      
  7. Wdróż wpis tajny kubernetes dla tabu klucza: użyj pliku specyfikacji wpisu tajnego Kubernetes utworzonego w poprzednim kroku, aby wdrożyć wpis tajny.

    Plik specyfikacji wygląda podobnie do tego przykładu:

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

    Aby wdrożyć wpis tajny platformy Kubernetes, uruchom następujące polecenie:

    kubectl apply -f <file>
    

    Polecenie może wyglądać następująco:

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Ustawianie właściwości uwierzytelniania usługi Active Directory

Aby wdrożyć wystąpienie zarządzane SQL włączone przez usługę Azure Arc na potrzeby uwierzytelniania usługi Azure Arc Active Directory, zaktualizuj plik specyfikacji wdrożenia, aby odwołać się do wystąpienia łącznika usługi Active Directory do użycia. Odwoływanie się do łącznika usługi Active Directory w pliku specyfikacji SQL automatycznie konfiguruje program SQL na potrzeby uwierzytelniania usługi Active Directory.

Aby obsługiwać uwierzytelnianie usługi Active Directory w usłudze SQL w trybie karty kluczy zarządzanych przez klienta, ustaw następujące właściwości w pliku specyfikacji wdrożenia. Niektóre właściwości są wymagane, a niektóre są opcjonalne.

Wymagania

  • spec.security.activeDirectory.connector.name: nazwa istniejącego wcześniej zasobu niestandardowego łącznika usługi Active Directory do przyłączenia do uwierzytelniania usługi Active Directory. Jeśli wprowadzisz wartość dla tej właściwości, uwierzytelnianie usługi Active Directory zostanie zaimplementowane.
  • spec.security.activeDirectory.accountName: nazwa konta usługi Active Directory dla wystąpienia zarządzanego.
  • spec.security.activeDirectory.keytabSecret: nazwa wpisu tajnego kubernetes, który hostuje wstępnie utworzony plik tab klucza dla użytkowników. Ten wpis tajny musi znajdować się w tej samej przestrzeni nazw co wystąpienie zarządzane. Ten parametr jest wymagany tylko dla wdrożenia usługi Active Directory w trybie tab klucza zarządzanego przez klienta.
  • spec.services.primary.dnsName: wprowadź nazwę DNS podstawowego punktu końcowego SQL.
  • spec.services.primary.port: wprowadź numer portu podstawowego punktu końcowego SQL.

Opcjonalnie

  • spec.security.activeDirectory.connector.namespace: Przestrzeń nazw kubernetes istniejącego łącznika usługi Active Directory do przyłączenia do uwierzytelniania usługi Active Directory. Jeśli nie wprowadzisz wartości, używana jest przestrzeń nazw SQL.
  • spec.services.readableSecondaries.dnsName: wprowadź nazwę DNS pomocniczego punktu końcowego SQL.
  • spec.services.readableSecondaries.port: wprowadź numer portu pomocniczego punktu końcowego SQL.

Przygotowywanie pliku specyfikacji wdrożenia

Następnie przygotuj plik specyfikacji YAML do wdrożenia usługi SQL Managed Instance. W przypadku używanego trybu wprowadź wartości wdrożenia w pliku specyfikacji.

Uwaga

W pliku specyfikacji dla obu trybów admin-login-secret wartość w przykładzie YAML zapewnia uwierzytelnianie podstawowe. Możesz użyć wartości parametru, aby zalogować się do wystąpienia zarządzanego, a następnie utworzyć identyfikatory logowania dla użytkowników i grup usługi Active Directory. Aby uzyskać więcej informacji, zobacz Connect to Active Directory-integrated SQL Managed Instance enabled by Azure Arc (Nawiązywanie połączenia z zintegrowaną z usługą Active Directory usługą SQL Managed Instance włączoną przez usługę Azure Arc).

W poniższym przykładzie przedstawiono plik specyfikacji trybu tab zarządzania kluczami zarządzanymi przez klienta:

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

Wdrażanie wystąpienia zarządzanego

W przypadku trybu tab klucza zarządzanego przez klienta i trybu tab zarządzanego przez system wdróż wystąpienie zarządzane przy użyciu przygotowanego pliku YAML specyfikacji:

  1. Zapisz plik. W przykładzie w następnym kroku użyto pliku sqlmi.yaml jako nazwy pliku specyfikacji, ale możesz wybrać dowolną nazwę pliku.

  2. Uruchom następujące polecenie, aby wdrożyć wystąpienie przy użyciu specyfikacji:

    kubectl apply -f <specification file name>
    

    Polecenie może wyglądać podobnie do następującego przykładu:

    kubectl apply -f sqlmi.yaml