Configurando autenticação no RDS SQL Server com usuários do AD em EC2
Tags: sqlserver, activedirectory, kms, rds
Published: 2024-01-18 13:09:55

Este tutorial aborda a configuração da autenticação do SQL Server no Amazon RDS usando usuários do Active Directory (AD) associados a instâncias EC2. A autenticação baseada em AD proporciona uma camada adicional de segurança e gerenciamento de identidade para seus bancos de dados SQL Server.

---

### Pré-requisitos:
- OS: Windows Server 2012/2016/2019
- Possuir um RDS SQL Server
- Possuir um AD em EC2
- Executar 3 etapas abaixo deste link: https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/USER_SQLServer_SelfManagedActiveDirectory.html#USER_SQLServer_SelfManagedActiveDirectory.SettingUp
  - Executar Etapa 1: Criar uma unidade organizacional no AD
  - Executar Etapa 2: Criar um usuário de domínio em seu AD
  - Executar Etapa 3: Delegar controle ao usuário de AD

---

### Passo 1: Configurar ambiente

- Liberar as seguintes portas na entrada do security group da EC2 com AD com destino ao SG do RDS:
  - **TCP and UDP** Port 53 (DNS)
  - **TCP and UDP** Port 88 (Kerberos)
  - **TCP and UDP** Port 135 (Microsoft Remote Procedure Call)
  - **TCP and UDP** Port 389 (Lightweight Directory Access Protocol)
  - **TCP and UDP** Port 445 (Microsoft Directory Services)
  - **TCP and UDP** Port 464 (Alteração de senhas no sistema Kerberos)
  - TCP Port 636 (Versão segura do LDAP que utiliza criptografia SSL)
  - TCP Port 3268 (Consultas de catálogo global no LDAP)
  - TCP Port 3269 (Consultas seguras de catálogo global no LDAP usando SSL)
  - TCP Port 9389 (ADWS - Serviço da web para comunicação com o Active Directory)
  - TCP Ports 49152-65535 (Dynamic and-or Private Ports)
  - UDP Port 123 (NTP - Network Time Protocol)
  - UDP Port 138 (Serviço de mensagens datagrama em redes NetBIOS)

<br>
**Exemplo:**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhcowrn3684cu1emre4m.png)



---

### Passo 2: Teste no Active Directory (AD)

- Para que a VPC responda ao domínio do AD no IP privado, configure um *DHCP Option sets* e anexe-o à sua VPC. Para a configuração, insira primeiro o IP do AD, em seguida, AmazonProvidedDNS. **Veja o exemplo abaixo:**



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0zbd6nmnujbam7o96bqm.png)



- Vá em VPC's ➜ Marque sua VPC ➜ Edit VPC Settings.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/odb1xrcnbukpprukmved.png)


- Altere o DHCP option set para o recém configurado:
  - Em DNS settings, deixe marcado o **Enable DNS resolution** e **Enable DNS hostnames** e clique em Save.



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mgpwi7gmzbdlvijq0p98.png)



- Agora em Systems Manager ➜ Run Command ➜ Botão *Run a Command* em laranja ➜ Escolha o Template ➜ AWS-RunPowerShellScript ➜ e realize o teste com o seguinte comando:

  ```powershell
  nltest /dsgetdc:dominio.intra /force
```


> 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/spxem6yrcf19v3zymayc.png)



- Selecione o Target e clique em *View output* para ver o resultado:

> ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1i151q2oe775vf1k318.png)

<br>
> ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gv80om37elg81j2dpbxm.png)

---

### Passo 3: Configurar KMS e Secrets

- Configurar KMS e Secrets conforme o tutorial: [Amazon RDS - Configuração do SQL Server com Active Directory](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServer_SelfManagedActiveDirectory.html#USER_SQLServer_SelfManagedActiveDirectory.SettingUp)
  - Executar Etapa 4: Criar uma chave do AWS KMS.
  - Executar Etapa 5: Criar um segredo da AWS

---

### Passo 4: Configurar autenticação no SQL Server e AD

- Selecione o banco de dados SQL Server ➜ *Modify*.
- Em Microsoft SQL Server Windows Authentication, habilite a checkbox *Enable Microsoft SQL Server Windows authentication*, escolha *Self-managed Microsoft Active Directory* e **preencha conforme o exemplo**:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jt9ve108hvy3800jmuaf.png)

