Integrar o suporte a usuários do Active Directory com o AlloyDB Omni

Selecione uma versão da documentação:

Nesta página, descrevemos como integrar o AlloyDB Omni à sua implementação atual do Active Directory para que você possa usar seus nomes de usuário e senhas atuais para acessar o banco de dados do AlloyDB Omni. A integração do Active Directory fornece o Kerberos como o mecanismo de autenticação padrão para se comunicar com o AlloyDB Omni. Para mais informações, consulte Visão geral do Active Directory.

A configuração do Active Directory no AlloyDB Omni é opcional e fica desativada por padrão. Somente ambientes que usam o servidor do Active Directory para autenticação podem usar esse mecanismo de configuração.

Antes de começar

Antes de integrar o Active Directory, verifique se você atende aos seguintes requisitos:

  • Verifique se o Active Directory está configurado.
  • Obtenha o REALM do servidor do Active Directory.
  • Obtenha o nome do host do centro de distribuição de chaves (KDC) do servidor do Active Directory. O nome do host é armazenado nas imagens do Docker.
  • Obtenha o nome do host do servidor de administração do servidor do Active Directory. Esse nome de host é armazenado nas imagens do Docker.
  • Verifique se você tem acesso ao servidor do Active Directory para gerar um arquivo .keytab.
  • Escolha um usuário do Active Directory para usar no teste e no login.
  • Consiga um arquivo .keytab do servidor do Active Directory.

Extrair um arquivo .keytab do servidor do Active Directory

Para receber um keytab do servidor do Active Directory, siga estas etapas:

  1. Faça login como administrador no terminal do PowerShell do servidor do Active Directory.
  2. Crie um usuário chamado postgres executando o seguinte comando ou usando a interface do usuário do Active Directory.
  3.   New-ADUser -Name "postgres" `
                   -SamAccountName "postgres" `
                   -UserPrincipalName "postgres@REALM" `
                   -Description "Service Account for AlloyDB Omni PostgreSQL Kerberos Authentication" `
                   -AccountPassword (Read-Host -AsSecureString "Set a strong password for the postgres service account") `
                   -Enabled $true `
                   -PasswordNeverExpires $true
      
  4. Gere um keytab principal de serviço que mapeie para este servidor do Active Directory.
  5.   ktpass /princ postgres/ALLOYDB_HOST_NAME@REALM /Pass ChangeMe123 /mapuser postgres /crypto ALL /ptype KRB5_NT_PRINCIPAL /mapOp set /out C:\Users\Public\postgres.keytab
      

    Em que <HOST> é o nome de domínio totalmente qualificado do servidor em que você planeja implantar o AlloyDB Omni. Por exemplo, alloydb-server.ad.example.com. Configure o mesmo host no arquivo krb5.conf do mapeamento de domínio.

  6. Copie o arquivo keytab para sua máquina Linux.

Ativar a autenticação do Active Directory

