Configurar a autenticação Kerberos para clusters de banco de dados do PostgreSQL - Amazon Aurora

Configurar a autenticação Kerberos para clusters de banco de dados do PostgreSQL

Use o AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) para configurar a autenticação Kerberos para um cluster de banco de dados PostgreSQL. Para configurar a autenticação Kerberos, execute as etapas a seguir.

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. Quando você cria um diretório AWS Managed Microsoft AD, o AWS Directory Service cria dois controladores de domínio e servidores DNS para você. 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 AWS Managed Microsoft AD, o AWS Directory Service realiza as seguintes tarefas em seu nome:

  • Configura um Active Directory dentro da VPC.

  • Cria de 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.

    Importante

    Certifique-se de salvar essa senha. O AWS Directory Service não armazena essa senha e não é possível recuperá-la ou redefini-la.

  • Cria um grupo de segurança para os controladores do diretório. O grupo de segurança deve permitir a comunicação com o cluster de banco de dados PostgreSQL.

Quando você lança o AWS Directory Service for Microsoft Active Directory, a AWS cria uma Unidade organizacional (OU) que contém todos os objetos do diretório. Essa UO, que tem o nome de NetBIOS que você digitou ao criar 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 AWS Managed Microsoft AD, tem permissões para as atividades administrativas mais comuns da UO:

  • 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 Active Directory e Domain Name Service (DNS) para Windows PowerShell no Active Directory Web Service

A conta Admin também possui direitos para executar as seguintes atividades de 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. No painel de navegação do console do AWS Directory Service, escolha Directories (Diretórios) e escolha Set up directory (Configurar diretório).

  2. Escolha AWS Managed Microsoft AD. O AWS Managed Microsoft AD é a única opção atualmente compatível para uso com o Amazon Aurora.

  3. Escolha Next (Próximo).

  4. Na página Enter directory information (Inserir informações do diretório), forneça as seguintes informações:

    Edição

    Escolha a edição que atenda às suas necessidades.

    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 opcional do diretório, como CORP.

    Descrição do diretório

    Uma descrição opcional 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 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

    Digite a senha do administrador novamente.

    Importante

    Salve essa senha. O AWS Directory Service não armazena essa senha e não é possível recuperá-la ou redefini-la.

  5. Escolha Next (Próximo).

  6. Na página Choose VPC and subnets (Selecionar VPC e sub-redes), forneça as seguintes informações:

    VPC

    Escolha a VPC do diretório. É possível criar o cluster de banco de dados PostgreSQL nessa mesma VPC ou em outra VPC.

    Sub-redes

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

  7. Escolha Next (Próximo).

  8. Analise as informações do diretório. Se alterações forem necessárias, escolha Previous (Anterior) e faça as alterações. Quando as informações estiverem corretas, escolha Create directory (Criar diretório).

    Página de detalhes do diretório

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 visualizar informações sobre o diretório, escolha o ID do diretório na listagem de diretórios. Anote o valor do Directory ID (ID do diretório). Esse valor será necessário ao criar ou modificar a instância de banco de dados PostgreSQL.

Imagem da página de detalhes

Etapa 2: (Opcional) Criar uma relação de confiança entre o Active Directory on-premises e o AWS Directory Service

Se você não planeja usar seu próprio Microsoft Active Directory on-premises, vá para Etapa 3: Criar um perfil do IAM para que o Amazon Aurora acesse o AWS Directory Service.

Para obter a autenticação Kerberos usando o Active Directory local, é necessário criar uma relação de domínio confiável usando uma confiança de floresta entre o Microsoft Active Directory on-premises e o diretório AWS Managed Microsoft AD (criado em Etapa 1: Criar um diretório usando o AWS Managed Microsoft AD). A relação de confiança pode ser unidirecional, onde o diretório AWS Managed Microsoft AD confia no Microsoft Active Directory on-premises. A confiança também pode ser bidirecional, onde os dois Active Directories confiam um no outro. Para ter mais informações sobre como configurar confianças usando o AWS Directory Service, consulte Quando criar uma relação de confiança no Guia de administração do AWS Directory Service.

