次の方法で共有


Microsoft Entra ID を使用し、Azure Cosmos DB for PostgreSQL で認証するためのネイティブ PostgreSQL ロールを使用する

重要

Azure Cosmos DB for PostgreSQL は、新しいプロジェクトではサポートされなくなりました。 このサービスは、新しいプロジェクトには使用しないでください。 代わりに、次の 2 つのサービスのいずれかを使用します。

この記事では、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 クラスターで次のことを行います。

  1. [クラスター] ページの見出し [クラスターの管理] で、[認証] を選択して認証管理オプションを開きます。
  2. [認証方法] セクションで、要件に基づく認証方法として [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 テナント管理者のアクセス許可が必要です。 アクセス許可のトラブルシューティングに関するガイダンスをご覧ください。

  1. Azure portal で "Microsoft Entra ID" を検索します。
  2. "Microsoft Entra ID" サービスを開きます。
  3. Microsoft Entra ID サービスの [概要] ページの [概要] セクションで、"b4fa09d8-5da5-4352-83d9-05c2a44cf431" というアプリケーション ID を検索します。
  4. 検索結果で "Azure Cosmos DB for PostgreSQL AAD Authentication" エンタープライズ アプリケーションを選びます。
  5. Azure Cosmos DB for PostgreSQL AAD Authentication エンタープライズ アプリケーションで、[プロパティ] ページを選びます。
  6. [ユーザーのサインインが有効になっていますか?][はい] に設定して、変更を保存します。

Note

"ユーザーのサインイン有効" などのエンタープライズ アプリケーションのプロパティを編集するには、ロールにエンタープライズ アプリケーションのプロパティを更新する権限を持つアクセス許可を付与する必要があります。 エンタープライズ アプリケーション所有者などのロールには、"エンタープライズ アプリケーションのプロパティの更新" アクセス許可が必要です。 詳細については、「タスクごとの Microsoft Entra 最小特権ロール - エンタープライズ アプリケーション」を参照してください。

Microsoft Entra ID 管理者を Azure Cosmos DB for PostgreSQL クラスターに追加する

クラスターで Microsoft Entra ID ロールを追加または削除するには、[認証] ページで次の手順のようにします。

  1. [Microsoft Entra ID 認証] セクションで、[Microsoft Entra ID 管理者の追加] を選びます。
  2. [Select Microsoft Entra ID Admins] (Microsoft Entra ID 管理者の選択) パネルで、Azure Cosmos DB for PostgreSQL クラスターの Microsoft Entra ID 管理者として、現在の AD テナント内の有効な Microsoft Entra ユーザーまたはエンタープライズ アプリケーションを 1 つ以上選びます。
  3. [選択] を使用して選択内容を確認します。
  4. [認証] ページのツール バーで [保存] を選択して、変更を保存するか、ネイティブ PostgreSQL ロールの追加に進みます。

ネイティブ PostgreSQL 認証を構成する

クラスターで Postgres ロールを追加するには、[認証] ページで次の手順に従います。

  1. [PostgreSQL 認証] セクションで、[PostgreSQL ロールの追加] を選択します。
  2. ロール名とパスワードを入力します。 [保存] を選択します。
  3. [認証] ページで、ツール バーの [保存] を選んで変更を保存するか、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"
}

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

  1. サーバーの作成時に [今すぐ接続] オプションをオフにします。
  2. [接続] タブにサーバーの詳細を入力し、保存します。
    1. [ユーザー名] で有効な Microsoft Entra ID ユーザーが指定されていることを確認します。
  3. pgAdmin の [オブジェクト] メニューから [サーバーの接続] を選択します。
  4. プロンプトが表示されたら、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";

次のステップ