Compartilhar via


Implantar a Instância Gerenciada de SQL integrada ao Active Directory habilitada pelo Azure Arc

Neste artigo saiba como implantar uma Instância Gerenciada de SQL do Azure habilitada para Azure Arc com a autenticação do Active Directory.

Pré-requisitos

Antes de começar a implantação da Instância Gerenciada de SQL, verifique se você tem estes pré-requisitos:

Requisitos do conector

O conector do Active Directory com um keytab gerenciado pelo cliente e o conector do Active Directory com um keytab gerenciado pelo sistema são diferentes modos de implantação que têm requisitos e etapas diferentes. Cada modo tem requisitos específicos durante a implantação. Selecione a guia do conector que você usa.

Para uma implantação do keytab gerenciado pelo cliente do Active Directory, você deve fornecer:

  • Criar uma conta de usuário do Active Directory para SQL
  • SPNs (Nomes de entidades de serviço) na conta de usuário
  • Registro DNS A (encaminhar) para o ponto de extremidade primário do SQL (e, opcionalmente, secundário)

Preparar para a implantação

Dependendo do modo de implantação, conclua as etapas a seguir para se preparar para implantar a Instância Gerenciada de SQL.

Para se preparar para a implantação no modo keytab gerenciado pelo cliente:

  1. Identificar um nome DNS para os pontos de extremidade de SQL: escolha nomes DNS exclusivos para os pontos de extremidade de SQL aos quais os clientes se conectarão de fora do cluster do Kubernetes.

    • Esses nomes DNS devem estar no domínio do Active Directory ou nos respectivos domínios descendentes.
    • Os exemplos neste artigo usam sqlmi-primary.contoso.local para o nome DNS primário e sqlmi-secondary.contoso.local para o nome DNS secundário.
  2. Identificar os números de porta para os pontos de extremidade de SQL: insira um número de porta para cada um dos pontos de extremidade de SQL.

    • Os números da porta precisam estar no intervalo aceitável de números de porta para o cluster do Kubernetes.
    • Os exemplos neste artigo usam 31433 para o número da porta primária e 31434 para o número da porta secundária.
  3. Criar uma conta do Active Directory para a instância gerenciada: escolha um nome para a conta do Active Directory para representar sua instância gerenciada.

    • O nome deve ser exclusivo no domínio do Active Directory.
    • Os exemplos neste artigo usam sqlmi-account para o nome da conta do Active Directory.

    Para criar a conta:

    1. No controlador de domínio, abra a ferramenta Usuários e computadores do Active Directory. Crie uma conta para representar a instância gerenciada.
    2. Insira uma senha de conta que esteja em conformidade com a política de senha de domínio do Active Directory. Você usará essa senha em algumas das etapas nas próximas seções.
    3. Verifique se a conta está habilitada. A conta não precisa de permissões especiais.
  4. Criar registros DNS para os pontos de extremidade de SQL nos servidores DNS do Active Directory: em um dos servidores DNS do Active Directory, crie registros A (registros de pesquisa de encaminhamento) para o nome DNS escolhido na etapa 1.

    • Os registros DNS devem apontar para o endereço IP no qual o ponto de extremidade de SQL escutará conexões provenientes de fora do cluster do Kubernetes.
    • Você não precisa criar registros de PTR (ponteiro de pesquisa inversa) em associação com registros A.
  5. Criar SPNs: para que o SQL possa aceitar a autenticação do Active Directory nos pontos de extremidade de SQL, você deve registrar dois SPNs na conta criada na etapa anterior. Dois SPNs devem ser registrados para o ponto de extremidade primário. Se você quiser a autenticação do Active Directory para o ponto de extremidade secundário, os SPNs também deverão ser registrados para o ponto de extremidade secundário.

    Para criar e registrar SPNs:

    1. Use o seguinte formato para criar os SPNs:

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. Em um dos controladores de domínio, execute os comandos a seguir para registrar os SPNs:

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

      Seus comandos podem ter a seguinte aparência:

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. Se você quiser a autenticação do Active Directory no ponto de extremidade secundário, execute os mesmos comandos para adicionar SPNs ao ponto de extremidade secundário:

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

      Seus comandos podem ter a seguinte aparência:

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. Gerar um arquivo keytab que tenha entradas para a conta e os SPNs: para que o SQL possa ser autenticado no Active Directory e aceitar a autenticação de usuários do Active Directory, forneça um arquivo keytab usando um segredo do Kubernetes.

    • O arquivo keytab contém entradas criptografadas para a conta do Active Directory que é gerada para a instância gerenciada e os SPNs.

    • O SQL Server usa esse arquivo como sua credencial no Active Directory.

    • Você pode escolher entre várias ferramentas para gerar um arquivo keytab:

      • adutil: disponível para Linux (consulte Introdução ao adutil)
      • ktutil: disponível no Linux
      • ktpass: disponível no Windows
      • Scripts personalizados

    Para gerar o arquivo keytab especificamente para a instância gerenciada:

    1. Use um destes scripts personalizados:

      Esse script aceita vários parâmetros e gera um arquivo keytab e um arquivo de especificação YAML para o segredo do Kubernetes que contém o keytab.

    2. No script, substitua os valores de parâmetro por valores para a implantação da instância gerenciada.

      Para os parâmetros de entrada, use os seguintes valores:

      • --realm: o domínio do Active Directory em maiúsculas. Exemplo: CONTOSO.LOCAL
      • --account: a conta do Active Directory em que os SPNs estão registrados. Exemplo: sqlmi-account
      • --port: o número da porta do ponto de extremidade de SQL primário. Exemplo: 31433
      • --dns-name: o nome DNS para o ponto de extremidade de SQL primário.
      • --keytab-file: o caminho para o arquivo keytab.
      • --secret-name: o nome do segredo do keytab para o qual gerar uma especificação.
      • --secret-namespace: o namespace do Kubernetes que contém o segredo do keytab.
      • --secondary-port: o número da porta do ponto de extremidade de SQL secundário (opcional). Exemplo: 31434
      • --secondary-dns-name: o nome DNS para o ponto de extremidade de SQL secundário (opcional).

      Escolha um nome para o segredo do Kubernetes que hospeda o keytab. Use o namespace em que a instância gerenciada é implantada.

    3. Execute o comando a seguir para criar um 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>
      

      Seu comando pode ter a seguinte aparência:

      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. Execute o comando a seguir para verificar se o keytab está correto:

      klist -kte <keytab file>
      
  7. Implantar o segredo do Kubernetes para o keytab: use o arquivo de especificação de segredo do Kubernetes criado na etapa anterior para implantar o segredo.

    O arquivo de especificação é semelhante a este exemplo:

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

    Para implantar o segredo do Kubernetes, execute este comando:

    kubectl apply -f <file>
    

    Por exemplo, o comando pode ter esta aparência:

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Definir propriedades para a autenticação do Active Directory

