保护 AlloyDB for PostgreSQL 资源的安全的最佳实践

为帮助您确保 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 语句。

  1. 通过确保非管理员角色在外部服务器上没有 USAGE 权限来限制外部服务器上的 USAGE。如有必要,请从 PUBLIC 中撤消该令牌。
  2. 集中创建表:只有数据库管理员(例如具有 alloydbsuperuser 角色的用户)才能创建外部表。
  3. 授予选择性访问权限:管理员可以使用 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;