保護 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;

如要進一步瞭解如何保護 public 結構定義,請參閱 PostgreSQL 說明文件中有關安全結構定義用法的說明,以及 CVE-2018-1058 指南。

使用外部資料包裝函式,安全存取 BigQuery 資料

使用 BigQuery 外部資料包裝函式 (FDW) 時,從 AlloyDB 到 BigQuery 的所有查詢都會使用 AlloyDB 叢集的服務帳戶進行驗證。由於這個服務帳戶可能可以存取多個機密 BigQuery 資料集,因此請務必防止一般資料庫使用者對應未經授權的資料表。

如要強制執行最小權限存取,請限制外部伺服器上的 USAGE 權限,讓非管理員使用者無法執行 CREATE FOREIGN TABLE 陳述式:

  1. 限制外部伺服器上的 USAGE:防止非管理員角色擁有 USAGE 權限,並視需要撤銷 PUBLIC 的 USAGE。

  2. 集中建立資料表:僅允許資料庫管理員 (例如具備 alloydbsuperuser 角色的使用者) 建立外部資料表。

  3. 授予特定存取權:使用 GRANT SELECT 管理特定外部資料表的讀取權限。

範例:設定最小權限存取權

下列工作流程說明管理員如何安全地授予一般使用者 (bob) 特定 BigQuery 資料表的存取權,而不允許他們對應任意資料集:

  1. 以管理員身分建立外部伺服器,並撤銷 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;
    
  2. 以管理員身分,為一般使用者建立使用者對應:

    CREATE USER MAPPING FOR bob SERVER bq_server;
    
  3. 以管理員身分建立外部資料表:

    -- 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'
    );
    
  4. 管理員可以將特定外部資料表的讀取權限,選擇性授予一般使用者:

    GRANT SELECT ON public.example_table TO bob;