Usar a autenticação Kerberos para MySQL - Amazon Relational Database Service

Usar a autenticação Kerberos para MySQL

É possível usar a autenticação Kerberos para autenticar usuários quando se conectam a sua instância de banco de dados do MySQL. A instância de banco de dados funciona com o AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) para habilitar a autenticação Kerberos. Quando os usuários são autenticados por uma instância de banco de dados MySQL associada ao domínio de confiança, as solicitações de autenticação são encaminhadas. As solicitações encaminhadas vão para o diretório de domínio que você cria com o AWS Directory Service.

Manter todas as suas credenciais no mesmo diretório pode economizar tempo e esforço. Com essa abordagem, você tem um lugar centralizado para armazenar e gerenciar credenciais para várias instâncias de banco de dados. O uso de um diretório também pode melhorar o perfil de segurança geral.

Disponibilidade de região e versão

A disponibilidade e a compatibilidade de recursos varia entre versões específicas de cada mecanismo de banco de dados e entre Regiões da AWS. Para ter mais informações sobre a disponibilidade de versões e regiões do Amazon RDS com autenticação de Kerberos, consulte Autenticação de Kerberos.

Visão geral da configuração da autenticação Kerberos para instâncias de banco de dados MySQL

Para configurar a autenticação Kerberos para uma instância de banco de dados MySQL, conclua as seguintes etapas gerais, descritas em mais detalhes posteriormente:

  1. Use AWS Managed Microsoft AD para criar um diretório do AWS Managed Microsoft AD. É possível usar o AWS Management Console, o AWS CLI ou o AWS Directory Service para criar o diretório. Para obter detalhes sobre como fazer isso, consulte o tópico sobre como Criar seu diretório AWS Managed Microsoft AD, no Guia de administração do AWS Directory Service.

  2. Crie uma função do AWS Identity and Access Management (IAM) que use a politica gerenciada AmazonRDSDirectoryServiceAccess do IAM. A função permite ao Amazon RDS fazer chamadas para seu diretório.

    Para o perfil permitir o acesso, o endpoint do AWS Security Token Service (AWS STS) deve estar ativado na Região da AWS de sua conta da AWS. Os endpoints do AWS STS são ativados por padrão em todas as Regiões da AWS e você pode usá-los sem precisar tomar medidas adicionais. Para ter mais informações, consulte Ativar e desativar o AWS STS em uma Região da AWS no Guia do usuário do IAM.

  3. Crie e configure usuários no diretório AWS Managed Microsoft AD usando as ferramentas do Microsoft Active Directory. Para ter mais informações sobre como criar usuários em seu Active Directory, consulte Gerenciar usuários e grupos no Microsoft AD gerenciado pela AWS no Guia de administração doAWS Directory Service.

  4. Crie ou modifique uma instância de banco de dados MySQL. Se você usar a CLI ou a API do RDS na solicitação de criação, especifique um identificador de domínio com o parâmetro Domain. Use o identificador d-* que foi gerado quando você criou o diretório e o nome da função que você criou.

    Se você modificar uma instância de banco de dados MySQL existente para usar a autenticação Kerberos, defina os parâmetros de domínio e função do IAM para a instância de banco de dados. Localize a instância de banco de dados na mesma VPC que o diretório de domínio.

  5. Use as credenciais de usuário mestre do Amazon RDS para conectar-se à instância de banco de dados MySQL. Crie o usuário no MySQL usando a cláusula CREATE USER IDENTIFIED WITH 'auth_pam'. Os usuários que você cria dessa maneira podem fazer login na instância de banco de dados MySQL usando a autenticação Kerberos.

Configurar a autenticação Kerberos para instâncias de banco de dados MySQL

Use o AWS Managed Microsoft AD para configurar a autenticação Kerberos para uma instância de banco de dados MySQL. Para configurar a autenticação Kerberos, você executa as seguintes etapas.

Etapa 1: Criar um diretório usando o AWS Managed Microsoft AD

