Azure Database for PostgreSQL (単一サーバー) で TLS 接続を構成する

適用対象: Azure Database for PostgreSQL - 単一サーバー

重要

Azure Database for PostgreSQL - シングル サーバーは廃止パスにあります。 Azure Database for PostgreSQL - フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for PostgreSQL - フレキシブル サーバーへの移行の詳細については、Azure Database for PostgreSQL 単一サーバーの現状に関するページを参照してください。

Azure Database for PostgreSQL では、トランスポート層セキュリティ (TLS) (旧称 Secure Sockets Layer (SSL)) を使用してクライアント アプリケーションを PostgreSQL サービスに接続することが推奨されます。 お使いのデータベース サーバーとクライアント アプリケーション間に TLS 接続を強制すると、サーバーとお使いのアプリケーション間のデータ ストリームを暗号化することにより、中間者 (man in the middle) 攻撃から保護するのに役立ちます。

既定では、PostgreSQL データベース サービスは TLS 接続を要求するように構成されます。 クライアント アプリケーションで TLS 接続がサポートされていない場合は、TLS の要求を無効にすることもできます。

重要

SSL 中間証明書は、2024 年 1 月 31 日以降に更新されるように設定されています。 中間証明書は、エンド エンティティ証明書を発行するために、信頼されたルートによって発行される下位証明書です。 その結果、信頼されたルート CA で始まり、中間 CA を介し、自分に発行された SSL 証明書で終わる証明書チェーンとなります。 証明書のピン留めは、セキュリティで保護されたセッションを確立するときに、認可または "ピン留め" された証明書のみが受け入れられるセキュリティ手法です。 別の証明書を使用してセキュリティで保護されたセッションを確立しようとすると、拒否されます。 本年度中に既に完全に更新されておりverify-ca または verify-full 接続文字列クライアント ディレクティブを使用して証明書をピン留めできる信頼されたルート CA とは異なり、中間 CA をピン留めする標準的で確立された方法はありません。 しかし、さまざまなプログラミング言語でクライアントに中間証明書をピン留めするカスタム接続スタックを作成する理論上の能力はあります。 前述のとおり、中間証明書をカスタム コードでピン留めする可能性が低いシナリオでは、この変更の影響を受ける可能性があります。 CA をピン留めしているかどうかを判別するには、証明書のピン留めと Azure サービスに関するページを参照してください

TLS 接続の適用

Azure portal や CLI を使用してプロビジョニングされたすべての Azure Database for PostgreSQL サーバーで、TLS 接続の適用が既定で有効になります。

同様に、Azure portal のサーバー下にある [接続文字列] 設定で事前定義された接続文字列には、TLS を使用してデータベース サーバーに接続するための一般的な言語の必須パラメーターが含まれます。 TLS パラメーターはコネクタによって異なります ("ssl=true"、"sslmode=require"、"sslmode=required" など)。

TLS 適用の構成

必要に応じて、TLS 接続の適用を無効にできます。 Microsoft Azure では、セキュリティ強化のため [Enforce SSL connection (SSL 接続の適用)] 設定は常に有効にしておくことをお勧めします。

Azure ポータルの使用

Azure Database for PostgreSQL サーバーにアクセスし、[接続のセキュリティ] を選択します。 トグル ボタンを使用して、 [Enforce SSL connection] \(SSL 接続の適用) 設定を有効または無効にします。 次に、 [保存] を選択します。

接続のセキュリティ ‐ TLS/SSL 適用の無効化

この設定は、 [概要] ページの SSL 適用ステータス インジケーターで確認できます。

Azure CLI の使用

ssl-enforcement パラメーターを有効または無効にするには、Azure CLI でそれぞれ Enabled 値と Disabled 値を使用します。

az postgres server update --resource-group myresourcegroup --name mydemoserver --ssl-enforcement Enabled

SSL 接続の状態の決定

また、次のクエリを使用して、Azure Database for PostgreSQL - シングル サーバー インスタンスの SSL 使用状況に関するすべての情報をプロセス、クライアント、アプリケーション別に収集することもできます。

SELECT datname as "Database name", usename as "User name", ssl, client_addr, application_name, backend_type
   FROM pg_stat_ssl
   JOIN pg_stat_activity
   ON pg_stat_ssl.pid = pg_stat_activity.pid
   ORDER BY ssl;

