Azure Cosmos DB for PostgreSQL でのパブリック アクセス

適用対象: Azure Cosmos DB for PostgreSQL (PostgreSQL の Citus データベース拡張機能を利用)

Azure Cosmos DB for PostgreSQL では、次の 3 つのネットワーク オプションに対応しています。

  • アクセス権なし
    • これは、パブリックまたはプライベート アクセスが有効になっていない場合に、新しく作成されるクラスターの既定値です。 Azure の内部でも外部でも、データベース ノードに接続できるコンピューターはありません。
  • パブリック アクセス
    • コーディネーター ノードには、パブリック IP アドレスが割り当てられます。
    • コーディネーターノードへのアクセスは、ファイアウォールによって保護されています。
    • 必要に応じて、すべてのワーカー ノードへのアクセスを有効にすることができます。 この場合、パブリック IP アドレスはワーカー ノードに割り当てられ、同じファイアウォールによって保護されます。
  • プライベート アクセス
    • クラスターのノードには、プライベート IP アドレスのみが割り当てられます。
    • 各ノードには、選択した仮想ネットワーク内のホストがノードにアクセスできるように、プライベート エンドポイントが必要です。
    • ネットワーク セキュリティ グループなどの Azure 仮想ネットワークのセキュリティ機能は、アクセス制御に使用できます。

クラスターを作成する場合は、パブリックまたはプライベート アクセスを有効にするか、既定の [アクセスなし] を選択することができます。 クラスターを作成したら、パブリック アクセスとプライベート アクセスの切り替えを選択するか、両方とも一度にアクティブ化することができます。

このページでは、パブリック アクセス オプションについて説明します。 プライベート アクセスについては、Azure Cosmos DB for PostgreSQL のプライベート アクセスに関する記事を参照してください。

ファイアウォールの概要

Azure Cosmos DB for PostgreSQL サーバーのファイアウォールを使用すると、どのコンピューターに権限を持たせるかをユーザーが指定するまで、コーディネーター ノードへのすべてのアクセスが遮断されます。 ファイアウォールは、各要求の送信元 IP アドレスに基づいてサーバーへのアクセス権を付与します。 ファイアウォールを構成するには、受け入れ可能な IP アドレスの範囲を指定するファイアウォール規則を作成します。 ファイアウォール規則はサーバー レベルで作成できます。

ファイアウォール規則: これらの規則により、クライアントは、コーディネーター ノード、つまり、同じ論理サーバー内のすべてのデータベースにアクセスできるようになります。 サーバー レベルのファイアウォール規則を構成するには、Azure portal を使用します。 サーバー レベルのファイアウォール規則を作成するには、サブスクリプション所有者またはサブスクリプション共同作成者である必要があります。

既定では、コーディネーター ノードへのすべてのデータベース アクセスが、ファイアウォールによってブロックされます。 他のコンピューターからサーバーの使用を開始するには、サーバー レベルのファイアウォール規則を 1 つ以上指定して、サーバーへのアクセスを有効にする必要があります。 ファイアウォール規則を使用して、インターネットからのアクセスを許可する IP アドレス範囲を指定します。 Azure Portal Web サイト自体へのアクセスは、ファイアウォール規則の影響は受けません。 次の図に示すように、インターネットや Azure からの接続試行は、PostgreSQL データベースに到達する前に、まずファイアウォールを通過する必要があります。

リモート システムとローカル システムの間のサーバー レベルのファイアウォール規則と失敗した接続を示す図。

インターネットおよび Azure からの接続

クラスター ファイアウォールを使用すると、グループのコーディネーター ノードに接続できるユーザーが制御されます。 ファイアウォールは、構成可能な規則の一覧を調べてアクセスを決定します。 各規則は、許可される IP アドレスまたはアドレスの範囲です。

ファイアウォールによって接続がブロックされると、アプリケーション エラーが発生する可能性があります。 たとえば、PostgreSQL JDBC ドライバーを使用すると、次のようなエラーが発生します。

java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: FATAL: no pg\_hba.conf entry for host "123.45.67.890", user "citus", database "citus", SSL

ルールの定義方法については、ファイアウォール規則の作成および管理に関する記事をご覧ください。

データベース サーバー ファイアウォールのトラブルシューティング

Microsoft Azure Cosmos DB for PostgreSQL サービスへのアクセスが予想どおりに実行されない場合は、次の点を検討してください。

  • 許可一覧に変更が反映されない: Azure Cosmos DB for PostgreSQL ファイアウォールの構成に対する変更が反映されるまで、最大 5 分の遅延が発生する場合があります。

  • ユーザーが認可されない、または正しくないパスワードが使用された: ユーザーがサーバーに対するアクセス許可を持っていない場合、または使用したパスワードが正しくない場合は、サーバーへの接続が拒否されます。 ファイアウォール設定の作成によってクライアントに提供されるのは、サーバーへの接続を試行する機会のみです。 各クライアントは、必要なセキュリティ資格情報を提供する必要があることに変わりはありません。

    たとえば、JDBC クライアントを使用すると、次のエラーが表示されることがあります。

    java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "yourusername"

  • 動的 IP アドレス: 動的 IP アドレス指定によるインターネット接続を使用しており、ファイアウォールの通過に問題が発生している場合は、次の解決策のいずれかをお試しください。

    • コーディネーター ノードにアクセスするクライアント コンピューターに割り当てられている IP アドレス範囲についてインターネット サービス プロバイダー (ISP) に問い合わせ、その IP アドレス範囲をファイアウォール規則として追加してください。

    • 代わりに、クライアント コンピューター用に静的 IP アドレスを取得し、ファイアウォール規則としてその静的 IP アドレス範囲を追加してください。

次のステップ

サーバー レベルおよびデータベース レベルのファイアウォール規則の作成については、次の記事をご覧ください。