Azure Database for PostgreSQL フレキシブル サーバーにおける SCRAM 認証

Salted Challenge Response Authentication Mechanism (SCRAM) は、パスワードベースの相互認証プロトコルです。 これは、いくつかのレベルのセキュリティを追加し、信頼されていない接続でのパスワード スニッフィングを防ぐチャレンジ応答スキームです。 SCRAM は、暗号化ハッシュ形式でサーバーにパスワードを格納することをサポートしており、高度なセキュリティを提供します。

SCRAM 認証方法を使用してAzure Database for PostgreSQLフレキシブル サーバーにアクセスするには、クライアント ライブラリで SCRAM をサポートする必要があります。 詳細については、SCRAM をサポートする ドライバーの一覧 を参照してください。

SCRAM 認証により、アプリケーション サーバーに追加の計算負荷が追加され、各認証のクライアント証明を計算する必要があります。 アプリケーションの接続プール内の接続の数を制限したり (アプリケーションのチャットを減らす)、クライアントで許可される同時トランザクションの数を制限したりすることで、SCRAM によって生じるパフォーマンスのオーバーヘッドを軽減できます (トランザクションが大きくなります)。 SCRAM 認証に移行する前に、ワークロードをテストします。

SCRAM 認証の構成

パラメーターに移動

SCRAM 認証を構成するには、Azure ポータルの [パラメーター] ページにアクセスします。

  1. Azure portal にサインインする
  2. Azure Database for PostgreSQL のフレキシブル サーバーに移動してください。
  3. 左側のメニューの [設定] で、[パラメーター] を選択 します
  4. 検索ボックスを使用して、次の手順で説明されているパラメーターを見つけます。

コンフィギュレーションの手順

  1. password_encryptionSCRAM-SHA-256に変更します。 現在、Azure Database for PostgreSQLでは SHA-256 を使用した SCRAM のみがサポートされています。

    SCRAM の暗号化ページのスクリーンショット。

  2. 認証方法として SCRAM-SHA-256 を許可します。

    SCRAM によって到達した認証のスクリーンショット。

    Important

    SCRAM-SHA-256方法のみを選択することで、SCRAM のみの認証を適用できます。 この方法を適用すると、MD5 認証を持つユーザーはサーバーに接続できません。 SCRAM を適用する前に、すべてのユーザー パスワードをSCRAM-SHA-256に更新するまで、MD5 と SCRAM-SHA-256 の両方が認証方法であることを確認してください。 手順 7 で説明したクエリを使用して、ユーザーの認証の種類を確認できます。

  3. 変更を保存します。 これらのプロパティは動的であり、サーバーの再起動は必要ありません。

  4. Azure Database for PostgreSQLフレキシブル サーバー クライアントから、Azure Database for PostgreSQL フレキシブル サーバーに接続します。 たとえば、

    psql "host=myPGServer.postgres.database.azure.com port=5432 dbname=postgres user=myDemoUser password=<password> sslmode=require"
    
    psql (12.3 (Ubuntu 12.3-1.pgdg18.04+1), server 12.6)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
  5. パスワードの暗号化を確認します。

    postgres=> show password_encryption;
       password_encryption
    ---------------------
    scram-sha-256
    (1 row)
    
  6. ユーザーのパスワードを更新します。

    postgres=> \password myDemoUser
    Enter new password:
    Enter it again:
    postgres=>
    
  7. azure_roles_authtype()関数を使用して、ユーザー認証の種類を確認します。

    postgres=> SELECT * from azure_roles_authtype();
             rolename          | authtype
    ---------------------------+-----------
    azuresu                   | NOLOGIN
    pg_monitor                | NOLOGIN
    pg_read_all_settings      | NOLOGIN
    pg_read_all_stats         | NOLOGIN
    pg_stat_scan_tables       | NOLOGIN
    pg_read_server_files      | NOLOGIN
    pg_write_server_files     | NOLOGIN
    pg_execute_server_program | NOLOGIN
    pg_signal_backend         | NOLOGIN
    replication               | NOLOGIN
    myDemoUser                | SCRAM-256
    azure_pg_admin            | NOLOGIN
    srtest                    | SCRAM-256
    sr_md5                    | MD5
    (14 rows)
    
  8. SCRAM 認証をサポートするクライアントからサーバーに接続します。

    SCRAM 認証は、組み込みのマネージド PgBouncer に接続されている場合にもサポートされます。