O AWS Directory Service cria um Active Directory totalmente gerenciado na Nuvem AWS. Ao criar um diretório do AWS Managed Microsoft AD, o AWS Directory Service cria dois controladores de domínio e servidores do Domain Name System (DNS) em seu nome. Os servidores do diretório são criados em sub-redes diferentes em uma VPC. Essa redundância ajuda a garantir que o diretório permaneça acessível mesmo se ocorrer uma falha.

Ao criar um diretório do AWS Managed Microsoft AD, o AWS Directory Service executa as seguintes tarefas em seu nome:

  • Configura um Active Directory dentro da VPC.

  • Cria uma conta de administrador do diretório com o nome de usuário Admin e a senha especificada. Use essa conta para gerenciar seu diretório.

    nota

    Salve essa senha. O AWS Directory Service não a armazena. Você pode redefini-la, mas não recuperá-la.

  • Cria um grupo de segurança para os controladores do diretório.

Quando você inicia o AWS Managed Microsoft AD, o AWS cria uma Unidade organizacional (UO) que contém todos os objetos do diretório. Essa OU, que tem o nome NetBIOS que você digitou quando criou o diretório, está localizada na raiz do domínio. A raiz do domínio é controlada e de propriedade da AWS.

A conta admin que foi criada com o diretório do AWS Managed Microsoft AD tem permissões para as atividades administrativas mais comuns de sua OU:

  • Criar, atualizar ou excluir usuários

  • Adicionar recursos ao domínio, como servidores de arquivos ou de impressão, e atribuir permissões para esses recursos aos usuários na UO

  • Criar OUs adicionais e contêineres

  • Delegar autoridade

  • Restaurar objetos excluídos da Lixeira do Active Directory

  • Execute os módulos AD e DNS do Windows PowerShell no Active Directory Web Service

A conta admin também tem direitos para executar as seguintes atividades em todo o domínio:

  • Gerenciar configurações de DNS (adicionar, remover ou atualizar registros, zonas e encaminhadores)

  • Visualizar logs de eventos de DNS

  • Visualizar logs de eventos de segurança

Como criar um diretório com AWS Managed Microsoft AD
  1. Faça login no AWS Management Console e abra o console do AWS Directory Service em https://console.aws.amazon.com/directoryservicev2/.

  2. No painel de navegação, escolha Directories (Diretórios) e escolha Set up directory (Configurar diretório).

  3. Escolha AWS Managed Microsoft AD. O AWS Managed Microsoft AD é a única opção que você pode usar atualmente com o Amazon RDS.

  4. Insira as seguintes informações:

    Nome do DNS do diretório

    O nome completo do diretório, como corp.example.com.

    Nome de NetBIOS do diretório

    O nome curto do diretório, como CORP.

    Descrição do diretório

    (Opcional) Uma descrição do diretório.

    Senha do Admin

    A senha do administrador do diretório. O processo de criação do diretório cria uma conta de administrador com o nome de usuário Admin e essa senha.

    A senha do administrador do diretório e não pode incluir a palavra "admin". A senha diferencia letras maiúsculas de minúsculas e deve ter entre 8 e 64 caracteres. Ela também precisa conter pelo menos um caractere de três das quatro categorias a seguir:

    • Letras minúsculas (a–z)

    • Letras maiúsculas (A–Z)

    • Números (0–9)

    • Caracteres não alfanuméricos (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)

    Confirmar senha

    A senha do administrador digitada novamente.

  5. Escolha Next (Próximo).

  6. Insira as seguintes informações na seção Networking (Rede) e escolha Next (Próximo):

    VPC

    A VPC do diretório. Crie a instância de banco de dados MySQL nesta mesma VPC.

    Sub-redes

    Sub-redes para os servidores do diretório. As duas sub-redes deve estar em diferentes zonas de disponibilidade.

  7. Revise as informações do diretório e faça as alterações necessárias. Quando as informações estiverem corretas, selecione Create directory (Criar diretório).

    
              Página de detalhes do diretório durante a criação

A criação do diretório leva vários minutos. Depois que o diretório tiver sido criado com sucesso, o valor de Status muda para Active (Ativo).

Para ver informações sobre o diretório, selecione o nome do diretório na listagem de diretórios. Anote o valor do Directory ID (ID do diretório) porque você precisará desse valor ao criar ou modificar sua instância de banco de dados MySQL.


          Página de detalhes do diretório

