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 テーブルへのアクセス権を安全に付与する方法を示します。

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