Para implantar a Instância Gerenciada de SQL habilitada pelo Azure Arc para autenticação do Active Directory do Azure Arc, atualize seu arquivo de especificação de implantação para fazer referência à instância do conector do Active Directory a ser usada. Uma referência ao conector para Active Directory no arquivo de especificação do SQL configura automaticamente o SQL para a autenticação do Active Directory.

Para dar suporte à autenticação do Active Directory no SQL no modo keytab gerenciado pelo cliente, defina as propriedades a seguir no arquivo de especificação de implantação. Algumas propriedades são necessárias e outras são opcionais.

Obrigatório

  • spec.security.activeDirectory.connector.name: o nome do recurso personalizado já existente do conector para Active Directory no qual se deve ingressar para a autenticação do Active Directory. Se você inserir um valor para essa propriedade, a autenticação do Active Directory será implementada.
  • spec.security.activeDirectory.accountName: O nome da conta do Active Directory para essa instância gerenciada.
  • spec.security.activeDirectory.keytabSecret: O nome do segredo do Kubernetes que hospeda o arquivo keytab pré-criado para os usuários. Esse segredo precisa estar no mesmo namespace que a instância gerenciada. Esse parâmetro é obrigatório somente para a implantação do Active Directory no modo de keytab gerenciado pelo cliente.
  • spec.services.primary.dnsName: insira um nome DNS para o ponto de extremidade de SQL primário.
  • spec.services.primary.port: insira um número da porta para o ponto de extremidade de SQL primário.

Opcional

  • spec.security.activeDirectory.connector.namespace: o namespace do Kubernetes do conector para Active Directory já existente no qual se deve ingressar para a autenticação do Active Directory. Se você não inserir um valor, o namespace do SQL será usado.
  • spec.services.readableSecondaries.dnsName: insira um nome DNS para o ponto de extremidade de SQL secundário.
  • spec.services.readableSecondaries.port: insira um número da porta para o ponto de extremidade de SQL secundário.

Preparar o arquivo de especificação de implantação

Em seguida, prepare um arquivo de especificação YAML para implantar a Instância Gerenciada de SQL. Para o modo usado, insira os valores de implantação no arquivo de especificação.

Observação

No arquivo de especificação para ambos os modos, o valor admin-login-secret no exemplo YAML fornece autenticação básica. Você pode usar o valor do parâmetro para fazer logon na instância gerenciada e, em seguida, criar logons para usuários e grupos do Active Directory. Para obter mais informações, confira Conectar-se à Instância Gerenciada de SQL integrada ao Active Directory habilitada pelo Azure Arc.

O exemplo a seguir mostra um arquivo de especificação para o modo keytab gerenciado pelo cliente:

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

Implantar a instância gerenciada

Para o modo keytab gerenciado pelo cliente e o modo keytab gerenciado pelo sistema, implante a instância gerenciada usando o arquivo YAML de especificação preparado:

  1. Salve o arquivo. O exemplo na próxima etapa usa sqlmi.yaml para o nome do arquivo de especificação, mas você pode escolher qualquer nome de arquivo.

  2. Execute o seguinte comando para implantar a instância usando a especificação:

    kubectl apply -f <specification file name>
    

    Seu comando pode ter a seguinte aparência:

    kubectl apply -f sqlmi.yaml