この記事では、Azure Migrate の検出と評価に必要な最小限のアクセス許可を持つカスタム PostgreSQL アカウントを作成する方法について説明します。
検出を開始する前に、PostgreSQL インスタンスに接続するように PostgreSQL アカウントを使用して Azure Migrate アプライアンスを構成します。 スーパーユーザー アカウントの使用を回避するために、検出と評価のためにメタデータを収集するために必要なアクセス許可のみを持つカスタム アカウントを作成できます。 PostgreSQL の検出と評価のアプライアンス構成に、このカスタム アカウントを追加します。 このドキュメントで提供されている最小限の特権アカウント プロビジョニング ユーティリティを使用して、セットアップを簡略化できます。
[前提条件]
- 実行中でアクセス可能な PostgreSQL サーバー。
- PostgreSQL インスタンスへのスーパーユーザー アクセス。
- Azure Migrate プロジェクトのセットアップ。
最低限必要な特権
Azure Migrate でセキュリティとコンプライアンスを確保するには、必要なアクセス許可のみを持つ PostgreSQL ユーザーを作成します。これにより、不正アクセスや意図しない変更のリスクを最小限に抑えることができます。
Azure Migrate の要件に基づいて、必要な最小特権は次のとおりです。
データベース レベルのアクセス許可
-
CONNECT: データベースへのアクセス -
pg_read_all_settings: サーバー構成パラメーターの読み取り -
pg_read_all_stats: データベース統計へのアクセス -
pg_monitor: データベース のパフォーマンス メトリックを監視する
SQL スクリプトの実装
次の内容を CreateUser.sqlとして保存します。
-- PostgreSQL Script to Create a Least-Privilege User for Azure Migrate
-- Usage: Replace :username and :password with actual values when executing.
-- Parameters:
-- :username - The username for the new user
-- :password - The password for the new user
-- Check if the user already exists
SELECT CASE
WHEN EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username')
THEN 'User ' || :'username' || ' already exists, skipping creation'
ELSE
'User ' || :'username' || ' does not exist, proceeding with creation'
END AS user_check;
-- Only proceed if user doesn't exist
SELECT NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username') AS should_create \gset
\if :should_create
BEGIN;
-- Create the user with minimal privileges
CREATE USER :"username" WITH PASSWORD :'password' LOGIN
NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS;
-- Grant CONNECT privilege on all non-template databases
SELECT 'GRANT CONNECT ON DATABASE ' || quote_ident(datname) || ' TO ' || :'username' || ';'
FROM pg_database WHERE datistemplate = false; \gexec
-- Grant required monitoring and read permissions
GRANT pg_read_all_settings TO :"username";
GRANT pg_read_all_stats TO :"username";
GRANT pg_monitor TO :"username";
-- Log the user creation
SELECT 'Azure Migrate user ' || :'username' || ' created successfully with least privileges.' AS result;
COMMIT;
\endif
-- Usage instructions:
-- Replace :username and :password with actual values using psql variables:
-- psql -v username=myuser -v password=mypassword -f CreateUser.sql
注
このユーザーには、Azure Migrate の検出と評価に必要な最小限の特権しかありません。
- ユーザーは、データベース、ロール、またはレプリケートを作成できません。
- 常に強力なパスワードを使用し、組織のセキュリティ ポリシーに従ってください。
使用手順
指定された SQL スクリプトを使用するには、次の手順に従います。
- スクリプトを
CreateUser.sqlとして保存します。 -
psql変数を使用して、ユーザー名とパスワードのプレースホルダーを目的の値に置き換えます。
スクリプトを実行する
スーパーユーザー特権を持つ PostgreSQL コマンド ライン ツール (psql) を使用してスクリプトを実行します。 プレースホルダーを実際の値に置き換えます。
psql -h <hostname> -p <port> -d <database> -U <superuser> \
-v username=<<Az Migrate username>> \
-v password='your_secure_password' \
-f CreateUser.sql
ユーザーの作成を確認する
ユーザーが作成され、適切な特権が割り当てられているのを確認するには、次のクエリを実行します。
-- Check if the user exists and review key attributes
SELECT usename, usecreatedb, usesuper, userepl
FROM pg_catalog.pg_user
WHERE usename = '<<Az Migrate username>>';
false は usecreatedb、usesuper、および userepl に対して表示されるべき結果です。
付与されたロールベースの特権を確認する
次のクエリを実行して、ユーザーに必要な監視ロールがあることを確認します。 これにより、アカウントに Azure Migrate 操作に必要なアクセス許可のみが付与されます。
-- Verify the user exists
SELECT rolname
FROM pg_roles
WHERE rolname = '<<Az Migrate username>>';
-- Check membership in monitoring roles
SELECT r.rolname AS granted_role
FROM pg_auth_members m
JOIN pg_roles r ON m.roleid = r.oid
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = '<<Az Migrate username>>');
これらのクエリを実行すると、ユーザーが存在し、Azure Migrate の検出と評価に必要なアクセス許可のみが付与されていることがわかります。
考慮事項
Azure Migrate 専用の最小特権 PostgreSQL アカウントを使用し、アクセス許可を定期的に確認し、資格情報をローテーションし、アクティビティを監視し、不要になったらアカウントを無効にします。
-
<<Az Migrate username>>と<PASSWORD>は、選択したユーザー名と、最小特権ユーザーの強力なパスワードに置き換えます。 - ユーザーの作成とロールの割り当てには昇格されたアクセス権が必要なので、スーパーユーザー特権でスクリプトを実行します。
- スクリプトを実行する前に、PostgreSQL インスタンスが実行されていてアクセス可能であることを確認します。
- 運用環境で使用する前に、開発環境またはステージング環境でスクリプトをテストします。
- パスワードの複雑さと管理については、組織のセキュリティに関するベスト プラクティスに従ってください。
- スクリプトの実行後、付与されたアクセス許可を確認して、セキュリティ要件を満たしていることを確認します。
- 問題が発生した場合は、 PostgreSQL のドキュメント を参照するか、データベース管理者に問い合わせてサポートを受けます。