為協助您為 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 叢集的服務帳戶,驗證從 AlloyDB 到 BigQuery 的所有查詢。由於這個服務帳戶可能可以存取多個機密 BigQuery 資料集,因此請務必防止一般資料庫使用者對應未經授權的資料表。
如要強制執行最低權限存取權,管理員必須限制外部伺服器上的 USAGE 權限。這樣一來,非管理員使用者就無法執行 CREATE FOREIGN TABLE 陳述式。
- 限制外部伺服器上的
USAGE,確保非管理員角色在外部伺服器上沒有USAGE權限。如有需要,請從PUBLIC撤銷憑證。 - 集中建立資料表:只有資料庫管理員 (例如具備
alloydbsuperuser角色的使用者) 才能建立外部資料表。 - 授予選擇性存取權:管理員可使用特定外部資料表上的
GRANT SELECT管理讀取權。
範例:設定最小權限存取權
以下工作流程說明管理員如何安全地授予一般使用者 (bob) 特定 BigQuery 資料表的存取權,但不允許他們對應任意資料集。
-- 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;