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 à implementação 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 Active Directory Server 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:

  • Confira se o Active Directory está configurado.
  • Consiga o REALM do servidor do Active Directory.
  • Consiga o nome do host do Key Distribution Center (KDC) do servidor do Active Directory O nome do host é armazenado nas imagens Docker.
  • Obtenha o nome do host do servidor do diretório do Active Directory. Esse nome do host é armazenado nas imagens Docker.
  • Verifique se você tem acesso ao servidor do Active Directory para que você possa gerar um arquivo .keytab.
  • Escolha um usuário do Active Directory para usar nos testes e no login.
  • Consiga um arquivo .keytab do servidor do Active Directory.

Consiga um arquivo .keytab do servidor do Active Directory

Para conseguir um arquivo keytab do servidor do diretório ativo, siga estas etapas:

  1. Faça login como administrador no terminal do PowerShell do servidor do diretório do Active Directory.
  2. Crie um usuário chamado postgres executando o comando a seguir, 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 de entidade de serviço que seja mapeado para esse 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. É necessário configurar o mesmo host em o krb5.conf arquivo no mapeamento do 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 do aplicativo que permite que os programas acessem serviços de segurança.

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

    1. Execute o comando do Docker a seguir para adicionar gss dentro do 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 comando do Docker a seguir 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 entrada a seguir está no arquivo:

      hostgssenc all all 0.0.0.0/0 gss map=gssmap
      

      Para mais informações, consulte O arquivo pg_hba.conf.

  2. Copie o arquivo de guia de chaves 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 /var/lib/postgresql/data/DATA_DIR/postgresql.conf arquivo.

    1. Execute o comando do Docker a seguir para adicionar a entrada dentro do 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 comando do Docker a seguir para verificar o arquivo postgresql.conf dentro do contêiner:

      docker exec CONTAINER_NAME tail  /var/lib/postgresql/data/postgresql.conf
      
    3. Verifique se a entrada a seguir 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.

    Quando você usa um sistema de autenticação externo, como o GSSAPI, o nome do usuário do sistema operacional que iniciou a conexão pode não ser o mesmo do usuário do banco de dados (papel) 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 nome de usuário, especifique map=gssmap no campo "Options" do arquivo pg_hba.conf.

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

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

    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 comando psql a seguir 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 comando a seguir:

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

A seguir