Etapa 2: Criar a função do IAM para ser usada pelo Amazon RDS

Para que o Amazon RDS chame o AWS Directory Service para você, é necessária uma função do IAM que use a política gerenciada do IAM AmazonRDSDirectoryServiceAccess. Esta função permite que o Amazon RDS faça chamadas ao AWS Directory Service.

Quando uma instância de banco de dados é criada usando o AWS Management Console e o usuário do console tem a permissão iam:CreateRole, o console cria essa função automaticamente. Nesse caso, o nome da função é rds-directoryservice-kerberos-access-role. Caso contrário, é necessário criar a função do IAM manualmente. Ao criar essa função do IAM, escolha Directory Service e associe a AWS política gerenciada da AmazonRDSDirectoryServiceAccess a ela.

Para ter mais informações sobre como criar funções do IAM para um serviço, consulte o tópico sobre como Criar uma função para delegar permissões a um serviço da AWS, no Guia do usuário do IAM.

nota

O perfil do IAM usado para a autenticação do Windows para RDS para o SQL Server não pode ser usado para o RDS para MySQL.

Se preferir, você poderá criar políticas com as permissões exigidas em vez de usar a política gerenciada do IAM AmazonRDSDirectoryServiceAccess. Nesse caso, o perfil do IAM deve ter a política de confiança do IAM a seguir.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

A função também deve ter a política de função do IAM a seguir.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ds:DescribeDirectories", "ds:AuthorizeApplication", "ds:UnauthorizeApplication", "ds:GetAuthorizedApplicationDetails" ], "Effect": "Allow", "Resource": "*" } ] }

Etapa 3: Criar e configurar usuários

Você pode criar usuários com a ferramenta Usuários e computadores do Active Directory. Essa ferramenta faz parte das ferramentas do Active Directory Domain Services e do Active Directory Lightweight Directory Services. Os usuários representam pessoas ou entidades individuais que têm acesso ao seu diretório.

Para criar usuários em um diretório do AWS Directory Service, você deve estar conectado a uma instância do Amazon EC2 baseada no Microsoft Windows. Essa instância deve ser membro do diretório do AWS Directory Service e estar conectada como um usuário com privilégios para criar usuários. Para ter mais informações, consulte o tópico sobre como Gerenciar usuários e grupos AWS Managed Microsoft AD, no Guia de administração do AWS Directory Service.

Etapa 4: Criar ou modificar uma instância de banco de dados MySQL

Crie ou modifique uma instância de banco de dados MySQL para usar com o diretório. É possível usar o console, a CLI ou a API do RDS para associar uma instância de banco de dados a um diretório. Você pode fazer isso por meio de uma das seguintes maneiras:

A autenticação Kerberos só é compatível com instâncias de banco de dados MySQL em uma VPC. A instância de banco de dados pode estar na mesma VPC do diretório ou em uma VPC diferente. A instância de banco de dados que deve ser usada em um grupo de segurança que permita a saída na VPC do diretório para que a instância de banco de dados possa se comunicar com o diretório.

Ao usar o console para criar, modificar ou restaurar uma instância de banco de dados, escolha Password and Kerberos authentication (Senha e autenticação Kerberos) na seção Database authentication (Autenticação de banco de dados). Escolha Browse Directory (Procurar diretório) e selecione o diretório ou escolha Create a new directory (Criar um diretório).


          Configuração de autenticação Kerberos ao criar uma instância de banco de dados

Ao utilizar a AWS CLI ou a API do RDS, associe uma instância de banco de dados a um diretório. Os seguintes parâmetros são necessários para que a instância de banco de dados utilize o diretório de domínio que você criou:

  • Para o parâmetro --domain, use o identificador de domínio (identificador "d-*") gerado quando o diretório foi criado.

  • Para o parâmetro --domain-iam-role-name, use a função criada que usa a política gerenciada AmazonRDSDirectoryServiceAccess do IAM.

Por exemplo, o comando da CLI a seguir modifica uma instância de banco de dados para usar um diretório.

Para Linux, macOS ou Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --domain d-ID \ --domain-iam-role-name role-name