- **Observações:**
  - Neste caso, a Unidade Organizacional (OU) criada para autenticação no RDS se chama 'AUTH', o nome do domínio utilizado para este tutorial foi 'dominio.intra', e repeti os dois IPs privados do AD.
  - Neste caso, como o 'dominio.intra' contém um '.', precisamos adicioná-lo na linguagem Distinguished Name (DN), conforme o exemplo acima. **Exemplos de DN:**

```bash
OU=TI,DC=departamento,DC=empresa,DC=com   # Domínio departamento.empresa.com
OU=Vendas,DC=empresa,DC=com   # Domínio empresa.com
```

> ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1dklaz52jvssxrzmumay.png)


---

### Passo 5: Configurar autenticação no SQL Server e AD

- Voltar ao AD e criar um grupo global de segurança, chamado "admindbas" (ou outro de preferência) DENTRO da delegação criada. **Veja o exemplo abaixo:**

> 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vkiojyuec5trlimmwmli.png)





![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9aka22scp0agqthpj3iw.png)




- Neste grupo global criado, adicione como *Member Of* o grupo **RDS Remote Access Servers** e clique em OK.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vkcytskbpkxb54p4u88a.png)




- **Observação:** Isso permitirá que todos os os usuários que tem a permissão do grupo **RDS Remote Access Servers**, consigam fazer login no RDS SQL Server com Windows Authentication. 

---

### Passo 6: Habilitar o login no RDS SQL Server para os usuários do grupo 'admindbas'.

- Efetuar login no SQL Server com o usuário administrador do RDS para executar os seguintes comandos SQL:

  **Observações:** 
    - Em [DOMINIO\admindbas], utilizar o Distinguished Name (DN), inserindo apenas o primeiro nome em maiúsculo (ex.: DOMINIO de dominio.intra) e o estou indicando o grupo global 'admindbas' para ter acesso ao banco de dados.
    - Você também pode criar logins para usuários específicos, no lugar de informar o grupo "admindbas", você informa o usuário que deseja [DOMINIO\nome.sobrenome].

  ```sql
  USE [master]
  GO
  CREATE LOGIN [DOMINIO\admindbas] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
  GO

  USE [master]
  GO
  GRANT ALTER ANY CONNECTION TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT ALTER ANY LINKED SERVER TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT ALTER ANY LOGIN TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT ALTER SERVER STATE TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT ALTER TRACE TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT CREATE ANY DATABASE TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT VIEW ANY DATABASE TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT VIEW ANY DEFINITION TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GRANT VIEW SERVER STATE TO [DOMINIO\admindbas] WITH GRANT OPTION;
  GO
```

- **Abaixo explico a descrição de cada comando SQL acima:**

```sql
-- Define que as operações a seguir serão realizadas no banco de dados 'master'
USE [master]
GO

-- Cria um login no SQL Server associado a um grupo do AD Windows
CREATE LOGIN [DOMINIO\admindbas] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO

-- Concede permissão para alterar qualquer conexão ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT ALTER ANY CONNECTION TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para alterar qualquer servidor vinculado ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT ALTER ANY LINKED SERVER TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para alterar qualquer login ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT ALTER ANY LOGIN TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para alterar o estado do servidor ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT ALTER SERVER STATE TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para alterar traces ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT ALTER TRACE TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para criar qualquer banco de dados ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT CREATE ANY DATABASE TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para visualizar qualquer banco de dados ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT VIEW ANY DATABASE TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para visualizar qualquer definição ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT VIEW ANY DEFINITION TO [DOMINIO\admindbas] WITH GRANT OPTION;
-- Concede permissão para visualizar o estado do servidor ao grupo [DOMINIO\admindbas] com a opção de conceder essa permissão a outros usuários
GRANT VIEW SERVER STATE TO [DOMINIO\admindbas] WITH GRANT OPTION;
GO
```
---

### Passo 7: Testar autenticação no SQL Server

- Logue no Windows com seu usuário do AD. 
- Logue no SSMS utilizando o Windows Autentication.
- Lembre-se que para Logar no SQL Server o usuário do AD precisa ser membro do **RDS Remote Access Servers**.