為確保 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;
如要進一步瞭解如何保護 public 結構定義,請參閱 PostgreSQL 說明文件中有關安全結構定義用法的說明,以及 CVE-2018-1058 指南。
使用外部資料包裝函式,安全存取 BigQuery 資料
使用 BigQuery 外部資料包裝函式 (FDW) 時,從 AlloyDB 到 BigQuery 的所有查詢都會使用 AlloyDB 叢集的服務帳戶進行驗證。由於這個服務帳戶可能可以存取多個機密 BigQuery 資料集,因此請務必防止一般資料庫使用者對應未經授權的資料表。
如要強制執行最小權限存取,請限制外部伺服器上的 USAGE 權限,讓非管理員使用者無法執行 CREATE FOREIGN TABLE 陳述式:
限制外部伺服器上的
USAGE:防止非管理員角色擁有USAGE權限,並視需要撤銷PUBLIC的USAGE。集中建立資料表:僅允許資料庫管理員 (例如具備
alloydbsuperuser角色的使用者) 建立外部資料表。授予特定存取權:使用
GRANT SELECT管理特定外部資料表的讀取權限。
範例:設定最小權限存取權
下列工作流程說明管理員如何安全地授予一般使用者 (bob) 特定 BigQuery 資料表的存取權,而不允許他們對應任意資料集:
以管理員身分建立外部伺服器,並撤銷
PUBLIC的USAGE權限,防止未經授權建立資料表: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;以管理員身分,為一般使用者建立使用者對應:
CREATE USER MAPPING FOR bob SERVER bq_server;以管理員身分建立外部資料表:
-- 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' );管理員可以將特定外部資料表的讀取權限,選擇性授予一般使用者:
GRANT SELECT ON public.example_table TO bob;