Para ativar a autenticação do Active Directory no AlloyDB Omni, siga estas etapas, que incluem a configuração da Generic Security Service Application Program Interface (GSSAPI), uma interface de programação de aplicativos que permite que os programas acessem serviços de segurança.

  1. Adicione as seguintes entradas ao arquivo /var/lib/postgresql/data/pg_hba.conf antes da entrada
    host all all all scram-sha-256.

    1. Execute o seguinte comando do Docker para adicionar gss ao contêiner:

      docker exec CONTAINER_NAME sed -i 's;^host all all all scram-sha-256$;hostgssenc all all 0.0.0.0/0 gss map=gssmap\n&;' /var/lib/postgresql/data/pg_hba.conf
      
    2. Execute o seguinte comando do Docker para verificar se o arquivo pg_hba.conf está dentro do contêiner:

      docker exec CONTAINER_NAME cat /var/lib/postgresql/data/pg_hba.conf
      
    3. Verifique se a seguinte entrada está no arquivo:

      hostgssenc all all 0.0.0.0/0 gss map=gssmap
      

      Para mais informações, consulte o arquivo pg_hba.conf (em inglês).

  2. Copie o arquivo de guia de chave para o diretório de dados dentro da imagem do AlloyDB Omni.

    docker cp PATH TO KEYTAB FILE CONTAINER_NAME:/var/lib/postgresql/data/alloydb.keytab
    docker exec CONTAINER_NAME chmod 600 /var/lib/postgresql/data/alloydb.keytab
    docker exec CONTAINER_NAME chown postgres:postgres /var/lib/postgresql/data/alloydb.keytab
    

    O arquivo keytab é gerado pelo Kerberos para o servidor PostgreSQL. Para saber mais sobre autenticação, consulte Autenticação GSSAPI.

  3. Adicione uma entrada para o arquivo keytab ao arquivo /var/lib/postgresql/data/DATA_DIR/postgresql.conf.

    1. Execute o seguinte comando do Docker para adicionar a entrada no contêiner:

      docker exec CONTAINER_NAME sed -i '$akrb_server_keyfile='"'"'/var/lib/postgresql/data/alloydb.keytab'"'" /var/lib/postgresql/data/postgresql.conf
      
    2. Execute o seguinte comando do Docker para verificar o arquivo postgresql.conf no contêiner:

      docker exec CONTAINER_NAME tail  /var/lib/postgresql/data/postgresql.conf
      
    3. Verifique se a seguinte entrada está no arquivo:

      krb_server_keyfile=/var/lib/postgresql/data/alloydb.keytab
      

      Para mais informações, consulte krb_server_keyfile.

  4. Opcional: adicione entradas ao arquivo /var/lib/postgresql/data/DATA_DIR/pg_ident.conf.

    Ao usar um sistema de autenticação externa, como GSSAPI, o nome do usuário do sistema operacional que iniciou a conexão pode não ser o mesmo do usuário (papel) do banco de dados que você quer usar.

    Nesse caso, especifique o mapeamento de usuário do sistema para usuário do PostgreSQL no arquivo /var/lib/postgresql/data/DATA_DIR/pg_ident.conf:

    docker exec -it CONTAINER_NAME bash
    $ echo -e "
    gssmap              /^(.*)@EXAMPLE\.COM$     \1
    gssmap              /^(.*)@example\.com$     \1
    " | column -t | tee -a /var/lib/postgresql/data/pg_ident.conf
    

    Para implementar o mapeamento de nomes de usuário, especifique map=gssmap no campo de opções do arquivo pg_hba.conf.

    Para mais informações sobre a autenticação baseada em identificador, consulte Mapas de identificador.

  5. Recarregue as configurações do PostgreSQL usando o seguinte comando:

    docker exec -it CONTAINER_NAME psql -h localhost -U postgres
    psql (16.3)
    Type "help" for help.
    postgres=# select pg_reload_conf();
    

Testar a autenticação do Active Directory

Para verificar se a autenticação do Active Directory está funcionando, siga estas etapas:

  1. Faça login no Active Directory usando kinit.
  2. Execute o seguinte comando psql na máquina em que você costuma executar kinit:

    root@4f6414ad02ef:/# kinit AD_USER_NAME
    Password for user1@YOUR.REALM:
    
    root@4f6414ad02ef:/# psql --h ALLOYDB_SERVER_HOST_NAME -U AD_USER_NAME
    psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
    GSSAPI-encrypted connection
    Type "help" for help.
    
    user1=#
    

Desativar a autenticação do Active Directory

Para desativar a autenticação do Active Directory no AlloyDB Omni, siga estas etapas, que desativam o GSSAPI:

  1. Remova as entradas no arquivo pg_hba.conf que apontam para o método de autenticação gss:

    docker exec CONTAINER_NAME sed -i '/hostgssenc all all 0.0.0.0\/0 gss map=gssmap/d' /var/lib/postgresql/data/pg_hba.conf
    
  2. Recarregue as configurações do PostgreSQL usando o seguinte comando:

    docker exec -it CONTAINER_NAME psql -h localhost -U postgres
    psql (16.3)
    Type "help" for help.
    postgres=# select pg_reload_conf();
    

A seguir