Integre o suporte de grupos do Active Directory com o AlloyDB Omni

Selecione uma versão da documentação:

Esta página descreve como configurar e gerir a autenticação e a autorização baseadas em grupos do Active Directory no AlloyDB Omni. O suporte baseado em grupos do Active Directory automatiza a gestão das associações de funções do PostgreSQL com base nas associações de grupos de um utilizador no seu Active Directory, o que simplifica a gestão de utilizadores e garante que as autorizações estão sincronizadas.

Para mais informações, consulte o artigo Vista geral do Active Directory.

Fluxo de trabalho de integração do Active Directory

A integração do Active Directory é implementada através de uma extensão do PostgreSQL (google_pg_auth), conforme mostrado no fluxo de trabalho seguinte:

  1. Início de sessão do utilizador: um utilizador autentica-se no AlloyDB Omni com as respetivas credenciais padrão do Active Directory através da GSSAPI.
  2. Criação automática de funções: se não existir uma função PostgreSQL correspondente para o utilizador, o sistema cria automaticamente uma, por exemplo, CREATE ROLE "user@REALM" WITH LOGIN;.
  3. Verificação de grupos LDAP: o sistema liga-se de forma segura ao seu Active Directory através do LDAP para obter as subscrições de grupos atuais do utilizador.
  4. Sincronização de membros: o sistema compara os grupos do Active Directory do utilizador com os mapeamentos que configurou.
    • Se o utilizador estiver num grupo do Active Directory mapeado, mas não estiver no grupo do PostgreSQL correspondente, é-lhe concedida a associação.
    • Se o utilizador não estiver num grupo do Active Directory mapeado, mas estiver no grupo do PostgreSQL correspondente, a associação do utilizador é revogada.
  5. Início de sessão concluído: a ligação do utilizador é finalizada e o utilizador tem sessão iniciada na base de dados. As autorizações do utilizador são determinadas pelas funções do PostgreSQL às quais pertence, que estão sincronizadas com o respetivo estado do grupo do Active Directory.

Esta sincronização ocorre automaticamente em cada início de sessão do utilizador, o que garante que os direitos de acesso do PostgreSQL refletem o estado atual do seu Active Directory.

Antes de começar

Antes de integrar o suporte de grupos do Active Directory com o AlloyDB Omni, certifique-se de que cumpre os seguintes requisitos.

  • Autenticação GSSAPI: a autenticação baseada em GSSAPI tem de estar configurada e operacional para a sua instância do AlloyDB Omni. Para mais informações, consulte o artigo Integre o Active Directory com o AlloyDB Omni.
  • Funções de grupo do PostgreSQL: tem de criar manualmente as funções de grupo do PostgreSQL que quer mapear para grupos do Active Directory, como mostrado no seguinte exemplo:

    CREATE ROLE 'postgres_developers';
    CREATE ROLE 'postgres_read_only';
    
  • Autorizações: tem de atribuir manualmente as autorizações da base de dados, por exemplo, SELECT e INSERT, a estas funções de grupo do PostgreSQL. A integração apenas gere a subscrição, mas não gere os privilégios dos próprios grupos, como mostrado no exemplo seguinte:

    GRANT SELECT ON ALL TABLES IN SCHEMA sales TO postgres_read_only;
    GRANT USAGE ON SCHEMA finance TO postgres_developers;
    GRANT USAGE ON SCHEMA sales TO postgres_read_only;
    GRANT SELECT, INSERT ON finance.transactions TO postgres_developers;
    

Configure o suporte de grupos do Active Directory

