Microsoft Entra ID を使用し、Azure Cosmos DB for PostgreSQL で認証するためのネイティブ PostgreSQL ロールを使用する
適用対象: Azure Cosmos DB for PostgreSQL (PostgreSQL の Citus データベース拡張機能を利用)
この記事では、Azure Cosmos DB for PostgreSQL の認証方法を構成します。 Microsoft Entra ID 管理者ユーザーと、Azure Cosmos DB for PostgreSQL で認証するためのネイティブ PostgreSQL ロールを管理します。 また、Azure Cosmos DB for PostgreSQL で Microsoft Entra ID トークンを使う方法についても説明します。
Azure Cosmos DB for PostgreSQL クラスターは、'citus' という名前の 1 つの組み込みのネイティブ PostgreSQL ロールを使用して作成されます。 クラスターのプロビジョニングが完了した後に、より多くのネイティブ PostgreSQL ロールを追加できます。
Azure Cosmos DB for PostgreSQL 用に Microsoft Entra ID (旧称 Azure Active Directory) 認証を構成することもできます。 クラスターでのネイティブの PostgreSQL 認証に加えて、またはその代わりに、Microsoft Entra ID 認証を有効にできます。 クラスターで有効になっている認証方法は、クラスターがプロビジョニングされた後の任意の時点で変更できます。 Microsoft Entra ID 認証が有効になっている場合は、Azure Cosmos DB for PostgreSQL クラスターに複数の Microsoft Entra ID ユーザーを追加し、それらのいずれかを管理者にできます。 Microsoft Entra ID ユーザーは、ユーザーでもサービス プリンシパルでもかまいません。
認証方法の選択
Azure Cosmos DB for PostgreSQL クラスターで認証方法を構成するには、Azure portal を使用する必要があります。
Microsoft Entra ID 認証とネイティブ PostgreSQL 認証を有効または無効にするには、Azure Cosmos DB for PostgreSQL クラスターで次のことを行います。
- [クラスター] ページの [クラスター管理] 見出しで、[認証] を選択して認証管理オプションを開きます。
- [認証方法] セクションで、要件に基づく認証方法として [PostgreSQL 認証のみ]、[Microsoft Entra ID 認証]、または [PostgreSQL と Microsoft Entra ID 認証] を選びます。
完了したら、同じ [認証] ページで「Microsoft Entra ID 認証の構成」または「ネイティブ PostgreSQL ロールの追加」に進みます。
Microsoft Entra ID 認証の構成
前提条件
ユーザーは、Microsoft Entra ID テナントでの Azure Cosmos DB for PostgreSQL へのサインインを許可されている必要があります。 これらの手順は、Azure Cosmos DB for PostgreSQL クラスターでの認証に使われる Microsoft Entra ID テナントに対して 1 回実行する必要があります。
重要
変更を行うには、Microsoft Entra ID テナント管理者のアクセス許可が必要です。 アクセス許可のトラブルシューティングに関するガイダンスをご覧ください。
- Azure portal で "Microsoft Entra ID" を検索します。
- "Microsoft Entra ID" サービスを開きます。
- Microsoft Entra ID サービスの [概要] ページの [概要] セクションで、"b4fa09d8-5da5-4352-83d9-05c2a44cf431" というアプリケーション ID を検索します。
- 検索結果で "Azure Cosmos DB for PostgreSQL AAD Authentication" エンタープライズ アプリケーションを選びます。
- Azure Cosmos DB for PostgreSQL AAD Authentication エンタープライズ アプリケーションで、[プロパティ] ページを選びます。
- [ユーザーのサインインが有効になっていますか?] を [はい] に設定して、変更を保存します。
Note
エンタープライズ アプリケーションのプロパティ ([ユーザーのサインインが有効になっていますか?] など) を編集するには、グローバル管理者、クラウド アプリケーション管理者、またはアプリケーション管理者のロールに付与されたアクセス許可が必要になります。 組み込みの Microsoft Entra ロールの一覧に関するページを参照してください。.
Microsoft Entra ID 管理者を Azure Cosmos DB for PostgreSQL クラスターに追加する
クラスターで Microsoft Entra ID ロールを追加または削除するには、[認証] ページで次の手順のようにします。
- [Microsoft Entra ID 認証] セクションで、[Microsoft Entra ID 管理者の追加] を選びます。
- [Select Microsoft Entra ID Admins] (Microsoft Entra ID 管理者の選択) パネルで、Azure Cosmos DB for PostgreSQL クラスターの Microsoft Entra ID 管理者として、現在の AD テナント内の有効な Microsoft Entra ユーザーまたはエンタープライズ アプリケーションを 1 つ以上選びます。
- [選択] で選択を確認します。
- [認証] ページで、ツール バーの [保存] を選択して変更を保存するか、ネイティブ PostgreSQL ロールの追加に進みます。
ネイティブ PostgreSQL 認証を構成する
クラスターで Postgres ロールを追加または削除するには、[認証] ページで次の手順に従います:
- [PostgreSQL 認証] セクションで、[PostgreSQL ロールの追加] を選択します。
- ロール名とパスワードを入力します。 [保存] を選択します。
- [認証] ページで、ツール バーの [保存] を選んで変更を保存するか、Microsoft Entra ID 管理者ユーザーの追加に進みます。
ネイティブ PostreSQL ユーザーは、クラスターのコーディネーター ノード上に作成され、すべてのワーカー ノードに伝達されます。 Azure portal によって作成されたロールには LOGIN 属性があります。つまり、これらはデータベースにサインインできる実際のユーザーであることを意味します。
Microsoft Entra ID 認証を使用して Azure Cosmos for PostgreSQL に接続する
Microsoft Entra ID 統合は、psql などの標準的な PostgreSQL クライアント ツールで動作します。これらのツールは Microsoft Entra ID 対応ではなく、PostgreSQL に接続するときのユーザー名とパスワードの指定のみをサポートします。 このような場合は、Microsoft Entra ID トークンがパスワードとして渡されます。
次のクライアントがテストされました。
- psql コマンド ライン:
PGPASSWORD
変数を使用してトークンを渡します。 - その他の libpq ベースのクライアント: 例としては、一般的なアプリケーション フレームワークやオブジェクト リレーショナル マッパー (ORM) が含まれます。
- pgAdmin: サーバーの作成時に [今すぐ接続] をオフにします。
次の手順を使って Azure Cosmos DB for PostgreSQL ユーザーとして Microsoft Entra を認証します。 Azure Cloud Shell、Azure 仮想マシン、またはお使いのローカル コンピューター上で、次の手順を実行できます。
ユーザーの Azure サブスクリプションにサインインする
最初に、Azure CLI を使用して Microsoft Entra ID による認証を行います。 この手順は、Azure Cloud Shell では必要ありません。
az login
このコマンドを実行すると、ブラウザー ウィンドウが開き、Microsoft Entra ID 認証ページが表示されます。 Microsoft Entra ID のユーザー名とパスワードの入力を求められます。
認証に使用するユーザー アカウント名 (例: user@tenant.onmicrosoft.com) は、次の手順でアクセス トークンが生成されるユーザー アカウント名です。
Microsoft Entra ID のアクセス トークンを取得する
Azure CLI を使って、Microsoft Entra ID で認証されたユーザーが Azure Cosmos for PostgreSQL にアクセスするためのアクセス トークンを取得します。 次に例を示します。
az account get-access-token --resource https://token.postgres.cosmos.azure.com
認証が成功すると、Microsoft Entra ID は現在の Azure サブスクリプションのアクセス トークンを返します:
{
"accessToken": "[TOKEN]",
"expiresOn": "[expiration_date_and_time]",
"subscription": "[subscription_id]",
"tenant": "[tenant_id]",
"tokenType": "Bearer"
}
トークンは Base64 文字列です。 これは、認証されたユーザーに関するすべての情報をエンコードし、Azure Cosmos DB for PostgreSQL サービスに関連付けられています。 トークンは少なくとも 5 分間有効で、最大 90 分です。 expiresOn は、実際のトークンの有効期限を定義します。
クライアント psql でサインインするためのパスワードとしてトークンを使用する
接続時には、PostgreSQL ユーザーのパスワードとしてアクセス トークンを使用することをお勧めします。
psql コマンド ライン クライアントの使用中、PGPASSWORD
環境変数を介してアクセス トークンを渡す必要があります。 理由は、アクセス トークンが、psql で直接受け入れることができるパスワードの長さを超えているためです。
Windows の例を次に示します。
set PGPASSWORD=<TOKEN value from the previous step>
$env:PGPASSWORD='<TOKEN value from the previous step>'
Linux/macOS の例を次に示します。
export PGPASSWORD=<TOKEN value from the previous step>
また、コマンド置換を使用して、前の 2 つの手順を組み合わせることもできます。 トークンの取得は、変数にカプセル化して、PGPASSWORD
環境変数の値として直接渡すことができます。
export PGPASSWORD=$(az account get-access-token --resource https://token.postgres.cosmos.azure.com --query "[accessToken]" -o tsv)
Note
PGPASSWORD 変数に、Microsoft Entra ID 認証のサブスクリプション用の Microsoft Entra ID アクセス トークンが設定されていることを確認します。 同じセッションから Postgres ロール認証を行う必要がある場合は、PGPASSWORD を Postgres ロールのパスワードに設定するか、PGPASSWORD 変数の値をクリアしてパスワードを対話形式で入力できます。 PGPASSWORD の間違った値で認証が失敗します。
これで、アクセス トークンが生成された Microsoft Entra ID ユーザー アカウントを使用して、Azure Cosmos DB for PostgreSQL との接続を開始できます。 この操作ではいつもと同じように、ユーザー アカウントをユーザーとして使用し、コマンド ラインに "password" パラメータは指定しません:
psql "host=mycluster.[uniqueID].postgres.cosmos.azure.com user=user@tenant.onmicrosoft.com dbname=[db_name] sslmode=require"
PgAdmin でサインインするためのパスワードとしてトークンを使用する
PgAdmin で Microsoft Entra ID トークンを使って接続するには、次の手順のようにします。
- サーバーの作成時に [今すぐ接続] オプションをオフにします。
- [接続] タブにサーバーの詳細を入力し、保存します。
- [ユーザー名] で有効な Microsoft Entra ID ユーザーが指定されていることを確認します。
- pgAdmin オブジェクト メニューの [サーバーの接続] を選択します。
- プロンプトが表示されたら、Microsoft Entra ID トークンのパスワードを入力します。
接続時の重要な考慮事項を、いくつか次に示します。
user@tenant.onmicrosoft.com
は、Microsoft Entra ID ユーザーの名前です- Azure ユーザーは正確なスペルで入力してください。 Microsoft Entra ID ユーザーとグループの名前では、大文字と小文字が区別されます。
- 名前にスペースが含まれている場合は、各スペースの前にバックスラッシュ (
\
) を使用してエスケープします。 - アクセス トークンの有効性は 5 分から 90 分の範囲内です。 アクセス トークンは、Azure COsmos for PostgreSQL へのサインインを開始する前に取得する必要があります。
これで、Microsoft Entra ID 認証によって Azure Cosmos for PostgreSQL サーバーへの認証が行われました。
ネイティブ PostgreSQL ロールの管理
クラスターでネイティブ PostgreSQL 認証が有効になっている場合は、組み込みの 'citus' ロールに加えて Postgres ロールを追加および削除できます。 また、パスワードをリセットしたり、ネイティブ ロールの Postgres 特権を変更したりすることもできます。
ネイティブ PostgreSQL ユーザー ロールの削除またはパスワードの変更方法
ユーザーを更新するには、クラスターの [認証] ページに移動して、ユーザーの横にある省略記号 [...] を選択します。 省略記号をクリックすると、ユーザーの削除やパスワードのリセットのためのメニューが表示されます。
citus
ロールには特権が与えられているため、削除できません。 ただし、クラスターに対して "Microsoft Entra ID 認証のみ" の認証方法が選択されている場合、citus
ロールは "無効" になります。
ユーザー ロールの特権を変更する方法
新しいユーザー ロールは一般に、制限された特権でデータベースへのアクセスを提供するために使用されます。 ユーザーの特権を変更するには、PgAdmin や psql などのツールを使用して、標準的な PostgreSQL コマンドを使用します。 詳細については、クラスターへの接続に関するページを参照してください。
たとえば、PostgreSQL db_user
に mytable
の読み取りを許可するには、次のようにアクセス許可を付与します:
GRANT SELECT ON mytable TO db_user;
Microsoft Entra ID ロール user@tenant.onmicrosoft.com
に同じアクセス許可を付与するには、次のコマンドを使います。
GRANT SELECT ON mytable TO "user@tenant.onmicrosoft.com";
Azure Cosmos DB for PostgreSQL で、単一テーブルの GRANT ステートメントがクラスター全体に伝達され、すべてのワーカー ノードに適用されます。 また、システム全体の (たとえば、スキーマ内のすべてのテーブルに対する) GRANT も伝達されます。
-- applies to the coordinator node and propagates to worker nodes for Postgres role db_user
GRANT SELECT ON ALL TABLES IN SCHEMA public TO db_user;
または Microsoft Entra ID ロールの場合
-- applies to the coordinator node and propagates to worker nodes for Azure AD role user@tenant.onmicrosoft.com
GRANT SELECT ON ALL TABLES IN SCHEMA public TO "user@tenant.onmicrosoft.com";