Azure Database for PostgreSQL のバックアップについて
Azure Backup と Azure Database Services を連携させることで、バックアップを最大 10 年間保持する、Azure Database for PostgreSQL サーバー向けのエンタープライズ クラスのバックアップ ソリューションが構築されます。 このソリューションには、長期的な保有期間以外に、次の機能が用意されています。
- お客様の管理による個々のデータベース レベルでのスケジュール バックアップとオンデマンド バックアップ。
- PostgreSQL サーバーへのデータベース レベルでの復元、または任意の BLOB ストレージへのデータベース レベルでの復元。
- すべての操作とジョブの一元的な監視。
- バックアップは、個別のセキュリティ ドメインと障害ドメインに保存されます。 何らかの状況で元のサーバーまたはサブスクリプションが侵害された場合は、バックアップ コンテナー (Azure Backup マネージド ストレージ アカウント) でバックアップが安全に保たれます。
- pg_dump を使用すると、復元の柔軟性が向上します。 これは、データベースのバージョン間での復元に役立ちます。
このソリューションは個別に使用できます。また、データ保有期間が最大 35 日の Azure PostgreSQL 提供のネイティブ バックアップ ソリューションに加えて使用することもできます。 ネイティブ ソリューションは、最新のバックアップから復旧する場合など、運用復旧に適しています。 Azure Backup ソリューションを使用すると、コンプライアンスのニーズを満たし、より細かく柔軟なバックアップと復元を行うことができます。
Note
Azure Database for PostgreSQL - 単一サーバーは廃止に向かっており、 2025 年 3 月 28 日までに廃止される予定です。
現在、運用サーバーをホストしている Azure Database for PostgreSQL - 単一サーバー サービスがある場合は、ご使用の Azure Database for PostgreSQL - 単一サーバーを Azure Database for PostgreSQL - フレキシブル サーバーに移行できます。
Azure Database for PostgreSQL - フレキシブル サーバーは、データベース管理機能と構成設定のよりきめ細かな制御と柔軟性のために設計された、運用環境対応のフル マネージド > データベース サービスです。エンタープライズ グレードの Azure Backup によるバックアップを利用できます。 Azure Database for PostgreSQL - フレキシブル サーバーの詳細については、Azure Database for PostgreSQL - フレキシブル サーバーに関するページを参照してください。
バックアップ プロセス
- バックアップ管理者は、バックアップする Azure PostgreSQL データベースを指定できます。 また、指定されたデータベースに接続するために必要な資格情報を格納する Azure Key Vault の詳細を指定することもできます。 これらの資格情報は、Azure Key Vault のデータベース管理者によって安全にシード処理されます。
- 次に、バックアップ サービスは、指定された PostgreSQL サーバーで認証するための適切なアクセス許可と、データベースをバックアップするためのアクセス許可があるかどうかを検証します。
- Azure Backup は、保護された PostgreSQL サーバーと通信するために、バックアップ拡張機能がインストールされている worker ロール (VM) をスピン アップします。 この拡張機能は、コーディネーターと PostgreSQL プラグインで構成されます。 コーディネーターは、バックアップや復元などのさまざまな操作のためにワークフローをトリガーし、プラグインは実際のデータ フローを管理します。
- スケジュールされた時刻になると、コーディネーターはプラグインと通信し、pg_dump (カスタム) を使用して、PostgreSQL サーバーからバックアップ データのストリーミングを開始します。
- このプラグインによって、データが Azure Backup マネージド ストレージ アカウント (バックアップ コンテナーによってマスクされます) に直接送信されるため、ステージング場所は不要になります。 データは Microsoft マネージド キーを使用して暗号化され、Azure Backup サービスによってストレージ アカウントに保存されます。
PostgreSQL サーバーでの Azure Backup 認証
Azure Backup は、Azure によって配置される厳密なセキュリティ ガイドラインに従います。ここではバックアップ対象のリソースに対する権限は想定されておらず、ユーザーが明示的に指定する必要があります。
キーコンテナー ベースの認証モデル
Azure Backup サービスは、各バックアップの実行中に Azure PostgreSQL に接続する必要があります。 この接続には、データベースに対応する ‘username + password’ (または接続文字列) が使用されますが、これらの資格情報は Azure Backup と一緒には格納されません。 代わりに、これらの資格情報は、シークレットとして Azure Key Vault 内にデータベース管理者によって安全にシード処理される必要があります。 ワークロード管理者は、資格情報の管理とローテーションを担当します。Azure Backup、バックアップを取得するために、キー コンテナーから最新のシークレットの詳細を呼び出します。
Azure PostgreSQL データベースのバックアップに必要なアクセス許可のセット
バックアップ資格情報コンテナーの MSI に、次のアクセス許可を付与します。
- Azure PostgreSQL サーバーの閲覧者アクセス権。
- Azure Key Vault の Key Vault シークレット ユーザー (またはシークレットの get、list) アクセス権。
次の場所に対するネットワーク通信経路アクセス権を設定します。
- Azure PostgreSQL サーバー: [Azure サービスへのアクセス許可] フラグを [はい] に設定します。
- キー コンテナー: [信頼された Microsoft サービスを許可する] フラグを [はい] に設定します。
データベースに対するデータベース ユーザーのバックアップ権限
Note
目的のリソースに対する ‘write’ アクセス権がある場合は、バックアップの構成フローでこれらのアクセス許可を 1 回のクリックで付与できます。また、必要なアクセス許可がない場合 (複数のペルソナが関係する場合) は、ARM テンプレートを使用します。
Azure PostgreSQL データベースの復元に必要なアクセス許可のセット
復元のアクセス許可は、バックアップに必要なアクセス許可と似ており、ターゲット PostgreSQL サーバーとそれに対応するキー コンテナーに対するアクセス許可を付与する必要があります。 バックアップの構成フローとは異なり、現在これらのアクセス許可をインラインで付与する操作は用意されていません。 そのため、Postgres サーバーとそれに対応するキー コンテナーへのアクセス許可を手動で付与する必要があります。
さらに、データベース ユーザーが、データベースに対し、キー コンテナーに格納されている資格情報に対応する次の復元権限を持っていることを確認します。
- ALTER USER username CREATEDB;
- azure_pg_admin ロールをデータベース ユーザーに割り当てます。
Microsoft Entra ID ベースの認証モデル
以前、Microsoft Entra ID に全面的に基づく別の認証モデルを発表しています。 しかし、新しいキー コンテナー ベースの認証モデル (前述のとおり) が、構成プロセスを容易にする代替オプションとして提供されるようになりました。
この認証モデルを使用するための自動スクリプトと関連する指示を入手するには、こちらのドキュメントをダウンロードしてください。 これにより、バックアップと復元のために、Azure PostgreSQL サーバーへの適切な一連のアクセス許可が付与されます。
Note
新しいすべての構成の保護は、新しいキー コンテナー認証モデルでのみ実行されます。 ただし、Microsoft Entra ID ベースの認証を使用して保護が構成されている既存のすべてのバックアップ インスタンスは引き続き存在し、定期的なバックアップが行われます。 これらのバックアップを復元するには、Microsoft Entra ID ベースの認証に従う必要があります。
Azure PostgreSQL サーバーとキー コンテナーに対するアクセス許可を手動で付与する
Azure Backup に必要なすべてのアクセス許可を付与するには、次のセクションを参照してください。
Azure PostgreSQL サーバーのアクセス許可
Azure PostgreSQL サーバーで、Azure Backup コンテナーの MSI 閲覧者アクセス権を設定します。
Azure PostgreSQL サーバーでのネットワーク通信経路アクセス権: [Azure サービスへのアクセス許可] フラグを [はい] に設定します。
Azure Key Vault (PostgreSQL サーバーに関連付けられている)に対するアクセス許可
バックアップ コンテナーの MSI Key Vault シークレット ユーザー (またはシークレットの get、list) アクセス権を設定します。 アクセス許可を割り当てるには、ロールの割り当てまたはアクセス ポリシーを使用します。 両方のオプションを使用してアクセス許可を追加するのは役に立たないため、その必要はありません。
Azure のロールベースのアクセス制御 (Azure RBAC) 認可を使用する方法は次のとおりです。つまり、アクセス許可モデルは Azure ロールベースのアクセス制御に設定されます。
- [アクセス制御] で、バックアップ コンテナーの MSI Key Vault シークレット ユーザーに、キー コンテナーへのアクセス権を付与します。 そのロールのベアラーは、シークレットを読み取ることができます。
- Azure RBAC を使用して Azure キー コンテナーへのアクセス許可をアプリケーションに付与します。
アクセス ポリシーを使用する方法は次のとおりです。つまり、アクセス許可モデルはコンテナー アクセス ポリシーに設定されます。
- シークレットに対する Get 権限と List 権限を設定します。
- 「Azure Key Vault アクセス ポリシーを割り当てる」を参照してください。
キー コンテナーでのネットワーク通信経路アクセス権: [信頼された Microsoft サービスを許可する] フラグを [はい] に設定します。
データベースに対するデータベース ユーザーのバックアップ権限
PG 管理ツールで次のクエリを実行します (username をデータベース ユーザー ID に置き換えてください)。
DO $do$
DECLARE
sch text;
BEGIN
EXECUTE format('grant connect on database %I to %I', current_database(), 'username');
FOR sch IN select nspname from pg_catalog.pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO username $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL TABLES IN SCHEMA %I TO username $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON TABLES TO username $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL SEQUENCES IN SCHEMA %I TO username $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON SEQUENCES TO username $$, sch);
END LOOP;
END;
$do$
Note
既にバックアップが構成されているデータベースが UserErrorMissingDBPermissions で失敗する場合、問題の解決については、このトラブルシューティング ガイドを参照してください。
PG 管理ツールを使用する
まだ入手していない場合は、PG 管理ツールをダウンロードします。 このツールを使用して Azure PostgreSQL サーバーに接続できます。 また、データベースと新しいユーザーをこのサーバーに追加することもできます。
任意の名前で新しいサーバーを作成します。 Azure portal の Azure PostgreSQL リソース ビューに表示されるサーバー名と同じホスト名またはアドレス名を入力します。
接続を通過するためのファイアウォール規則に、現在のクライアント ID アドレスを追加してください。
新しいデータベースとデータベース ユーザーをサーバーに追加できます。 データベース ユーザーの場合は、新しいログイン/グループ ロールを追加します。 [ログインできますか?] が [はい] に設定されていることを確認します。