Azure Database for PostgreSQL - フレキシブル サーバーでの認証に Microsoft Entra ID を使用する
適用対象: Azure Database for PostgreSQL - フレキシブル サーバー
この記事では、Azure Database for PostgreSQL フレキシブル サーバーでの認証のために Microsoft Entra ID アクセスを構成します。 Azure Database for PostgreSQL フレキシブル サーバーで Microsoft Entra トークンを使用する方法についても説明します。
Azure Database for PostgreSQL フレキシブル サーバーの Microsoft Entra 認証は、サーバーのプロビジョニング中または後から構成できます。 Microsoft Entra ID ベースの認証用にユーザーを作成または有効化できるのは、Microsoft Entra 管理者ユーザーだけです。 Microsoft Entra 管理者は、そのロールが管理者特権ユーザーのアクセス許可 (CREATEDB など) を持つため、通常のデータベース操作には使用しないことをお勧めします。
Azure Database for PostgreSQL フレキシブル サーバーでは、複数のMicrosoft Entra 管理者ユーザーを持つことができます。 ユーザー、グループ、またはサービス プリンシパルを Microsoft Entra 管理者ユーザーにすることができます。
前提条件
ネットワーク要件を構成する
Microsoft Entra ID はマルチテナント アプリケーションです。 Microsoft Entra 管理者グループの追加など、特定の操作を実行するにはアウトバウンド接続が必要です。 また、ネットワーク トポロジによっては、Microsoft Entra 接続を機能させるためにネットワーク規則が必要です。
パブリック アクセス (許可された IP アドレス): 追加のネットワーク規則は必要ありません。
プライベート アクセス (仮想ネットワーク統合):
AzureActiveDirectory
サービス タグにのみ到達することを仮想ネットワーク トラフィックに許可するアウトバウンド ネットワーク セキュリティ グループ (NSG) 規則が必要です。- ルート テーブルを使用している場合は、宛先サービス タグ
AzureActiveDirectory
とネクスト ホップInternet
を使用してルールを作成する必要があります。 - プロキシを使用している場合は、HTTP/S トラフィックが
AzureActiveDirectory
サービス タグにのみ到達することを許可する新しいファイアウォール規則を必要に応じて追加できます。
カスタム DNS: 仮想ネットワーク (VNET) でカスタム DNS を使用する場合は、追加の考慮事項があります。 このような場合、次のエンドポイントが対応する IP アドレスに解決されることを確認することが重要です。login.microsoftonline.com: このエンドポイントは認証の目的で使用されます。 カスタム DNS セットアップで、login.microsoftonline.com を正しい IP アドレスに解決できることを確認します。chart.microsoft.com: このエンドポイントは、Microsoft Graph API にアクセスするために使用されます。 カスタム DNS セットアップで、graph.microsoft.com を正しい IP アドレスに解決できることを確認します。
サーバーのプロビジョニング中に Microsoft Entra 管理者を設定するには、次の手順に従います。
- Azure portal で、サーバーのプロビジョニング中に認証方法として PostgreSQL と Microsoft Entra 認証を選択するか、または Microsoft Entra 認証のみを選択します。
- [管理者の設定] タブで、顧客テナントの有効な Microsoft Entra ユーザー、グループ、サービス プリンシパル、またはマネージド ID を選択して Microsoft Entra 管理者にします。
PostgreSQL と Microsoft Entra 認証方法を使用することを希望する場合は、必要に応じてローカル PostgreSQL 管理者アカウントを追加できます。
Note
サーバーのプロビジョニング中に追加できる Azure 管理者ユーザーは 1 人のみです。 サーバーの作成後に、複数の Microsoft Entra 管理者ユーザーを追加できます。
サーバーの作成後に Microsoft Entra 管理者を設定するには、次の手順に従います。
- Azure portal で、Microsoft Entra ID に対して有効にする Azure Database for PostgreSQL フレキシブル サーバーのインスタンスを選択します。
- [セキュリティ] で [認証] を選択します。 次に、要件に基づいて、[PostgreSQL と Microsoft Entra ID 認証] または [Microsoft Entra ID 認証のみ] のどちらかを認証方法として選択します。
- [Microsoft Entra 管理者の追加] を選択します。 次に、顧客テナントの有効な Microsoft Entra ユーザー、グループ、サービス プリンシパル、またはマネージド ID を選択して Microsoft Entra 管理者にします。
- [保存] を選択します。
重要
管理者を設定すると、管理者の完全なアクセス許可を持つ新しいユーザーが Azure Database for PostgreSQL フレキシブル サーバーに追加されます。
Microsoft Entra ID を使用して Azure Database for PostgreSQL に接続する
次の概要図は、Azure Database for PostgreSQL で Microsoft Entra 認証を使用するワークフローをまとめたものです。
Microsoft Entra 統合は、psql などの標準的な PostgreSQL ツールと連携します。これらのツールは Microsoft Entra 対応ではなく、PostgreSQL に接続するときにユーザー名とパスワードを指定することのみをサポートしています。 前の図に示されているように、Microsoft Entra トークンがパスワードとして渡されます。
次のクライアントがテストされています。
- psql コマンド ライン:
PGPASSWORD
変数を使用してトークンを渡します。 - Azure Data Studio: PostgreSQL 拡張機能を使用します。
- その他の libpq ベースのクライアント: 例としては、一般的なアプリケーション フレームワークやオブジェクト リレーショナル マッパー (ORM) が含まれます。
- PgAdmin: サーバーの作成時に [今すぐ接続] をオフにします。
Microsoft Entra ID を使用して認証する
Azure Database for PostgreSQL フレキシブル サーバー ユーザーとして Microsoft Entra ID で認証するには、次の手順に従います。 Azure Cloud Shell、Azure 仮想マシン、またはお使いのローカル コンピューター上で、次の手順を実行できます。
ユーザーの Azure サブスクリプションにサインインする
最初に、Azure CLI を使用して Microsoft Entra ID による認証を行います。 この手順は、Azure Cloud Shell では必要ありません。
az login
このコマンドを実行すると、ブラウザー ウィンドウが開き、Microsoft Entra 認証ページが表示されます。 Microsoft Entra のユーザー ID とパスワードを入力するように求められます。
Microsoft Entra アクセス トークンを取得する
Azure CLI を使用して、認証された Microsoft Entra ユーザーのアクセス トークンを取得し、Azure Database for PostgreSQL にアクセスします。 パブリック クラウドの例を次に示します。
az account get-access-token --resource https://ossrdbms-aad.database.windows.net
前出のリソース値は、示されているとおりに指定する必要があります。 他のクラウドの場合、次のコマンドを使用してリソース値を検索できます。
az cloud show
Azure CLI バージョン 2.0.71 以降では、すべてのクラウドに対して、次の便利なバージョンでコマンドを指定できます。
az account get-access-token --resource-type oss-rdbms
認証が成功すると、Microsoft Entra ID は次のアクセス トークンを返します。
{
"accessToken": "TOKEN",
"expiresOn": "...",
"subscription": "...",
"tenant": "...",
"tokenType": "Bearer"
}
トークンは Base64 文字列です。 認証されたユーザーに関するすべての情報をエンコードし、Azure Database for PostgreSQL サービスをターゲットとしています。
クライアント psql でサインインするためのパスワードとしてトークンを使用する
接続時には、PostgreSQL ユーザーのパスワードとしてアクセス トークンを使用することをお勧めします。
psql コマンド ライン クライアントの使用中、PGPASSWORD
環境変数を介してアクセス トークンを渡す必要があります。 理由は、アクセス トークンが、psql で直接受け入れることができるパスワードの長さを超えているためです。
Windows の例を次に示します。
set PGPASSWORD=<copy/pasted TOKEN value from step 2>
$env:PGPASSWORD='<copy/pasted TOKEN value from step 2>'
Linux/macOS の例を次に示します。
export PGPASSWORD=<copy/pasted TOKEN value from step 2>
コマンド置換を使用して、手順 2 と手順 3 を組み合わせることもできます。 トークンの取得は、変数にカプセル化して、PGPASSWORD
環境変数の値として直接渡すことができます。
export PGPASSWORD=$(az account get-access-token --resource-type oss-rdbms --query "[accessToken]" -o tsv)
これで、通常行っているように、Azure Database for PostgreSQL との接続を開始できるようになりました。
psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com dbname=postgres sslmode=require"
PgAdmin でサインインするためのパスワードとしてトークンを使用する
PgAdmin で Microsoft Entra トークンを使用して接続するには、次の手順に従います。
- Pgadmin を開き、左側のメニューから [登録] をクリックし、[サーバー] を選びます
- [全般] タブで接続名を指定し、[今すぐ接続] オプションをオフにします。
- [接続] タブをクリックし、[ホスト名/アドレス] と [ユーザー名] に Azure Database for PostgreSQL フレキシブル サーバー インスタンスの詳細を入力して保存します。 ユーザー名は、お使いの Microsoft Entra ID またはメールアドレスです
- ブラウザー メニューから Azure Database for PostgreSQL フレキシブル サーバー接続を選び、[サーバーに接続] をクリックします
- プロンプトが表示されたら、Active Directory トークンのパスワードを入力します。
接続時の重要な考慮事項を、いくつか次に示します。
user@tenant.onmicrosoft.com
は、Microsoft Entra ユーザーの userPrincipalName です。- Azure ユーザーは正確なスペルで入力してください。 Microsoft Entra ユーザーおよびグループの名前では、大文字と小文字が区別されます。
- 名前にスペースが含まれている場合は、各スペースの前にバックスラッシュ (
\
) を使用してエスケープします。 Azure CLI を使って、サインインしているユーザーを取得し、PGUGSER
環境変数の値を設定できます。export PGUSER=$(az ad signed-in-user show --query "[userPrincipalName]" -o tsv | sed 's/ /\\ /g')
- アクセス トークンの有効性は 5 分から 60 分の範囲内です。 アクセス トークンは、Azure Database for PostgreSQL へのサインインを開始する前に取得する必要があります。
これで、Microsoft Entra 認証によって Azure Database for PostgreSQL サーバーに対して認証されました。
グループ メンバーとして Microsoft Entra ID を使った認証
Azure Database for PostgreSQL フレキシブル サーバーで Microsoft Entra グループを作成する
Microsoft Entra グループがデータベースにアクセスできるようにするには、ユーザーに対して使用したものと同じメカニズムを使用しますが、代わりにグループ名を指定します。 次に例を示します。
select * from pgaadauth_create_principal('Prod DB Readonly', false, false).
グループ メンバーは、サインインするときに自分のアクセス トークンを使用しますが、ユーザー名としてグループ名を指定します。
Note
Azure Database for PostgreSQL フレキシブル サーバーでは、グループ メンバーとしてマネージド ID とサービス プリンシパルがサポートされています。
ユーザーの Azure サブスクリプションにサインインする
Azure CLI を使用して Microsoft Entra ID による認証を行います。 この手順は、Azure Cloud Shell では必要ありません。 ユーザーは、Microsoft Entra グループのメンバーである必要があります。
az login
Microsoft Entra アクセス トークンを取得する
Azure CLI を使用して、認証された Microsoft Entra ユーザーのアクセス トークンを取得し、Azure Database for PostgreSQL にアクセスします。 パブリック クラウドの例を次に示します。
az account get-access-token --resource https://ossrdbms-aad.database.windows.net
初期リソース値は、示されているとおり正確に指定する必要があります。 他のクラウドの場合、次のコマンドを使用してリソース値を検索できます。
az cloud show
Azure CLI バージョン 2.0.71 以降では、すべてのクラウドに対して、次の便利なバージョンでコマンドを指定できます。
az account get-access-token --resource-type oss-rdbms
認証が成功すると、Microsoft Entra ID は次のアクセス トークンを返します。
{
"accessToken": "TOKEN",
"expiresOn": "...",
"subscription": "...",
"tenant": "...",
"tokenType": "Bearer"
}
psql または PgAdmin でサインインするためのパスワードとしてトークンを使用する
グループ メンバーとして接続するときに不可欠な考慮事項は次のとおりです。
- グループ名は、接続しようとしている Microsoft Entra グループの名前です。
- Microsoft Entra グループの名前は正確なスペルで入力してください。 Microsoft Entra ユーザーおよびグループの名前では、大文字と小文字が区別されます。
- グループとして接続する場合は、グループ メンバーの別名ではなく、グループ名のみを使用します。
- 名前にスペースが含まれている場合は、各スペースの前にバックスラッシュ (
\
) を使用してエスケープします。 - アクセス トークンの有効性は 5 分から 60 分の範囲内です。 アクセス トークンは、Azure Database for PostgreSQL へのサインインを開始する前に取得することをお勧めします。
これで、Microsoft Entra 認証によって PostgreSQL サーバーに対して認証されました。