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

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

Impedir o sequestro do caminho de pesquisa

Para impedir o sequestro do caminho de pesquisa, verifique se os usuários com privilégios elevados têm o parâmetro search_path definido como pg_catalog. Isso garante que o caminho de pesquisa esteja protegido e 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, consulte a documentação do PostgreSQL sobre o uso de esquemas seguros e o guia CVE-2018-1058 (links em inglês).

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 de privilégio mínimo, os administradores precisam restringir os privilégios USAGE no servidor externo. Isso impede fisicamente que usuários não administradores executem instruções CREATE FOREIGN TABLE.

  1. Restrinja USAGE no servidor externo, garantindo que as funções não administrativas não tenham privilégios USAGE no servidor externo. Revogue-o de PUBLIC se necessário.
  2. Centralize a criação de tabelas: somente administradores de banco de dados, por exemplo, usuários com a função alloydbsuperuser, podem criar tabelas externas.
  3. Conceda acesso seletivo: os administradores gerenciam o acesso de leitura usando GRANT SELECT em tabelas externas específicas.

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

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

-- Step 1: Create the server and restrict access (Executed as Administrator) ```sql 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; ```

-- Step 2: Create a User Mapping for the regular user (Executed as Administrator) sql CREATE USER MAPPING FOR bob SERVER bq_server;

-- Step 3: Create the Foreign Table (Executed as Administrator) -- Because 'bob' does not have USAGE on bq_server, only the administrator can run this. sql CREATE FOREIGN TABLE example_table ( id INT, state VARCHAR ) SERVER bq_server OPTIONS ( project 'BIGQUERY_PROJECT_ID', dataset 'BIGQUERY_DATASET_NAME', table 'example_table' );

-- Step 4: Grant Selective Read Access (Executed as Administrator) -- Explicitly grant read access to the regular user for this specific table. sql GRANT SELECT ON public.example_table TO bob;