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 データセットにアクセスできる可能性があるため、通常のデータベース ユーザーが未承認のテーブルをマッピングできないようにすることが重要です。
最小権限のアクセスを適用するには、管理者以外のユーザーが CREATE FOREIGN TABLE ステートメントを実行できないように、外部サーバーの USAGE 権限を制限します。
外部サーバーで
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;