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 管理者を設定するには、次の手順に従います。

  1. Azure portal で、サーバーのプロビジョニング中に認証方法として PostgreSQL と Microsoft Entra 認証を選択するか、または Microsoft Entra 認証のみを選択します。
  2. [管理者の設定] タブで、顧客テナントの有効な Microsoft Entra ユーザー、グループ、サービス プリンシパル、またはマネージド ID を選択して Microsoft Entra 管理者にします。

PostgreSQL と Microsoft Entra 認証方法を使用することを希望する場合は、必要に応じてローカル PostgreSQL 管理者アカウントを追加できます。

Note

サーバーのプロビジョニング中に追加できる Azure 管理者ユーザーは 1 人のみです。 サーバーの作成後に、複数の Microsoft Entra 管理者ユーザーを追加できます。

サーバーのプロビジョニング中に Microsoft Entra 管理者を設定するための選択を示すスクリーンショット。]

サーバーの作成後に Microsoft Entra 管理者を設定するには、次の手順に従います。

  1. Azure portal で、Microsoft Entra ID に対して有効にする Azure Database for PostgreSQL フレキシブル サーバーのインスタンスを選択します。
  2. [セキュリティ][認証] を選択します。 次に、要件に基づいて、[PostgreSQL と Microsoft Entra ID 認証] または [Microsoft Entra ID 認証のみ] のどちらかを認証方法として選択します。
  3. [Microsoft Entra 管理者の追加] を選択します。 次に、顧客テナントの有効な Microsoft Entra ユーザー、グループ、サービス プリンシパル、またはマネージド ID を選択して Microsoft Entra 管理者にします。
  4. [保存] を選択します。

サーバーの作成後に Microsoft Entra 管理者を設定するための選択を示すスクリーンショット。

重要

管理者を設定すると、管理者の完全なアクセス許可を持つ新しいユーザーが Azure Database for PostgreSQL フレキシブル サーバーに追加されます。

Microsoft Entra ID を使用して Azure Database for PostgreSQL に接続する

次の概要図は、Azure Database for PostgreSQL で Microsoft Entra 認証を使用するワークフローをまとめたものです。

Microsoft Entra ID、ユーザーのコンピューター、サーバー間の認証フローの図。

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 トークンを使用して接続するには、次の手順に従います。

  1. Pgadmin を開き、左側のメニューから [登録] をクリックし、[サーバー] を選びます
  2. [全般] タブで接続名を指定し、[今すぐ接続] オプションをオフにします。
  3. [接続] タブをクリックし、[ホスト名/アドレス][ユーザー名] に Azure Database for PostgreSQL フレキシブル サーバー インスタンスの詳細を入力して保存します。 ユーザー名は、お使いの Microsoft Entra ID またはメールアドレスです
  4. ブラウザー メニューから Azure Database for PostgreSQL フレキシブル サーバー接続を選び、[サーバーに接続] をクリックします
  5. プロンプトが表示されたら、Active Directory トークンのパスワードを入力します。

PG 管理者を使用したログイン プロセスを示すスクリーンショット。

接続時の重要な考慮事項を、いくつか次に示します。

  • 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 サーバーに対して認証されました。

次のステップ