この記事では、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 管理者ユーザーには、ユーザー、グループ、またはサービス プリンシパルを指定できます。
[前提条件]
- アクティブなサブスクリプションを持つ Azure アカウントが必要です。 無料でアカウントを作成できます。
ネットワーク要件を構成する
Microsoft Entra ID はマルチテナント アプリケーションです。 Microsoft Entra 管理グループの追加などの操作には、送信接続が必要です。
ネットワーク要件はトポロジによって異なります。
- パブリック アクセス (許可された IP アドレス):追加の送信規則は必要ありません。
-
プライベート アクセス (仮想ネットワーク統合):
-
AzureActiveDirectoryサービス タグへのトラフィックのみを許可する送信 NSG 規則を追加します。 - ルート テーブルを使用する場合は、宛先
AzureActiveDirectoryと次ホップInternetを含むルートを追加します。 - プロキシを使用する場合は、
AzureActiveDirectoryサービス タグへの HTTPS トラフィックのみを許可します。
-
-
カスタム DNS:
-
login.microsoftonline.com(認証) とgraph.microsoft.com(Microsoft Graph API) のホスト名がパブリックに解決されていることを確認します。 - 解決に失敗した場合、管理者の割り当てとトークンの取得操作は失敗します。
-
サーバーのプロビジョニング中に Microsoft Entra 管理者を設定するには、次の手順に従います。
- Azure portal で、サーバーのプロビジョニング中に、 PostgreSQL と Microsoft Entra 認証 または Microsoft Entra 認証のいずれかを認証方法としてのみ 選択します。
- [ 管理者の設定 ] タブで、顧客テナントの有効な Microsoft Entra ユーザー、グループ、サービス プリンシパル、またはマネージド ID を選択して、Microsoft Entra 管理者にします。
必要に応じて、 PostgreSQL と Microsoft Entra 認証 方法を使用する場合は、ローカル PostgreSQL 管理者アカウントを追加できます。
注
サーバーのプロビジョニング中に追加できる Microsoft Entra 管理者は 1 つだけです。 サーバーの作成後に、複数の Microsoft Entra 管理者ユーザーを追加できます。
サーバーの作成後に Microsoft Entra 管理者を設定するには、次の手順に従います。
- Azure portal で、Microsoft Entra ID に対して有効にする Azure Database for PostgreSQL フレキシブル サーバーのインスタンスを選択します。
- [ セキュリティ] で、[ 認証] を選択します。 次に、要件に基づいて、認証方法として PostgreSQL 認証と Microsoft Entra 認証 または Microsoft Entra 認証のいずれかを 選択します。
- [ Microsoft Entra Admins の追加] を選択します。 次に、Microsoft Entra 管理者として、顧客テナントの有効な Microsoft Entra ユーザー、グループ、サービス プリンシパル、またはマネージド ID を選択します。
- 保存 を選択します。
Important
管理者を設定すると、完全な管理者アクセス許可を持つ新しいユーザーが Azure Database for PostgreSQL フレキシブル サーバー インスタンスに追加されます。
Microsoft Entra ID を使用して Azure Database for PostgreSQL に接続する
Microsoft Entra の統合は、psql などの標準的な PostgreSQL ツールと連携します。これは Microsoft Entra には対応していません。PostgreSQL に接続する場合にのみ、ユーザー名とパスワードの指定がサポートされます。
次のクライアントをテストしました。
-
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 を開き、[Register>Server] を選択します。
- [ 全般 ] タブで、接続名を入力し、[ 今すぐ接続] をオフにします。
- [ 接続 ] タブで、ホストの詳細を入力します。
ユーザー名を Microsoft Entra UPN (たとえば、
user@tenant.onmicrosoft.com) に設定します。 保存。 - ツリーでサーバーを選択し、[サーバーの 接続] を選択します。
- メッセージが表示されたら、アクセス トークンをパスワードとして貼り付けます。
接続する際の重要な考慮事項を次に示します。
user@tenant.onmicrosoft.comは、Microsoft Entra ユーザーの userPrincipalName です。Azure ユーザーのスペルを正確に確認してください。 Microsoft Entra のユーザー名とグループ名では、大文字と小文字が区別されます。
名前にスペースが含まれている場合は、各スペースの前に円記号 (
\) を使用してエスケープします。 Azure CLI を使用してサインインしているユーザーを取得し、環境変数の値PGUSER設定できます。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 を使用して認証する
このセクションでは、Microsoft Entra グループを使用して接続する方法について説明します。 グループのメンバーであり、グループをデータベースに作成 (マップ) する必要があります。
グループ プリンシパルを作成する
データベースにグループ プリンシパル (ロール) を作成します (必要に応じて表示名を置き換えます)。
select * from pgaadauth_create_principal('Prod DB Readonly', false, false).
グループ同期が無効になっている場合、メンバーはアクセス トークンを使用してサインインし、グループ名をユーザー名として指定できます。
グループ同期が有効になっている場合 (pgaadauth.enable_group_sync サーバー パラメーターが "ON" に設定されている場合)、メンバーは個々の Entra ID 資格情報でサインインする必要がありますが、ユーザー名としてグループ名でサインインすることはできます。
グループ ログインは互換性上の理由から引き続き使用できますが、次の方法で無効にすることができます。
ALTER ROLE "ROLE_NAME" NOLOGIN;同期を維持するために、グループ ロールを削除しないでください。
グループは30分ごとに自動同期します。
手動同期は、
SELECT * FROM pgaadauth_sync_roles_for_group_members();でトリガーできます (pgaadauth.enable_group_syncparam は "ON" である必要があります)。グループ名などのグループ メタデータへの変更が同期されない
グループ メンバーシップの変更が同期される
注
マネージド 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 グループの表示名と完全に一致している必要があります (大文字と小文字が区別されます)。
- メンバー エイリアスではなく、グループ名のみを使用します。
- 必要がある場合はスペースをエスケープする(例:
Prod\ DB\ Readonly)。 - トークンの有効期間は 5 ~ 60 分です。 接続する直前にそれを取得します。は、トークンをスクリプトに格納しません。
ヒント
認証に失敗した場合は、データベース ロールが存在すること (たとえば、 \du) を確認し、 pgaadauth.enable_group_sync 設定を確認します。
これで、Microsoft Entra 認証を使用して PostgreSQL サーバーに対して認証されました。