Práticas recomendadas para proteger seus recursos do AlloyDB para PostgreSQL

Para ajudar você a alcançar uma postura de segurança sólida para seus recursos do AlloyDB para PostgreSQL, siga as práticas recomendadas fornecidas nesta página.

Impedir o sequestro do caminho de pesquisa

Para evitar o sequestro de caminho de pesquisa, defina o parâmetro search_path como pg_catalog para usuários com privilégios elevados. Essa configuração protege o caminho de pesquisa para que esquemas não confiáveis, como public, sejam ignorados.

Para definir esse parâmetro permanentemente para um usuário, execute o seguinte comando:

ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;

Para definir esse parâmetro apenas para a sessão atual, execute o seguinte comando:

SET search_path TO pg_catalog,pg_temp;

Para definir esse parâmetro para todos os usuários quando conectados a um banco de dados, execute o seguinte comando:

ALTER DATABASE DB_NAME SET search_path TO schema1, schema2, public;

Para mais informações sobre como proteger o esquema public, consulte a documentação do PostgreSQL sobre o uso seguro de esquemas e o guia CVE-2018-1058.

Proteger o acesso aos dados do BigQuery usando o wrapper de dados externos

Quando você usa o wrapper de dados externos (FDW, na sigla em inglês) do BigQuery, todas as consultas do AlloyDB para o BigQuery são autenticadas usando a conta de serviço do cluster do AlloyDB. Como essa conta de serviço pode ter acesso a vários conjuntos de dados sensíveis do BigQuery, é fundamental impedir que usuários comuns do banco de dados mapeiem tabelas não autorizadas.

Para aplicar o acesso com privilégio mínimo, restrinja os privilégios USAGE no servidor externo para que os usuários não administradores não possam executar instruções CREATE FOREIGN TABLE:

  1. Restrinja USAGE no servidor externo: impeça que papéis que não sejam de administrador tenham privilégios USAGE e revogue USAGE de PUBLIC, se necessário.

  2. Centralize a criação de tabelas: permita que apenas administradores de banco de dados, como usuários com o papel alloydbsuperuser, criem tabelas externas.

  3. Conceder acesso seletivo: gerencie o acesso de leitura usando GRANT SELECT em tabelas externas específicas.

Exemplo: configurar o acesso com privilégio mínimo

O fluxo de trabalho a seguir demonstra como um administrador pode conceder com segurança a um usuário comum (bob) acesso a uma tabela específica do BigQuery sem permitir que ele mapeie conjuntos de dados arbitrários:

  1. Como administrador, crie o servidor externo e revogue os privilégios USAGE de PUBLIC para evitar a criação não autorizada de tabelas:

    CREATE EXTENSION IF NOT EXISTS bigquery_fdw;
    CREATE SERVER bq_server FOREIGN DATA WRAPPER bigquery_fdw;
    
    -- Explicitly revoke USAGE from all users to prevent unauthorized table creation
    REVOKE ALL ON FOREIGN SERVER bq_server FROM PUBLIC;
    
  2. Como administrador, crie um mapeamento para o usuário comum:

    CREATE USER MAPPING FOR bob SERVER bq_server;
    
  3. Como administrador, crie a tabela externa:

    -- Because 'bob' does not have USAGE on bq_server, only the administrator can run this.
    CREATE FOREIGN TABLE example_table (
        id INT,
        state VARCHAR
    ) SERVER bq_server OPTIONS (
        project 'BIGQUERY_PROJECT_ID',
        dataset 'BIGQUERY_DATASET_NAME',
        table 'example_table'
    );
    
  4. Como administrador, conceda acesso de leitura seletivo na tabela externa específica ao usuário comum:

    GRANT SELECT ON public.example_table TO bob;