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:
- Um domínio do Active Directory
- Um controlador de dados do Azure Arc implantado
- Um conector do Active Directory implantado com um keytab gerenciado pelo cliente ou um keytab gerenciado pelo sistema
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:
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 esqlmi-secondary.contoso.local
para o nome DNS secundário.
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 e31434
para o número da porta secundária.
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:
- No controlador de domínio, abra a ferramenta Usuários e computadores do Active Directory. Crie uma conta para representar a instância gerenciada.
- 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.
- Verifique se a conta está habilitada. A conta não precisa de permissões especiais.
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.
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:
Use o seguinte formato para criar os SPNs:
MSSQLSvc/<DNS name> MSSQLSvc/<DNS name>:<port>
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
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
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 Linuxktpass
: disponível no Windows- Scripts personalizados
Para gerar o arquivo keytab especificamente para a instância gerenciada:
Use um destes scripts personalizados:
- Linux: create-sql-keytab.sh
- Windows Server: create-sql-keytab.ps1
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.
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.
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
Execute o comando a seguir para verificar se o keytab está correto:
klist -kte <keytab file>
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:
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.
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