Para Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --domain d-ID ^ --domain-iam-role-name role-name
Importante

Se você modificar uma instância de banco de dados para permitir a autenticação Kerberos, reinicialize a instância de banco de dados após fazer a alteração.

Etapa 5: Criar logins do MySQL da autenticação Kerberos

Use as credenciais de usuário mestre do Amazon RDS para se conectar à instância de banco de dados do MySQL como você faz com qualquer outra instância de banco de dados. A instância de banco de dados é ingressada no domínio AWS Managed Microsoft AD. Assim, é possível provisionar logins e usuários do MySQL de usuários do Active Directory em seu domínio. As permissões de banco de dados são gerenciadas por meio de permissões padrão do MySQL que são concedidas e revogadas desses logins.

Você pode permitir que um usuário do Active Directory seja autenticado pelo MySQL. Para fazer isso, primeiro use as credenciais do usuário mestre do Amazon RDS para se conectar à instância de banco de dados MySQL como faz com qualquer outra instância de banco de dados. Depois de fazer login, crie um usuário autenticado externamente com PAM (Pluggable Authentication Modules) no MySQL como mostrado a seguir.

CREATE USER 'testuser'@'%' IDENTIFIED WITH 'auth_pam';

Substitua testuser pelo nome de usuário. Os usuários (humanos e aplicativos) de seu domínio agora podem se conectar à instância de banco de dados em uma máquina cliente conectada ao domínio usando a autenticação Kerberos.

Importante

Recomendamos vivamente que os clientes usem conexões SSL/TLS ao usar a autenticação PAM. Se eles não usarem conexões SSL/TLS, a senha poderá ser enviada como texto não criptografado em alguns casos. Para exigir uma conexão criptografada SSL/TLS para o usuário do AD, execute o seguinte comando:

UPDATE mysql.user SET ssl_type = 'any' WHERE ssl_type = '' AND PLUGIN = 'auth_pam' and USER = 'testuser'; FLUSH PRIVILEGES;

Para ter mais informações, consulte Usar o SSL/TLS com uma instância de banco de dados do MySQL.

Gerenciamento de uma instância de banco de dados em um domínio

É possível usar a CLI ou a API do RDS para gerenciar a instância de banco de dados e suas relações com o Active Directory. Por exemplo, você pode associar um Active Directory para autenticação Kerberos e desassociar um Active Directory para desabilitar a autenticação Kerberos. Também é possível mover uma instância de banco de dados para ser autenticada externamente por um Microsoft Active Directory para outro.

Por exemplo, usando a API do Amazon RDS, você pode fazer o seguinte:

  • Para tentar habilitar novamente a autenticação Kerberos para uma associação com falha, use a operação ModifyDBInstance da API e especifique o ID do diretório da associação atual.

  • Para atualizar o nome da função do IAM para a associação, use a operação ModifyDBInstance da API e especifique o ID do diretório da associação atual e a nova função do IAM.

  • Para desabilitar a autenticação Kerberos em uma instância de banco de dados, use a operação ModifyDBInstance da API e especifique none como o parâmetro de domínio.

  • Para mover uma instância de banco de dados de um domínio para outro, use a operação ModifyDBInstance da API e especifique o identificador do novo domínio como o parâmetro do domínio.

  • Para listar as associações de cada instância de banco de dados, use a operação DescribeDBInstances da API.

Compreensão da associação de domínio

Depois que você cria ou modifica a instância de banco de dados, ela se torna membro do domínio. É possível visualizar o status da associação do domínio da instância de banco de dados executando o comando describe-db-instances da CLI. O status da instância de banco de dados pode ser um dos seguintes:

  • kerberos-enabled – a instância de banco de dados que tem a autenticação Kerberos habilitada.

  • enabling-kerberos: a AWS está no processo de habilitar a autenticação Kerberos nessa instância de bancos de dados.

  • pending-enable-kerberos – a habilitação da autenticação Kerberos está pendente nesta instância de banco de dados.

  • pending-maintenance-enable-kerberos: a AWS tentará habilitar a autenticação Kerberos na instância de bancos de dados durante a próxima janela de manutenção programada.

  • pending-disable-kerberos – a desabilitação da autenticação Kerberos está pendente nesta instância de banco de dados.

  • pending-maintenance-disable-kerberos: a AWS tentará desabilitar a autenticação Kerberos na instância de banco de dados durante a próxima janela de manutenção programada.

  • enable-kerberos-failed: um problema de configuração impediu que a AWS habilitasse a autenticação Kerberos na instância de banco de dados. Verifique e corrija sua configuração antes de emitir novamente o comando de modificação da instância de banco de dados.

  • disabling-kerberos: a AWS está no processo de desabilitar a autenticação Kerberos nessa instância de bancos de dados.