nota

Se você usa um Microsoft Active Directory on-premises:

  • Os clientes do Windows devem se conectar usando o nome de domínio do AWS Directory Service no endpoint em vez de rds.amazonaws.com. Para ter mais informações, consulte Conectar-se ao PostgreSQL com a autenticação Kerberos.

  • Os clientes do Windows não podem se conectar usando endpoints personalizados do Aurora. Para saber mais, consulte Gerenciamento de conexões do Amazon Aurora.

  • Para bancos de dados globais:

    • Os clientes do Windows podem se conectar usando endpoints de instância ou endpoints do cluster somente na Região da AWS primária do banco de dados global.

    • Os clientes do Windows não podem se conectar usando endpoints do cluster em Regiões da AWS secundárias.

Verifique se o nome de domínio do Microsoft Active Directory on-premises inclui um roteamento de sufixo DNS que corresponde à relação de confiança recém-criada. A captura de tela a seguir mostra um exemplo.

O roteamento de DNS corresponde à confiança criada

Etapa 3: Criar um perfil do IAM para que o Amazon Aurora acesse o AWS Directory Service

Para que o Amazon Aurora chame o AWS Directory Service para você, sua conta da AWS precisa de um perfil do IAM que use a política gerenciada AmazonRDSDirectoryServiceAccess do IAM. Essa função permite que o Amazon Aurora faça chamadas para o AWS Directory Service. (Observe que esse perfil do IAM para acessar o AWS Directory Service é diferente do perfil do IAM usado para Autenticação do banco de dados do IAM).

Quando você cria uma instância de banco de dados usando o AWS Management Console e a conta do usuário do console tiver a permissão iam:CreateRole, o console criará o perfil do IAM necessário 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 Microsoft SQL Server não pode ser usado para o Amazon Aurora.

Como alternativa ao uso da política gerenciada pelo AmazonRDSDirectoryServiceAccess, você pode criar políticas com as permissões exigidas. 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 perfil do IAM a seguir.

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

Etapa 4: Criar e configurar usuários

Você pode criar usuários com a ferramenta Usuários e computadores do Active Directory. Essa é uma das ferramentas do Active Directory Domain Services e do Active Directory Lightweight Directory Services. Para obter mais informações, consulte Add Users and Computers to the Active Directory domain (Adicionar usuários e computadores ao domínio do Active Directory) na documentação da Microsoft. Nesse caso, os usuários são indivíduos ou outras entidades, como seus computadores que fazem parte do domínio e cujas identidades estão sendo mantidas no diretório.

Para criar usuários em um diretório do AWS Directory Service, é necessário estar conectado a uma instância do Amazon EC2 baseada no Windows que seja membro do diretório do AWS Directory Service. Ao mesmo tempo, é necessário estar conectado como um usuário que tenha privilégios para criar usuários. Para obter mais informações, consulte Criar um usuário no Guia de administração do AWS Directory Service.

Etapa 5: Ativar o tráfego entre VPCs entre o diretório e a instância de banco de dados

Se você planeja localizar o diretório e o cluster de banco de dados na mesma VPC, ignore esta etapa e prossiga para Etapa 6: Criar ou modificar um cluster de banco de dados PostgreSQL.

Se você planejar localizar o diretório e a instância de Bancos de Dados em VPCs diferentes, configure o tráfego entre VPCs usando o emparelhamento de VPCs ou o AWS Transit Gateway.

O procedimento a seguir habilita o tráfego entre VPCs usando o emparelhamento de VPCs. Siga as instruções em O que é o emparelhamento de VPCs? no Guia de emparelhamento do Amazon Virtual Private Cloud.

Como habilitar o tráfego entre VPCs usando o emparelhamento de VPCs
  1. Configure regras apropriadas de roteamento de VPC para garantir que o tráfego de rede possa fluir em ambos os sentidos.

  2. Certifique-se de que o grupo de segurança da instância de banco de dados possa receber o tráfego de entrada do grupo de segurança do diretório.

  3. Garanta que não há nenhuma regra na lista de controle de acesso (ACL) de rede para bloquear o tráfego.