Para configurar o suporte de grupos do Active Directory no AlloyDB Omni, tem de ativar a extensão google_pg_auth, fornecer os detalhes do Active Directory no ficheiro postgresql.conf e processar as credenciais de forma segura.

  1. Indique a palavra-passe do LDAP.

    Tem de fornecer a palavra-passe da conta de serviço ldap_bind_dn ao contentor do AlloyDB Omni através da variável de ambiente AD_LDAP_PASSWORD, conforme mostrado no exemplo seguinte:

    docker run -d --name CONTAINER_NAME \
              -e POSTGRES_PASSWORD=NEW_PASSWORD \
              -e AD_LDAP_PASSWORD=AD_LDAP_PASSWORD \
              -vDATA_DIR:/var/lib/postgresql/data \
              -p HOST_PORT:5432 \
              --restart=always \
              google/alloydbomni:IMAGE_TAG
    
  2. Ative a extensão google_pg_auth.

    1. No ficheiro postgresql.conf, adicione ou modifique os seguintes parâmetros para ativar a extensão e configurar a ligação LDAP. O ficheiro postgresql.conf está localizado no diretório de dados que montou quando iniciou a imagem do AlloyDB Omni.

      # ---------------------------------------------------------------------------
      # ALLOYDB ACTIVE DIRECTORY INTEGRATION SETTINGS
      # ---------------------------------------------------------------------------
      
      google_pg_auth.enable_auth = on
      google_pg_auth.ldap_uri = "AD_LDAP_SERVER_HOST"
      google_pg_auth.ldap_base_dn = AD_LDAP_BASE_DN
      google_pg_auth.ldap_bind_dn = AD_LDAP_BIND_DN
      google_pg_auth.auth_cache_ttl_sec = 3600
      

      Faça as seguintes substituições:

      • AD_LDAP_SERVER_HOST: o URI do seu servidor LDAP do Active Directory, por exemplo, ldap://ad-controller.example.com.
      • AD_LDAP_BASE_DN: o nome distinto (DN) de base para fazer pesquisas LDAP, por exemplo, DC=example,DC=com.
      • AD_LDAP_BIND_DN: o nome distinto (DN) da conta de utilizador do Active Directory que o AlloyDB Omni usa para se ligar e realizar pesquisas LDAP, por exemplo, setupadmin@ad-example.com.
      • auth_cache_ttl_sec é o tempo decorrido até os dados serem colocados em cache pelo AlloyDB Omni por utilizador antes de o AlloyDB Omni tentar contactar novamente o servidor LDAP. O valor de auth_cache_ttl_sec pode variar entre um mínimo de 60 segundos e um máximo de 86 400 segundos (24 horas).
    2. Adicione google_pg_auth ao parâmetro shared_preload_libraries em postgresql.conf.

    3. Adicione a seguinte linha ao ficheiro postgresql.conf:

      shared_preload_libraries='google_pg_auth,google_columnar_engine,google_job_scheduler,google_storage'
      
    4. Reinicie a base de dados.

      docker restart CONTAINER_NAME
      
  3. Configure o certificado LDAPS.

    Para garantir uma ligação segura ao servidor Active Directory através do LDAPS, precisa de um certificado da AC.

    Coloque o ficheiro de certificado LDAPS na seguinte localização predefinida na imagem do AlloyDB Omni: /etc/ldap/ldap.crt.

Faça a gestão dos mapeamentos de grupos

Pode criar e gerir mapeamentos entre grupos do Active Directory e funções do PostgreSQL através de funções SQL.

Inicie sessão no cluster e carregue a extensão

docker exec -it CONTAINER_NAME psql -h localhost -U postgres
postgres=# CREATE EXTENSION google_pg_auth;
CREATE EXTENSION

Crie um mapeamento de grupos

Para mapear um grupo do Active Directory para uma função de grupo do PostgreSQL que já criou, use a função map_ad_group():

SELECT google_pg_auth.map_ad_group(ad_group_name TEXT, ad_group_sid TEXT, pg_role_name TEXT);

Por exemplo, para mapear o grupo do ad-developers Active Directory para a função do pg-developers PostgreSQL, use o seguinte comando:

SELECT google_pg_auth.map_ad_group('ad-developers', 'S-1-5-21-.....', 'postgres_read_only');

Para obter o SID de um grupo específico no Active Directory, use o seguinte comando no servidor do Active Directory:

C:\Users\Admin> Get-ADGroup -Identity ad-developers | select SID

             SID