Uma solicitação para habilitar a autenticação Kerberos pode falhar por conta de um novo problema de conectividade de rede ou de uma função do IAM incorreta. Por exemplo, suponha que você crie uma instância de banco de dados ou modifique uma instância de banco de dados existente e a tentativa de habilitar a autenticação Kerberos falhe. Se isso acontecer, emita o comando modify novamente ou modifique a instância de banco de dados recém-criada para ingressar no domínio.

Conectar-se ao MySQL com a autenticação Kerberos

Para conectar-se ao MySQL com a autenticação Kerberos, faça login usando o tipo de autenticação Kerberos.

Para criar um usuário de banco de dados ao qual você pode se conectar usando a autenticação Kerberos, use uma cláusula IDENTIFIED WITH na instrução CREATE USER. Para obter instruções, consulte Etapa 5: Criar logins do MySQL da autenticação Kerberos.

Para evitar erros, use o cliente mysql do MariaDB. É possível baixar o software MariaDB em https://downloads.mariadb.org/.

No prompt de comando, conecte-se a um dos endpoints associados à sua instância de banco de dados MySQL. Siga os procedimentos gerais em Conexão a uma instância de banco de dados executando o mecanismo de banco de dados do MySQL. Quando a senha for solicitada, insira a senha do Kerberos associada a esse nome de usuário.

Restaurar uma instância de banco de dados MySQL e adicioná-la a um domínio

Você pode restaurar um snapshot de banco de dados ou fazer uma restauração point-in-time de uma instância de banco de dados MySQL e adicioná-la a um domínio. Depois que a instância de banco de dados tiver sido restaurada, modifique a instância de banco de dados usando o processo explicado em Etapa 4: Criar ou modificar uma instância de banco de dados MySQL para adicionar a instância de banco de dados a um domínio.

Limitações da autenticação Kerberos para MySQL

As seguintes limitações se aplicam à autenticação Kerberos para MySQL:

  • Há suporte somente para AWS Managed Microsoft AD. Contudo, você pode associar as instâncias de banco de dados do RDS para MySQL a domínios gerenciados do Microsoft AD compartilhados de propriedade de contas diferentes na mesma Região da AWS.

  • Você deve reinicializar a instância de banco de dados depois de habilitar o recurso.

  • O tamanho do nome do domínio não pode ser maior que 61 caracteres.

  • Você não pode habilitar a autenticação Kerberos e a autenticação do IAM ao mesmo tempo. Escolha um método de autenticação ou outro para sua instância de banco de dados MySQL.

  • Não modifique a porta da instância de banco de dados depois de habilitar o recurso.

  • Não use a autenticação Kerberos com réplicas de leitura.

  • Se você tiver o upgrade automático de versão secundária ativado para uma instância de banco de dados MySQL que esteja utilizando a autenticação Kerberos, deverá desativar a autenticação Kerberos e depois ativá-la novamente após um upgrade automático. Para ter mais informações sobre upgrades de versões secundárias, consulte Atualizações da versão secundária automáticas para o MySQL.

  • Para excluir uma instância de banco de dados com esse recurso habilitado, primeiro desabilite o recurso. Para isso, use o comando modify-db-instance da CLI para a instância de banco de dados e especifique none para o parâmetro --domain.

    Se você usar a CLI ou a API do RDS para excluir uma instância de banco de dados com esse recurso habilitado, espere um atraso.

  • Você não pode configurar uma relação de confiança de floresta entre o Microsoft Active Directory on-premises ou auto-hospedado e AWS Managed Microsoft AD.