保護 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 叢集的服務帳戶,驗證從 AlloyDB 到 BigQuery 的所有查詢。由於這個服務帳戶可能可以存取多個機密 BigQuery 資料集,因此請務必防止一般資料庫使用者對應未經授權的資料表。

如要強制執行最低權限存取權,管理員必須限制外部伺服器上的 USAGE 權限。這樣一來,非管理員使用者就無法執行 CREATE FOREIGN TABLE 陳述式。

  1. 限制外部伺服器上的 USAGE,確保非管理員角色在外部伺服器上沒有 USAGE 權限。如有需要,請從 PUBLIC 撤銷憑證。
  2. 集中建立資料表:只有資料庫管理員 (例如具備 alloydbsuperuser 角色的使用者) 才能建立外部資料表。
  3. 授予選擇性存取權:管理員可使用特定外部資料表上的 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;