Azure Database for PostgreSQLの認証をAzure ADユーザーでやってみた

Azure,Database for PostgreSQL

Azure ADユーザーでAzure Database for PostgreSQLへログインすることができます。

PostgreSQL での認証に Azure Active Directory を使用する

PostgreSQLでの認証にAzure Active Directoryを使用することで、ユーザー管理をAzure ADで行えるというメリットがあります。

    • Azure Active Directoryの認証形式を利用するため、2段階認証などが可能です。
    • トークンによるアクセスが可能となり、パスワードを格納する必要がなくなります。
    • Azure ADグループを割り当てることができるため、Azure ADのグループを利用してデータベースのアクセス許可を管理できます。

今回は、Azure Database for PostgreSQLでのAzure ADユーザーの管理者設定、Azure ADユーザーを使ったPostgreSQLへのログイン確認、PostgreSQL上でのAzure ADユーザー作成までを実施しました。

今回の作業にあたっては、マイクロソフト社が公開している手順を参考にしています。

PostgreSQL での認証に Azure Active Directory を使用する

スポンサーリンク

Azure Database for PostgreSQLのAzure AD管理者設定

事前準備環境

今回は、事前にAzure ADユーザーとAzure Database for PostgreSQLを準備して作業を行いました。

      • AADユーザー(PostgreSQLの管理者設定したユーザー)
        • ユーザー名:pg-backup-user@XXXXXX.XXXXXX.XXXXXX
      • AADユーザー(PostgreSQLで追加したAADユーザー)
        • ユーザー名:pg-read-only-user@XXXXXX.XXXXXX.XXXXXX
      • Azure Database for PostgreSQL
          • サーバ名:backup-test-01.postgres.database.azure.com
          • リージョン:東日本
          • バージョン:11
          • パフォーマンス構成:Basic、1 個の仮想コア、5 GB

Azure Database for PostgreSQLでAD管理者設定を行う

公式サイトを参考に、Azure PortalでAzure Database for PostgreSQLにAzure AD管理者の設定を行います。

Azure Database for PostgreSQLでAAD管理者設定

Azure Database for PostgreSQLのメニューでActive Directory管理者を選択します。
管理者の設定を選択します。

Active Directoryの管理者設定になるため、AADユーザーを設定します。
今回は事前に作成しているpg-backup-userを指定しています。

※グループでの設定も可能です。

AAD管理者の設定がされていることを確認したら、保存をクリックします。

【補足】Azure Database for PostgreSQLで接続のセキュリティ設定

デフォルト状態ではPostgreSQLへ接続できない設定になっています。
自身のIPからAzure Database for PostgreSQLへの接続許可設定を行います。

※IPアドレスが変更されたことを忘れて再設定しないまま検証を行い、接続できずに悩んでしまいました。

接続許可設定

クライアントIPの追加を選択します。
自身のIPを許可するファイアウォール規則が追加されるため、保存を選択します。

※環境に応じて許可するIPを指定してください。(開始IPと終了IPに同じIPを指定すると、/32で指定可能です。)

—広告—

Azure Database for PostgreSQLにAzure ADユーザーでログイン

Azure CLIでサインインしてトークンを取得

引き続き公式サイトの情報を参考に作業を進めます。
Azure ADユーザーでPostgreSQLにログインする場合は、パスワードとしてトークンを利用します。

トークンを発行

Azure CLI(az loginコマンド)を使用してテナントにサインインします。
az loginコマンドを実行するとブラウザが開き、Azureへのサインイン画面が表示されるます。
先ほど設定したアカウントでサインインします。
完了するとメッセージが表示されます。

PS C:\> az login
The default web browser has been opened at (中略)  which you have access…
[
 {
  “cloudName": “AzureCloud",
  “homeTenantId": “テナントID",
  “id": “id",
  “isDefault": true,
  “managedByTenants": [],
  “name": “サブスクリプション名,
  “state": “Enabled",
  “tenantId": “テナントID",
  “user": {
    “name": “pg-backup-user@XXXXX.XXXXXX.XXXXX",
   “type": “user"
  }
 }
]

Azure CLIを使用してトークンを発行します。
コマンドは公式サイトのものをそのまま使用しています。

トークンの有効時間は1時間です。

PS C:\> az account get-access-token –resource-type oss-rdbms
{
 “accessToken": “トークン値",
 “expiresOn": “2021-07-17 19:29:38.427345",
 “subscription": “サブスクリプションID",
 “tenant": “テナントID",
 “tokenType": “Bearer"
 }

