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:
Restrinja
USAGEno servidor externo: impeça que papéis que não sejam de administrador tenham privilégiosUSAGEe revogueUSAGEdePUBLIC, se necessário.Centralize a criação de tabelas: permita que apenas administradores de banco de dados, como usuários com o papel
alloydbsuperuser, criem tabelas externas.Conceder acesso seletivo: gerencie o acesso de leitura usando
GRANT SELECTem 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:
Como administrador, crie o servidor externo e revogue os privilégios
USAGEdePUBLICpara 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;Como administrador, crie um mapeamento para o usuário comum:
CREATE USER MAPPING FOR bob SERVER bq_server;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' );Como administrador, conceda acesso de leitura seletivo na tabela externa específica ao usuário comum:
GRANT SELECT ON public.example_table TO bob;