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.
- Restrinja
USAGEno servidor externo, garantindo que as funções não administrativas não tenham privilégiosUSAGEno servidor externo. Revogue-o dePUBLICse necessário. - 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. - Conceda acesso seletivo: os administradores gerenciam o acesso de leitura usando
GRANT SELECTem 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;