Se uma conta diferente da AWS for proprietária do diretório, é necessário compartilhá-lo.

Como compartilhar o diretório entre contas da AWS.
  1. Inicie o compartilhamento do diretório com a conta da AWS na qual a instância de Bancos de Dados será criada seguindo as instruções em Tutorial: Compartilhar o diretório da AWS Managed Microsoft AD para ingresso perfeito no domínio do EC2 no Guia de administração do AWS Directory Service.

  2. Faça login no console do AWS Directory Service usando a conta para a instância de banco de dados e garanta que o domínio tenha o status SHARED antes de prosseguir.

  3. Enquanto estiver conectado ao console do AWS Directory Service usando a conta da instância de banco de dados, observe o valor do Directory ID (ID do diretório). Use esse ID do diretório para associar a instância de banco de dados ao domínio.

Etapa 6: Criar ou modificar um cluster de banco de dados PostgreSQL

Crie ou modifique um cluster de banco de dados PostgreSQL para usar com seu diretório. É possível usar o console, a CLI ou a API do RDS para associar um cluster 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 de clusters de banco de dados PostgreSQL em uma VPC. O cluster de banco de dados pode estar na mesma VPC do diretório ou em uma VPC diferente. O cluster de banco de dados deve usar um grupo de segurança que permita entrada e saída na VPC do diretório para que o cluster de banco de dados possa se comunicar com o diretório.

nota

No momento, não é permitido habilitar a autenticação Kerberos no cluster de banco de dados do Aurora PostgreSQL durante a migração do RDS para o PostgreSQL. É possível habilitar a autenticação Kerberos somente em um cluster de banco de dados do Aurora PostgreSQL autônomo.

Ao usar o console para criar, modificar ou restaurar um cluster de banco de dados, escolha Kerberos authentication (Autenticação Kerberos) na seção Database authentication (Autenticação de banco de dados). Em seguida, escolha Browse Directory (Procurar diretório). Selecione o diretório ou escolha Create a new directory (Criar um novo diretório) para usar o Directory Service.

Selecionar o Kerberos para autenticação e identificar o diretório a ser usado.

Quando você usa a AWS CLI, são necessários os seguintes parâmetros para que o cluster de banco de dados possa usar o diretório criado:

  • 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 um cluster de banco de dados para usar um diretório.

aws rds modify-db-cluster --db-cluster-identifier mydbinstance --domain d-Directory-ID --domain-iam-role-name role-name
Importante

Se você modificar um cluster de banco de dados para habilitar a autenticação Kerberos, reinicialize o cluster de banco de dados após a alteração.

Etapa 7: Criar usuários do PostgreSQL para suas entidades principais do Kerberos

Nesse ponto, seu cluster de banco de dados do Aurora PostgreSQL é unido ao domínio AWS Managed Microsoft AD. Os usuários que você criou no diretório em Etapa 4: Criar e configurar usuários precisam ser configurados como usuários do banco de dados do PostgreSQL e receber privilégios para fazer login no banco de dados. Você faz isso fazendo login como usuário do banco de dados com privilégios rds_superuser. Por exemplo, se você aceitou os padrões ao criar seu cluster de banco de dados do Aurora PostgreSQL use postgres, conforme mostrado nas etapas a seguir.

Como criar usuários de banco de dados do PostgreSQL para entidades principais do Kerberos
  1. Use o psql para conectar-se ao endpoint da instância de banco de dados de seu cluster de banco de dados do Aurora PostgreSQL usando psql. O exemplo a seguir usa a conta postgres padrão para a função rds_superuser.

    psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. Crie um nome de usuário do banco de dados para cada entidade principal do Kerberos (nome de usuário do Active Directory) que você deseja que tenha acesso ao banco de dados. Use o nome de usuário canônico (identidade) conforme definido na instância do Active Directory, ou seja, uma letra minúscula alias (nome de usuário no Active Directory) e o nome em maiúscula do domínio do Active Directory para esse nome de usuário. O nome de usuário do Active Directory é um usuário autenticado externamente, portanto, use aspas ao redor do nome conforme mostrado a seguir.

    postgres=> CREATE USER "username@CORP.EXAMPLE.COM" WITH LOGIN; CREATE ROLE
  3. Conceda a função rds_ad ao usuário do banco de dados.

    postgres=> GRANT rds_ad TO "username@CORP.EXAMPLE.COM"; GRANT ROLE

