为帮助您确保 AlloyDB for PostgreSQL 资源具有强大的安全状况,请遵循本页面中提供的最佳实践。
防止搜索路径劫持
为防止发生搜索路径劫持,请确保高权限用户将 search_path 参数设置为 pg_catalog。这样可确保搜索路径安全,并绕过 public 等不受信任的架构。
如需为用户永久设置此参数,请运行以下命令:
ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;
如需仅为当前会话设置此参数,请运行以下命令:
SET search_path TO pg_catalog,pg_temp;
如需在连接到数据库时为所有用户设置此参数,请运行以下命令:
ALTER DATABASE DB_NAME SET search_path TO schema1, schema2, public;
如需了解详情,请参阅 PostgreSQL 文档中关于安全架构使用的部分以及 CVE-2018-1058 指南。
使用外部数据封装容器保护 BigQuery 数据访问权限
当您使用 BigQuery 外部数据封装容器 (FDW) 时,从 AlloyDB 到 BigQuery 的所有查询都会使用 AlloyDB 集群的服务账号进行身份验证。由于此服务账号可能可以访问多个敏感的 BigQuery 数据集,因此必须防止常规数据库用户映射未经授权的表。
为了强制执行最小权限访问,管理员必须限制外部服务器上的 USAGE 权限。这会在物理上阻止非管理员用户运行 CREATE FOREIGN TABLE 语句。
- 通过确保非管理员角色在外部服务器上没有
USAGE权限来限制外部服务器上的USAGE。如有必要,请从PUBLIC中撤消该令牌。 - 集中创建表:只有数据库管理员(例如具有
alloydbsuperuser角色的用户)才能创建外部表。 - 授予选择性访问权限:管理员可以使用
GRANT SELECT管理对特定外部表的读取访问权限。
示例:配置最小权限访问
以下工作流演示了管理员如何安全地向普通用户 (bob) 授予对特定 BigQuery 表的访问权限,同时禁止他们映射任意数据集。
-- 第 1 步:创建服务器并限制访问权限(以管理员身份执行) ```sql CREATE EXTENSION IF NOT EXISTS bigquery_fdw; CREATE SERVER bq_server FOREIGN DATA WRAPPER bigquery_fdw;
-- 明确撤消所有用户的 USAGE 权限,以防止未经授权创建表 REVOKE ALL ON FOREIGN SERVER bq_server FROM PUBLIC; ```
-- 第 2 步:为常规用户创建用户映射(以管理员身份执行)
sql
CREATE USER MAPPING FOR bob SERVER bq_server;
-- 步骤 3:创建外部表(以管理员身份执行)
-- 由于“bob”没有 bq_server 的 USAGE 权限,因此只有管理员可以运行此命令。
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'
);
-- 第 4 步:授予选择性读取权限(以管理员身份执行)
-- 明确授予常规用户对该特定表的读取权限。
sql
GRANT SELECT ON public.example_table TO bob;