-----------------------------------------------
S-1-5-21-3168537779-1985441202-1799118680-1612

Remova um mapeamento de grupos

Para remover um mapeamento existente, use a função unmap_ad_group(). Esta função interrompe a sincronização para esse grupo, mas não remove os utilizadores do grupo PostgreSQL se já forem membros.

SELECT google_pg_auth.unmap_ad_group(ad_group_sid TEXT, pg_role_name TEXT);

Veja o exemplo seguinte:

SELECT google_pg_auth.unmap_ad_group('quinn@google.com', 'postgres_read_only');

Associe à base de dados AlloyDB Omni

Inicie sessão na base de dados do AlloyDB Omni com o utilizador do Active Directory. Tem de ativar a opção kinit no cliente ao qual está a estabelecer ligação.

No exemplo seguinte, o pod postgres-client tem o kinit e o psql instalados e está configurado para se ligar ao cluster do AlloyDB Omni através do cliente psql.

root@postgres-client:/# kinit AD_USER_NAME
Password for user1REALM:

root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U AD_USER_NAME@REALM -d postgres
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
GSSAPI-encrypted connection
Type "help" for help.

user1=#

O seu acesso na base de dados do AlloyDB Omni é determinado automaticamente com base no seguinte:

  • A sua associação atual a grupos do Active Directory.
  • Os mapeamentos definidos pelo administrador entre esses grupos do Active Directory e as funções do PostgreSQL.
  • As autorizações concedidas pelo administrador a essas funções do PostgreSQL.

Se for a primeira vez que faz a associação, a função de utilizador do PostgreSQL (your_ad_user@YOURDOMAIN.COM) é criada automaticamente.

Sempre que inicia sessão, o sistema verifica as suas associações atuais ao grupo do Active Directory e atualiza as associações de funções correspondentes do PostgreSQL para corresponderem. Não tem de fazer nada de específico para que esta sincronização ocorra.

Exemplo de ligação à base de dados

Por exemplo, suponha que um utilizador, Quinn, faz parte de um grupo do Active Directory denominado ad_developers. O administrador mapeou ad_developers para uma função do postgres com o nome pg_read_only. Esta função tem acesso de leitura a uma tabela denominada sales. Quando o utilizador inicia sessão, pode aceder à tabela.

root@postgres-client:/# kinit quinn@REALM
Password for quinn@YOUR.REALM:

root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
GSSAPI-encrypted connection
Type "help" for help.

postgres=# select * from sales;
// Query will be run successfully

No exemplo seguinte, Quinn é removido do grupo ad_developers no Active Directory:

root@postgres-client:/# kinit quinn@REALM
Password for quinn@YOUR.REALM:

root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
GSSAPI-encrypted connection
Type "help" for help.

postgres=# select * from sales;
// Query will fail

Limitações

  • Gestão manual de grupos e autorizações: esta funcionalidade apenas automatiza a associação de utilizadores a grupos PostgreSQL existentes. A criação desses grupos e a concessão das respetivas autorizações continuam a ser uma tarefa administrativa manual.
  • Latência de sincronização: a associação só é sincronizada quando um utilizador inicia sessão. Todas as alterações feitas à associação de um utilizador a um grupo no Active Directory só são refletidas no AlloyDB Omni na sessão de início de sessão seguinte do utilizador.
  • Desempenho: a pesquisa LDAP adiciona uma pequena quantidade de latência ao processo de início de sessão do utilizador inicial. A colocação em cache ajuda a mitigar esta latência para inícios de sessão subsequentes dentro do tempo de vida configurado (auth_cache_ttl_sec).
  • Processamento de erros: se o servidor LDAP estiver inacessível ou se ocorrerem outros erros durante o processo de sincronização, o AlloyDB Omni regista o erro. No entanto, o início de sessão do utilizador continua a ter êxito, uma vez que a autenticação GSSAPI foi bem-sucedida. Apenas a sincronização de membros do grupo para essa sessão falha.

O que se segue?