アプリケーションまたはフレームワークが TLS 接続をサポートしているかどうかの確認

データベース サービスに PostgreSQL を使用しているアプリケーション フレームワークの中には、インストール時に既定で TLS が有効にならないものもあります。 PostgreSQL サーバーが TLS 接続を適用していても、アプリケーションで TLS が構成されていない場合、アプリケーションはデータベース サーバーに接続できない可能性があります。 TLS 接続を有効にする方法については、使用しているアプリケーションのドキュメントを参照してください。

TLS 接続で証明書検証を必要とするアプリケーション

安全に接続するために、信頼された証明機関 (CA) 証明書ファイルから生成されたローカルの証明書ファイルがアプリケーションに必要な場合があります。 Azure Database for PostgreSQL サーバーに接続するための証明書は、 https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem にあります。 証明書ファイルをダウンロードし、希望の場所に保存します。

ソブリン クラウドにおけるサーバーの証明書については、Azure Government21Vianet によって運営される Microsoft AzureAzure Germany の各リンクを参照してください。

psql を使用した接続

次の例は、psql コマンド ライン ユーティリティを使用して PostgreSQL サーバーに接続する方法を示しています。 sslmode=verify-full 接続文字列設定を使用して、TLS/SSL 証明書の検証を適用します。 ローカルの証明書ファイルのパスを sslrootcert パラメーターに渡します。

次のコマンドは、psql 接続文字列の例です。

psql "sslmode=verify-full sslrootcert=BaltimoreCyberTrustRoot.crt host=mydemoserver.postgres.database.azure.com dbname=postgres user=myusern@mydemoserver"

ヒント

sslrootcert に渡された値が、保存済みの証明書のファイル パスと一致することを確認します。

Azure Database for PostgreSQL (単一サーバー) での TLS 適用

Azure Database for PostgreSQL (単一サーバー) では、トランスポート層セキュリティ (TLS) を使用してデータベース サーバーに接続するクライアントの暗号化をサポートしています。 TLS は、データベース サーバーとクライアント アプリケーションとの間のセキュリティで保護されたネットワーク接続を確保する業界標準のプロトコルであり、コンプライアンス要件への準拠を可能にします。

TLS の設定

Azure Database for PostgreSQL (単一サーバー) には、クライアント接続に TLS バージョンを適用する機能が用意されています。 TLS バージョンを適用するには、 [TLS の最小バージョン] オプション設定を使用します。 このオプション設定には次の値を使用できます。

TLS の最小設定 サポートされているクライアント TLS バージョン
TLSEnforcementDisabled (既定値) TLS は不要
TLS1_0 Tls 1.0、TLS 1.1、TLS 1.2 以降
TLS1_1 TLS 1.1、TLS 1.2 以降
TLS1_2 TLS バージョン 1.2 以降

たとえば、この最小 TLS バージョンを TLS 1.0 に設定すると、サーバーでは TLS 1.0、1.1、1.2 以上を使用するクライアントからの接続が許可されます。 また、これを 1.2 に設定すると、TLS 1.2+ を使用するクライアントからの接続だけが許可され、TLS 1.0 および TLS 1.1 を使用した接続はすべて拒否されます。

注意

既定では、Azure Database for PostgreSQL では最小の TLS バージョン (設定 TLSEnforcementDisabled) は強制されません。

最小の TLS バージョンを強制すると、後で最小バージョンの強制を無効にすることはできません。

Azure Database for PostgreSQL (単一サーバー) の TLS 設定を行う方法については、TLS 設定の構成方法に関するページを参照してください。

Azure Database for PostgreSQL 単一サーバーでサポートされる暗号

SSL/TLS 通信の一部として、暗号スイートが検証され、サポートされている暗号スイートのみがデータベース サーバーとの通信を許可されます。 暗号スイートの検証は、ゲートウェイ レイヤーで制御され、ノード自体では明示的には行われません。 暗号スイートが以下の一覧に示されているスイートのいずれかと一致しない場合、受信クライアント接続は拒否されます。

サポートされている暗号スイート

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

次のステップ

Azure Database for PostgreSQL の接続ライブラリに関する記事で、さまざまなアプリケーション接続オプションを確認します。