Depois de concluir a criação de todos os usuários do PostgreSQL para suas identidades de usuário do Active Directory, os usuários podem acessar o cluster de banco de dados do Aurora PostgreSQL usando suas credenciais do Kerberos.

Supõe-se que os usuários do banco de dados que se autenticam usando o Kerberos estejam fazendo isso a partir de máquinas cliente que sejam membros do domínio do Active Directory.

Os usuários do banco de dados aos quais foi concedida a função rds_ad não podem ter também a função rds_iam. Isso também se aplica a assinaturas aninhadas. Para ter mais informações, consulte Autenticação do banco de dados do IAM.

Configurar seu cluster de banco de dados do Aurora PostgreSQL para nomes de usuário que não fazem distinção de maiúsculas e minúsculas

As versões 14.5, 13.8, 12.12 e 11.17 do Aurora PostgreSQL são compatíveis com o parâmetro krb_caseins_users do PostgreSQL. Esse parâmetro é compatível com nomes de usuário do Active Directory que não diferenciam maiúsculas de minúsculas. Por padrão, esse parâmetro é definido como false, então os nomes de usuário são interpretados com distinção entre maiúsculas e minúsculas pelo Aurora PostgreSQL. Esse é o comportamento padrão em todas as versões mais antigas do Aurora PostgreSQL. No entanto, você pode definir esse parâmetro como true em seu grupo de parâmetros de cluster de banco de dados personalizado e permitir que seu cluster de banco de dados do Aurora PostgreSQL interprete nomes de usuário, sem diferenciar maiúsculas de minúsculas. Considere fazer isso como uma conveniência para os usuários do seu banco de dados que, às vezes, podem digitar incorretamente a letra maiúscula do nome de usuário ao se autenticar usando o Active Directory.

Para alterar o parâmetro krb_caseins_users, seu cluster de banco de dados do Aurora PostgreSQL deve estar usando um grupo de parâmetros de cluster de banco de dados personalizado. Para obter informações sobre como trabalhar com um grupo de parâmetros de cluster de banco de dados personalizado, consulte Trabalhar com grupos de parâmetros.

Você pode usar a AWS CLI ou o AWS Management Console para alterar a configuração. Para ter mais informações, consulte Modificar parâmetros em um grupo de parâmetros de cluster de banco de dados.

Etapa 8: Configurar um cliente PostgreSQL

Para configurar um cliente PostgreSQL, execute as seguintes etapas:

  • Crie um arquivo krb5.conf (ou equivalente) para apontar para o domínio.

  • Verifique se o tráfego pode fluir entre o host do cliente e o AWS Directory Service. Use um utilitário de rede, como o Netcat, para o seguinte:

    • Verifique o tráfego pelo DNS da porta 53.

    • Verifique o tráfego pelo TCP/UDP da porta 53 e do Kerberos, que inclui as portas 88 e 464 do AWS Directory Service.

  • Verifique se o tráfego pode fluir entre o host do cliente e a instância de banco de dados pela porta do banco de dados. Por exemplo, use psql para conectar e acessar o banco de dados.

Veja a seguir um exemplo de conteúdo krb5.conf para o AWS Managed Microsoft AD.

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

Veja a seguir um exemplo de conteúdo krb5.conf para o Microsoft Active Directory on-premises.

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } ONPREM.COM = { kdc = onprem.com admin_server = onprem.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM .onprem.com = ONPREM.COM onprem.com = ONPREM.COM .rds.amazonaws.com = EXAMPLE.COM .amazonaws.com.cn = EXAMPLE.COM .amazon.com = EXAMPLE.COM