A5:SQL Mk-2でAzure Database for PostgreSQLへの接続設定手順

今回はPostgreSQLの操作にA5:SQL Mk-2を利用しています。

A5:SQL Mk-2

最初に、Azure Database for PostgreSQLへの接続設定を行います。

    • 接続情報
      • ホスト名:backup-test-01.postgres.database.azure.com(サーバ名.postgres.database.azure.com)
      • データベース名:postgres(デフォルト)
      • ユーザーID:pg-backup-user@XXXXXX.XXXXXX.XXXXXX@backup-test-01(ユーザー名@サーバ名)
      • Port:5432
      • パスワード:発行したトークン値
      • SSLモード:優先
      • サーバ証明書を信用する:チェック
PostgreSQLへログイン

A5:SQL Mk-2でデータベース > データベースの追加と削除を選択し、データベースへの接続を作成します。

データベースの追加と削除が表示されるので、追加を選択します。

追加するデータベースの接続タイプの選択画面になります。PostgreSQL(直接接続)を選択します。

Azure Database for PostgreSQLの設定でSSLが必須となっているため、SSLを利用した接続を使用します。

※Azure Database for PostgreSQLの設定でSSLを無効にすることも可能です。

サーバ名などの項目を設定値通りに入力します。
設定が完了したらOKを選択します。

接続を行い、SQLを実行したところ、問題なく動作することを確認できました。

※データベースの項目にある、すべてのデータベース情報の再読み込みを実行すると、接続が更新されるため、接続状況を確認できます。

【補足】A5:SQL Mk-2でSSL接続を使えるようにする

A5:SQL Mk-2でSSL接続を行う場合は、OpenSSLのライブラリが必要となるため、事前にインストールしておきます。

Open SSLのインストール

SSL接続を行う場合はOpenSSLのライブラリをインストールします。
インストールファイルは、OPEN SSLダウンロード(英語)ダウンロードします。

※今回の場合はLight版で問題ありません。

ライセンス確認画面が表示されます。
I accept the agreementにチェックを入れて、次へ進みます。

インストールディレクトリの確認画面が表示されます。
変更の必要がない場合は、そのまま次へ進みます。

OpenSSLのDLLをWindowsのsystem directoryにコピーするかどうかの確認画面が表示されます。
Windowsのsystem directoryにコピーします。

メッセージを確認し、問題がなければインストールを実行します。

—広告—

Azure Database for PostgreSQLへAzure ADユーザーを追加

PostgreSQLにAzure ADユーザーを追加

引き続き公式サイトの情報を参考に作業を進めます。
AADユーザーをPostgreSQLに追加します。
なお、このAADユーザーはAAD管理者登録のグループに属している必要はありません。
AADグループやAAD側の権限は問いません。

    • 実施する手順
      • PostgreSQL上でCREATE ROLEコマンドを実行し、追加するAADユーザーをazure_ad_userロールに割り当て
      • 追加したAADユーザーでAzure CLIを使ってAzureにログインし、トークンを発行
      • 追加したAADユーザーでPostgreSQLへログイン

※実際の運用管理上は管理しやすいよう、AAD側の権限やグループを設定します。

PostgreSQLにAADユーザー追加

PostgreSQLでCREATE ROLEコマンドを実行し、AADユーザーをazure_ad_userロールに追加します。

CREATE ROLE “pg-read-only-user@XXXXX.XXXXX.XXXXX" WITH LOGIN IN ROLE azure_ad_user ;

※azure_ad_userはAzure Database for PostgreSQLにあるビルトインロールです。AADユーザーはこのロールに追加する必要があります。

Azure CLIコマンドを実行し、追加したユーザーでサインインしてトークンを発行します。

PS C:\> az login

PS C:\> az account get-access-token –resource-type oss-rdbms
{
 “accessToken": “トークン値",
 “expiresOn": “2021-07-17 19:45:28.227225",
 “subscription": “サブスクリプションID",
 “tenant": “テナントID",
 “tokenType": “Bearer"
}

A5:SQL Mk-2で設定を行います。
ユーザーIDには追加したAADユーザーを、パスワードにはトークンを設定します。
テスト接続で接続を確認します。

問題がなければ、接続に成功しましたというメッセージが表示されます。

—広告—

最後に

今回は、Azure Database for PostgreSQLのユーザーとしてAzure ADユーザーを利用するための手順を確認しました。
2段階認証なども利用できるため、非常に便利な機能かと思いました。

引き続き、いろいろ試してみたいと思います。

スポンサーリンク